我是靠谱客的博主 清爽小松鼠,最近开发中收集的这篇文章主要介绍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、为节点设置Parallel Multi Instance 并行属性,是实现节点会签的方法。
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)。

下面是跳转节点的实现代码:
在一些业务场景中,允许管理员或某个角色对运行中的流程进行节点跳转(或成为调度)操作,也就是可以将流程的任意一个节点设置为一个活动节点(为了保证流程允许的完整性同时会取消当前所有的活动节点)。

可以代码如下:

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

@Test
public void jumpNode(){
   // 整个流程的流程实例Id
   String processInstanceId = "d0a284f3-af8e-11ea-88c4-000ec6dd34b8";
   // 需要跳转到的节点Id(可以是任意节点)
   String targetActivityId = "Activity_0qs5wc1";
   
   ProcessInstanceModificationBuilder processInstanceModificationBuilder = runtimeService.createProcessInstanceModification(processInstanceId);   
   Set<String> activityIdSet = new HashSet<>();
   taskService.createTaskQuery().processInstanceId(processInstanceId).active().list().forEach(taskQuery -> {
      String activityId = taskQuery.getTaskDefinitionKey();
      if(activityIdSet.add(activityId)){
         processInstanceModificationBuilder.cancelAllForActivity(activityId);
      }
   });
   processInstanceModificationBuilder.startBeforeActivity(targetActivityId)
           .setVariable("带入目标节点的变量key","变量值Object类型")
           .execute();

   System.out.println("流程处理成功");
}


(END)

最后

以上就是清爽小松鼠为你收集整理的Camunda 工作流并行子流程、工作流会签、或签、加签、比例签、跳转节点的全部内容,希望文章能够帮你解决Camunda 工作流并行子流程、工作流会签、或签、加签、比例签、跳转节点所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部