流程图设计

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();
String startOrgId = bpmInstance.getCreateOrgId();

// 如获取发起人是否为部门经理角色
orgScript.checkUserHasRole(bpmInstance.getCreateBy(),"bmjl");

并行网关

并行网关产生的后续任务会多实例并行执行。并行网关需要进行回收合并为一条实例。

所以并行网关常常会成对出现。

并行网关回收多实例是通过前一并行网关分发数来决定!

如图:并行网关1分发出三条实例,则并行网关2必须且一定会回收三条实例过后才会继续向下流转。
这个条件同样适用于条件并行网关。

高级节点

TimerEvent

  • 定时边界事件 :用于任务节点,子流程 设置逾期后流程走向,或者触发边界事件动作
  • 定时器节点: 用于暂停任务,到达指定时间后继续流转
如图

如图【部门经理审批】 若超过30天还未处理,任务就会流转至【副总审批】,部门审批后 流程会延时30分钟才会流转至终止节点

配置
开始时间(timeDate)

使用 ISO 8601 格式指定一个确定的时间,触发事件的时间,如:2011-03-11T12:13:14

持续时间: (timeDuration)

当时间超过该时间,则执行定时器事件
如 十天 :PT10D ,十分钟 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事件,流程进入边界事件 进入 副总审批节点

其他说明

  • 驳回推荐直接使用驳回功能,而不必画线条实现
  • AgileBPM 在更多节点类型支持上做了弱化处理,而更多的通过插件来辅助实现,比如:消息任务、服务任务等取而代之的是,消息插件,节点前后置 Groovy 脚本配置等
  • 后面会支持动态事项任务,支持动态生成事项任务,并指定回收节点,指定事项候选人、表单等。
  • Activiti 异常边界补偿等监听事件的支持,这里暂不支持。可进行规避此类场景产生。或者通过自由跳转、插件、前后置脚本来实现。稍后些不排除我们会慢慢全面支持。