ABI工作流设计器中的所有组件都具备如下高级属性。
1.参数
1.1 流程变量
设计工作流的时候可以定义变量,流程扭转的时候可以使用。
1.1.1 变量定义
每个工作流,可以定义自己在流程运行过程中使用变量,定义界面下图所示:
流程变量定义的属性包括:
参数:流程变量的名称,在流程流转过程中,根据该名称调用该变量,参数前面需要加上@
变量类型:字符串、数字、逻辑型
输入方式:输入框、下拉列表、复选框、日期选择,维,输入方式选择维,下拉出的维为系统设置中的公共维表
标题:流程变量的简称
后缀:流程变量的单位或后面加入的字符串
集合:在某些输入方式(例如下拉列表),需要提供选择的集合时,需要为变量定义参数的集合,定义方式为:“key:value”,换行作为分隔。如图26所示:
注意:流程在流转的过程中,每个活动的实例都会拥有自己的局部变量,局部变量只在流程处理内部定义和使用,不提供外部定义局部变量的方式。可以理解为这个不对外提供使用,只是用于维系数据退回、层层退回等的实现。
1.1.2变量的使用
参数输入:所有的活动(除表单活动)都可以设置参数输入,直接勾选定义的变量即可。
输入校验:对输入的参数进行检验,表达式中参数通过“@”+参数名的方式来引用,表达式返回值需要为逻辑型。支持常用的操作符:+、-、*、/、%(取余)、>、>=、<、<=、==、!=,如:@a != null。
参数赋值:表单活动使用,用来绑定参数,给参数赋值,【是否手动】是否是用户办理界面手动输入赋值,【赋值公式】常量或者分析表的表达式如:GRID1.A2或者HHH2.HHH1,
【是否传参】是否当做分析表的参数。
参数回填:所有的活动都可以设置参数回填,在每一个活动结束后可以对分析表中的数据进行回填,可以是输入的值回填到分析表,也可以是内置参数的值回填到分析表。
条件流表达式:需要结合参数的输入输出使用,将上一个活动提交后的值作为条件流表达式中的变量。例如:上一个活动的参数输出为“jine”,jine>1000走某一条分支。
办理人表达式:需要结合参数的输入输出使用,将上一个活动提交后的值作为办理人表达式使用。例如:上一个活动的参数输入为“banliren”,user.userid=@banliren
脚本:例如:java脚本中获取变量时,写法为:delegateTask.getVariable("变量名");
注意:办理人表达式不是一定要结合参数的输入输出使用,若是用到变量就结合参数使用。
注意:办理人表达式不是一定要结合参数的输入输出使用,若是用到变量就结合参数使用。
1.1.3 变量的传递
全局变量在整个流程中都起作用,定义之后可以直接使用。
局部变量会使用一个全局的变量_result来传递,活动任务可以通过该参数获取上一个办理的活动实例的局部参数集合。
一些复杂的场景的局部变量的传递,略微有所调整:
1、会签的活动
会签的活动在实际运行时,会产生多个实例,那么它们的输入参数将会存在多份,为了使会签活动的结果可以在后续条件判断中使用。我们将会签活动的局部变量,保存到全局变量_result中。
假设该环节用户A与用户B各有两个参数var1和var2,_result结构如下:
{ Key :A Value: { Key : var1 Value: value1
Key : var2 Value: value2}
Key :B Value: { Key : var1 Value: value3
Key : var2 Value: value4} }
_result集合: key为用户ID,值为参数的集合。
参数集合:key为参数名称,值为参数的值。
2、并行活动
将每个活动实例的_result按定义ID为key,存储在全局变量_results里面,用户根据定义ID去取对应活动的局部变量。
2.脚本
在设计流程时,有前置脚本、后置脚本、操作执行脚本等脚本可以定义,下面是这些脚本的介绍。
2.1 流程前置脚本
流程前置脚本,在该活动实例创建时执行,如图所示:
2.1.1 前置JAVA脚本
编写规范:
1.脚本必须符合JAVA编码规范
2.脚本可用环境变量:
变量名 | 类别 | 描述 |
delegateTask | Org .activiti .engine .delegate .DelegateTask | 活动实例对象 常用方法: getAssignee() //获取参与人ID getVariable(String varname) 根据参数名获取全局参数 getVariableLocal(String varname)根据参数名获取局部参数 setVariable(String varname,Object value) 设置全局参数 setVariableLocal(String varname,Object value)设置局部参数 |
definition | Com .esen .platform .workflow .management .WorkflowDefinition | 工作流定义对象 常用方法: getId() 获取工作流定义ID getName() 获取活动名称 getProperty(String key) 获取定义的属性 |
definitionItem | Com .esen .platform .workflow .management .WorkflowItemDefinition | 活动定义对象 常用方法: getId() 获取活动ID getName() 获取活动名称 getPropertyStr(String key) 获取节点的属性 |
流程实例全局参数 |
| 流程实例全局参数 在执行脚本时,流程实例的参数,会作为环境变量传递到执行环境 可以使用变量名称直接调用该变量。 例如: 全局变量定义了int型参数DATE1 = 5; 在脚本中就可以直接调用DATE1 if(DATE1 >3){ //脚本片段1 }else{ //脚本片段2 } |
3.如果脚本中有自定义局部变量,名称不可以使用上述环境变量名。
脚本示例:
1. 获取参与人
String userId = delegateTask.getAssignee(); |
2. 获取流程参数
//获取局部参数(活动实例内部参数)
|
3. 设置流程参数
//设置全局参数
|
2.1.2 前置存储过程
前置存储过程,可以支持活动实例创建时,先执行一段自定义的sql。
2.2 流程后置脚本
后置JAVA脚本,在活动实例完成后执行,如图所示
2.2.1 后置JAVA脚本
脚本规范与前置JAVA脚本一致,参考前置脚本
2.2.2 后置存储过程
后置存储过程,可以支持活动实例完成后,执行一段自定义的sql。
2.3 操作执行脚本
操作执行脚本是跟操作执行相关的,分别是在操作执行前后执行,如图所示:
2.3.1 执行前JS脚本
脚本编写规范:
1.脚本必须符合JS规范
2.脚本可用环境变量:
变量名 | 类别 | 描述 |
type | 字符串 | 执行操作的ID,例如:commit |
map | 集合 | 提交到工作流的参数集合 |
param | 集合 | 执行提交操作时,提交到后台响应的参数集合(上述的map与type也包含在这个集合里面) 主要属性包括(一下属性的值都可以在脚本中使用,不能修改,修改将导致流程执行出错): param["actCommand"] = type; param["loginId"] //登录用户ID |
self | JS对象(FlowInfo) | 当前流程操作管理对象 主要属性: self.doNotCommit //是否提交操作(在执行IRPT上报时,就不需要执行这里的提交操作,而是调用上报的操作) |
3.如果脚本中有自定义局部JS对象,名称不可以使用上述环境变量名。
脚本示例:
1. 往流程中设置新的流程变量/调整流程变量的值
//往流程里面提交参数 map.put("参数名称","参数值"); |
2. 不执行默认的提交操作,而是自定义(第三方)的操作
//执行第三方的提交(这里是以IRPT的上报为例) var win = leftframe.window; //设置不需要执行默认的提交操作 self.doNotCommit = true; |
3. 在提交前有条件的终止提交
如果在提交前检测到不满足提交的条件,想要终止提交,可以添加如下代码(提示信息可以根据需要自由定义):
showMessage("不满足提交的条件!"); |
4. 根据操作类别,选择执行脚本
if(type == "commit"){ //*****脚本片段1**** }else { //*****脚本片段2**** }
|
5. 执行弹出参数选择/进度条DIALOG,阻塞提交操作,在完成后再继续执行提交
varxOrgUserRoleTreeDialog = getObjectFromRootAsync("XOrgUserRoleTreeDialog", "__ESEN$xOrgUserRoleTreeDialog__", true, "esmain/js/xorguserroletreedialog.js"); //将继续提交动作 xOrgUserRoleTreeDialog.resize(640,430); //弹出参数选择框 |
2.3.2 执行后JS脚本
执行后JS脚本与执行前JS脚本规范类似。
2.3.3 执行前JAVA脚本
脚本规范:
1.脚本必须符合JAVA编码规范
2.脚本可用环境变量:
变量名 | 类别 | 描述 |
historicTask | Org .activiti .engine .history .HistoricTaskInstance | 历史活动实例对象 常用方法: getId() 获取ID getName() 获取名称 getAssignee() 获取执行用户ID |
login | Com .esen .platform .login .Login | 当前登录用户对象 常用方法: getLoginId();获取登录用户ID getLoginName();获取登录用户名称 |
definition | Com .esen .platform .workflow .management .WorkflowDefinition | 工作流定义对象 常用方法: getId() 获取工作流定义ID getName() 获取活动名称 getProperty(String key) 获取定义的属性 |
definitionItem | Com .esen .platform .workflow .management .WorkflowItemDefinition | 活动定义对象 常用方法: getId() 获取活动ID getName() 获取活动名称 getPropertyStr(String key) 获取节点的属性 |
活动输入参数 |
| 用户活动可以定义自己的输入参数, 在用户执行时,参数会被提交到执行脚本 例如: 输入参数定义了int型参数DATE1 = 5; 在脚本中就可以直接调用DATE1 if(DATE1 >3){ //脚本片段1 }else{ //脚本片段2 } |
3.如果脚本中有自定义局部Java对象,名称不可以使用上述环境变量名。
脚本示例:
1. 获取参与人
String userId = historicTask.getAssignee(); |
2. 获取流程参数
//获取活动实例管理服务对象 TaskServicetaskService = Workflow.getInstance().getTaskService(); //获取活动实例ID String aid = historicTask.getId(); //获取局部参数(活动实例内部参数)
|
3. 设置流程参数
//获取活动实例管理服务对象 TaskServicetaskService = Workflow.getInstance().getTaskService(); //获取活动实例ID String aid = historicTask.getId(); //设置全局参数
|
2.3.4 执行后JAVA脚本
执行后JAVA脚本,在操作执行完成后运行,规范与执行前JAVA脚本一致。
3.子流程
流程可以定义子流程,将某个指定的任务分解成为更细小多个任务。当父流程走到某一步的时候,可以发起子流程。
3.1 定义子流程
子流程的定义和普通流程的定义基本一致,但是需要绑定父流程即定义流程输入输出的设置,并且绑定活动,同时也需要检查父流程被绑定活动的办理人是否有发起该子流程的权限。
3.2 绑定父流程的用户活动
允许子流程选择一个父流程的某个活动来绑定,当运行到该活动时,允许发起当前子流程的新实例。
3.3 绑定父流程活动的前提
1、父流程的参与人中包含当前定义子流程的服务器用户。
2、绑定父流程活动的办理人有发起子流程的权限。
3.4 设置输入输出
1、默认输入为:主流程对应活动实例的全部局部变量。
2、可选输入:主流程定义的全局变量。
3、默认无输出
4、可选输出:子流程自身的全局变量,是从父流程中继承过来的变量,可以是全局的也可以是局部变量。
请先登录