业务流介绍
业务流通常是一个项目的流程链,即一项业务的执行顺序。通过业务流,公司可以对整体业务的推行进度、处理过程、以及时间节点等都可以及时把控,及时调整,保证效率。
业务流配置
业务流配置需要的文件与功能
1、保证平台上有业务流组件证书
,并且有流程定义、业务定义、业务规则
这三个功能,如果没有请联系商务与售后人员获取
2、一般具备第一个条件,平台会给出业务流相关的案例demo,根据demo进行参考配置
业务流操作步骤
1、按照文档中的操作步骤先升级业务流相关demo
2、升级完之后平台上会出现相关的资源表与案例
3、以工程跟踪为例,按照视频介绍配置业务流
3.1、在流程定义中创建一条数据,并规划流程(业务流)图,其中审核环节如果不挂工作流,这个子功能数据不需要录入
在流程规划器中将所有用到的节点规划出来,点击节点右键有设定属性,给每一个节点设置属性,ID 属性值一般规则是编码大写,并且唯一
3.2、每个业务流都会对应一个业务表、业务流程节点表,业务流程节点与业务节点组成的视图
注意:
1、业务流程节点表必须要有业务表的主键ID、业务定位子功能业务节点表主键ID作为外键字段存储
2、视图可参考视频中提供的视图作为参考进行创建,并做一个功能
3.3、在业务定义中新建一条数据,比如”工程跟踪”,表单中开发配置(任务)配置规则参考视频讲解进行配置
3.4、在3.3的基础上,添加业务节点注意业务节点编码必须设置为流程定义中节点设定属性ID的值
3.5、在3.4的基础上,在配置业务节点上配置点击这个节点打开对应功能的一些功能信息
3.6、在业务规则中添加事件,这里的事件用于在业务流展板上点击节点或按钮需要处理的业务逻辑,注意:业务规则已经有一部分数据,也可以根据自己的业务进行,添加的时候可以参考原来的数据
3.7、业务规则的调运有两处地方,第一是业务节点上配置功能信息时,需要加过滤条件时,需要调运业务规则
第二个调运业务规则的地方是流程定义里面扩展函数里面需要调运
4、以上是以工程跟踪为例,按照视频介绍在平台上先将业务流规划出来,并且规划出各个节点需要干什么,以下是对业务流展板的规划
4.1、根据工程跟踪的案例以及相关视频,规划工程跟踪的展板,首先要在项目的/webapp/pro/目录下建工程跟踪相关的文件
4.2、如果4.1步骤已经完成,就将插件在菜单中挂载出来,能正常显示就是对的
以上步骤就是配置业务流一个粗略的步骤说明,好多细节还是需要看视频与文档进行配置
配置过程中出现的问题
1、在业务流与工作流结合使用时,出现审批历史,时间不对的问题如图:
处理方式:复写代码,代码找售后人员获取,一般不建议直接在业务流中挂载流程使用,如果需要用到,就修改代码
2、采购需求点操作报错问题如图:
处理方式:找到这个action按钮,修改事件代码前两句
JE.initCtr(“JE.sys.busflow.controller.BusFlowController”);
var busUtil=Ext.create(“JE.sys.busflow.util.BusFlowUtil”);
3、案例功能升级后业务规则报错问题,如图:
处理方式:将业务规则功能打包,安装平台升级包就可以,升级包找售后人员获取
3、在展板上点击节点,不出现界面,这里应该是调运的流程定义的扩展函数没有加载到,从而报错,如图:
处理方式:修改后台BusFlowController类的代码,增加getFlowYwdy()方法,这个方法代码找售后人员获取,代码位置在:
前端修改PRO.busflow_ywgz.view.MainView.js,代码找售后人员获取
4、清空所有缓存后,直接打开业务菜单展板去点击节点,不会触发点击事件,必须先点击流程定义后,再去打开业务菜单展板,才可以触发节点点击事件
处理方式:首先是加载顺序问题,所以需要在全局脚本库中写脚本进行加载
function(){
//方法体
if (!JE.RULE) {
JE.RULE = {};
var rules = JE.ajax({url: "/je/load", params: {tableCode: "JE_CORE_RULE", limit: -1}}).rows;
Ext.each(rules, function (rule) {
if (JE.isNotEmpty(rule.RULE_FN) && JE.isNotEmpty(rule.RULE_FNSTR)) {
var fn = JE.eval(rule.RULE_FNSTR);
if (fn) {
JE.RULE[rule.RULE_FN] = fn;
}
}
})
}
}
5、在业务表中,加一个action按钮打开一个业务流展板,并且打开就能加载到,并且能传参,根据当前数据进行切换
处理方式:首先写事件将展板能打开
/**
* action按钮单击事件
* @param {} grid 列表
* @param {} model 当前行的数据
* @param {} rowIndex 行的索引
* @param {} colIndex 列的索引
*/
function(grid, model, rowIndex, colIndex) {
//点击就加载展板
JE.initCtr("PRO.xmqgcgz.controller.XmqgcgzController");
//当前数据参数
var xmid = model.data.PT_XMGL_XMXX_ID;
var xmmc = model.data.XMXX_XMMC;
//面板
var panel = Ext.create('PRO.xmgz.view.MainView', {
vueInfo: {
//传参
params: { PT_XMGL_XMXX_ID: xmid, XMXX_XMMC: xmmc },
callback: function (data, param) {
var ele = panel.up('window');
if (data == 'resize') {
var bodyWidth = JE.getBodyWidth();
ele.setWidth(param ? 1330 : bodyWidth);
ele.center();
return false;
}
//读取当前数据
var bean = JE.ajax({
url: JE.getUrlMaps('je.core.getInfoById'),
params: {
tableCode: 'PT_XMGL_XMXX',
pkValue: xmid//获得主键
}
});
record.set(bean);
record.commit();
ele.close();
}
}
});
var winPanel = JE.win({
style: 'background-color:transparent;',
bodyStyle: 'background-color:transparent;',
title: '项目跟踪',
items: panel,
height: "100%",
width: "100%",
padding: '0',
shadow: false,
resizable: false,
showFn: function (win) {
}
}).show();
}
在MainView里面接收参数,后续业务处理,可以用到这个参数,这个根据自身业务定