AgileBPM 基于 Activiti 5.22实现,所以流程图支持BPMN2.0标准,流程图的设计器是通过改造 Activiti 原生设计器实现。这里做流程图设计上的规范指导。
流程图关键元素概念介绍
- 开始节点: 流程的发起节点,代表流程流转的开始
- 结束节点: 流程终止,执行至该节点,流程就会执行终止操作
- 用户任务: 普通用户任务
- 会签任务: 会签操作,多人任务
- 分支网关: 通过逻辑条件选择流转线路,需要有且仅有一条分支条件满足
- 条件并行网关: 满足条件的分支将并行多实例流转
- 并行网关: 并行分发多条实例任务,不支持条件配置。
- 发起节点: 流程发起后,第一个节点的任务,往往用于驳回发起人使用,所以第一个节点会默认跳过。
- 外部子流程: 发起一个子流程,子流程结束后主流程会继续流转。外部子流程可以共享主流程业务对象。
分支网关
如图,配置网关条件,必须有且只有一个条件返回 true
。
可以使用一下变量 作为判断条件
- 业务对象
请点击流程变量树选择业务对象的字段。
如 DEMO 流程判断年龄大小:return Demo.get('nl')<20;
variableScope
流程变量//Object o = variableScope.getVariable(String variableName);
return variableScope.getVariable("times")>1;submitActionName
流程提交的动作CODE
点击同意按钮,则为“agree”// 点击的同意按钮
return submitActionName == "agree"bpmInstance
流程实例
如获取发起人、发起组织
String startUserId = bpmInstance.getCreateBy(); |
提示如果遇到 UelExpressionCondition 异常提示 如:
“condition expression returns non-Boolean”
“condition expression returns null”
说明没有从 AgileBPM 私服下载改造后的 jar 包, 可以下载 Activiti5.22.jar 到本地替换 activiti jar的包
并行网关
并行网关产生的后续任务会多实例并行执行。并行网关需要进行回收合并为一条实例。
所以并行网关常常会成对出现。
并行网关回收多实例是通过前一并行网关分发数来决定!
如图:并行网关1分发出三条实例,则并行网关2必须且一定会回收三条实例过后才会继续向下流转。
这个条件同样适用于条件并行网关。
高级节点
TimerEvent
- 定时边界事件 :用于任务节点,子流程 设置逾期后流程走向,或者触发边界事件动作
- 定时器节点: 用于暂停任务,到达指定时间后继续流转
如图
如图【部门经理审批】 若超过30天还未处理,任务就会流转至【副总审批】,部门审批后 流程会延时30分钟才会流转至终止节点
配置
开始时间(timeDate)
使用 ISO 8601 格式指定一个确定的时间,触发事件的时间,如:2011-03-11T12:13:14
持续时间: (timeDuration)
当时间超过该时间,则执行定时器事件
持续时间以格式: P [n] Y [n] M [n] D T [n] H [n] M [n] S
如 十天 :P10D
,十分钟 PT10M
十小时 PT10H
十秒 PT10S
时间段表示法 是ISO 8601规定的格式 (由BPMN 2.0规定):”如果要表示某一作为一段时间的时间期间,前面加一大写字母P,但时间段后都要加上相应的代表时间的大写字母。如在一年三个月五天六小时七分三十秒内,可以写成P1Y3M5DT6H7M30S“
循环时间: (timeCycle)
指定重复执行的间隔, 可以用来定期启动流程实例,或为超时时间发送多个提醒。 timeCycle元素可以使用两种格式。第一种是 ISO 8601 标准的格式,一种 使用 cron表达式指定timeCycle
如:重复3次,每次间隔10小时R3/PT10H
每5分钟执行一次 0 0/5 * * * ?
ISO 8601 标准的 重复时间表示法:“前面加上一大写字母R,如要从2004年5月6日北京时间下午1点起重复半年零5天3小时,要重复3次,可以表示为R3/20040506T130000+08/P0Y6M5DT3H0M0S。对应的各地标准”
取消活动(边界事件)
边界事件支持配置是否取消活动,默认为取消活动,如上图、取消活动意味着 部门经理实例将终止,并触发节点cancelled事件,流程进入边界事件 进入 副总审批节点
动态过期时间
可以使用 ${duration}
,作为过期时间,但是必须在使用前设置流程变量 “duration” ,可以通过前后置脚本设置变量:variableScope.setVariable("duration",'PT10D')
其他说明
- 驳回推荐直接使用驳回功能,而不必画线条实现
- AgileBPM 在更多节点类型支持上做了弱化处理,而更多的通过插件来辅助实现,比如:消息任务、服务任务等取而代之的是,消息插件,节点前后置 Groovy 脚本配置等
- 后面会支持动态事项任务,支持动态生成事项任务,并指定回收节点,指定事项候选人、表单等。