Camunda 工作流并行子流程工作流会签或签加签比例签)

Posted catoop

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Camunda 工作流并行子流程工作流会签或签加签比例签)相关的知识,希望对你有一定的参考价值。

如下图为一个流程图,其需求过程如下:

1、某业务员发起一个登记单
2、领导审批
3、领导选择多个部门进行阅办,每个部门并行进行
4、部门内有两个审批环节(环节一:部门经理或经理助理或签,环节二:部门内的多个主管会签)
5、每个部门各自进行,互不影响,等所有部门都办理完成后进行汇总回档,登记单状态为“已归档”
6、流程结束
特殊场景:在多个部门进行并行阅办的过程中,只要登记单的状态还不是已归档状态,第二个节点的领导,还可以随时增加阅办的部门(从技术的角度来说,只要子流程节点还是活动状态,就可以随时增加子流程活动节点的实例数)。

结合上面的需求和已经画好的流程图,综合来看已经很清楚实现了,并行子流程应对 “多节点为一组” 独立并行流转的场景最为合适。

在中途为子流程环节增加实例的代码如下:

// RuntimeService 为 camunda 内置的对象,可以直接注入使用
@Autowired
private RuntimeService runtimeService;

@Test
public void addInstance()
   // 整个流程的流程实例Id
   String processInstanceId = "d0a284f3-af8e-11ea-88c4-000ec6dd34b8";
   // 子流程节点的Id,在流程图中查看,此为固定值(一般起一个正规的名字,本例是自动生成的随机名)
   String activityId = "Activity_0qs5wc1";

   runtimeService.createProcessInstanceModification(processInstanceId)
           .startBeforeActivity("Activity_0qs5wc1") //会签节点的Id,在流程图中看,固定值(一般起一个正规的名字)
           .setVariable("带入子流程的变量key","变量值Object类型")
           .execute();

   System.out.println("增加子流程实例成功");


代码执行完成后,观察数据库表 act_ru_excutionact_ru_taskact_ru_variable 会有数据变化。

其他说明:

1、节点的并行实例,就是为节点设置 Parallel Multi Instance 属性,即节点上的三个竖线的那个状态。
2、为节点设置并行属性,也是实现节点会签的方法。
3、为并行节点设置 Completion Condition 条件为 $nrOfCompletedInstances == 1,是实现或签的方法。
4、为节点设置 Sequential Multi Instance 属性,是实现顺序依次签的方法。
5、参考上述代码,设置变量 .setVariable("assignee","新加签的用户"),可以为并行会签节点进行加签。
6、为并行节点设置 Completion Condition 属性,条件设置为 $nrOfPassInstances / nrOfInstances > 0.5,是实现会签比例大于 50% 自动通过的方法(其中 nrOfPassInstances 不是 camunda 内置变量,是通过 complete 监听器自己维护的一个变量,节点每个实例完成后如果是统一则 nrOfPassInstances 加1)。


(END)

以上是关于Camunda 工作流并行子流程工作流会签或签加签比例签)的主要内容,如果未能解决你的问题,请参考以下文章

Camunda 动态增加会签

Camunda 动态增加会签

[13]深入浅出工作开源框架Camunda:多实例并行用户任务

[13]深入浅出工作开源框架Camunda:多实例并行用户任务

第十四篇Camunda系列-多人会签多实例

第十四篇Camunda系列-多人会签多实例