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

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

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

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

// RuntimeService 为 camunda 内置的对象,可以直接注入使用
@Autowired
private RuntimeService runtimeService;@Test
public void addInstance(){// 整个流程的流程实例IdString 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(){// 整个流程的流程实例IdString 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 工作流并行子流程、工作流会签、或签、加签、比例签、跳转节点相关推荐

  1. activity工作流调用子流程 callActivity

    最近项目中需要用到工作流,其中需要用到工作流中的调用子流程功能,折腾半天完工之后记录一下. 主流程图 子流程图 一个简单的例子说明一下 最关键的是在调用子流程这个模块的properties 中配置要调 ...

  2. 获取第一个子元素_Activiti 开发案例之多实例并行子流程

    概念 Activiti 提供了两种基于子流程的实现: 一种是内嵌子流程:子流程元素<subProcess>内嵌在主流程元素<process>之内,只能在该流程中使用该子流程,外 ...

  3. flowable工作流子流程调用

    flowable工作流子流程介绍 工作流提供了子流程的调用,一种是内部子流程,可以让用户主要看主流程,保持业务清晰,另一种是引用外部子流程(call activity),复用外部流程功能. 工作中有用 ...

  4. 工作流引擎设计之子流程功能实现

    一个成熟的工作流管理系统,其引擎对于子流程功能的支持必然是不可少的,这好比是一门编程语言支持函数那么普遍一样.在当前Workflow, BPM, EAI产品的建模工具中,对于子流程/子过程的应用如家常 ...

  5. 工作流子流程和多实例开发

    在项目中有子流程和多实例的需求,总结如下: 一.子流程 子流程分为两种: CallActivity(调用任务) SubProcess(子流程) 由于调用任务能将子任务分离开来,能够分别显示单独的流程图 ...

  6. Activiti7工作流引擎:进阶篇(七) 调用子流程 CallActivityTask

    知识传送门 >>>>>>>>>>>>>>>>>>> 造句:"朋友" ...

  7. Activiti7工作流引擎:进阶篇(九) 内嵌子流程 SubProcess

    知识传送门 >>>>>>>>>>>>>>>>>>> 为什么普通人要想成佛就得经过九九八 ...

  8. 驰骋工作流引擎的流程属性-节点属性-前台操作

    1:    工作流引擎功能-流程属性 •    支持客户参与流程:比如在一个erp系统里供应商相对企业来说是外部用户,在一个学校系统里,教师是内部用户,学生是外部用户.ccflow支持外部用户登录参与 ...

  9. oa处理会签流程图_简易OA漫谈之工作流设计(四,怎么支持会签)

    会签:就是一个步骤要所有人都审批完成才能完成. 上一步提交到会签步骤时,该步骤的每个人都能收到一条待办任务, 会签审批人每次提交时都检查该步骤所有会签人是否已经审批,如果全部审批就产生下一手任务. 1 ...

最新文章

  1. servlet中的几个路径有关的方法
  2. 从零开始搭建系统1.1——CentOs安装
  3. robotframework 配置过程中遇到的问题
  4. 搞清这些陷阱,NULL和三值逻辑再也不会作妖
  5. Kubernetes初步学习
  6. 如何将多个PDF合成为一个PDF,并且大小统一?
  7. 互联网晚报 | 3月13日 星期日 |​ ​​上海加强疫情防控:非必要不离沪;MasterGo宣布上线Figma文件导入功能...
  8. 十二届蓝桥杯C++ 1月 中 高级组试题 第三题 换算
  9. windows 服务实现定时任务调度(Quartz.Net)
  10. Farthest sampling on 3d mesh with mesh kept
  11. 【渝粤教育】21秋期末考试管理学原理★10013k1
  12. 取石子游戏,威佐夫博弈的推理
  13. 用2008系统安装k3服务器,金蝶K3SQL-Server-2008-R2安装方法介绍
  14. VBV大小-H.264
  15. 关于过去分词做形容词、any后接单复数、带疑问词的不定式作后置定语
  16. 【AE】2 ICommand和ITool
  17. JavaScript - 正则(RegExp)判断文本框中是否包含特殊符号
  18. 从不重视体检的我拿到了体检报告,我慌了…
  19. 微信小程序 控制台报错net::ERR_UNSAFE_PORT
  20. latex 分布符号_LaTeX最全的数学符号大全(更新中…… )

热门文章

  1. 秦始皇修路(最小生成树+LCA)
  2. 普利姆算法解决最短修路问题
  3. HTML5支持服务器发送事件
  4. 如何求一个关系模式的候选码
  5. 最近把beecloud,芝麻信用,智能门锁接入了系统。闲下来把遇到的一些坑排下,也能给后人一些指导
  6. SpringBoot + Vue 实现基于 WebSocket 的聊天室(单聊)
  7. LaTeX—如何把论文模板的关键词从Index Terms 改为Keywords
  8. 你不可不知的《哈利波特》秘密(四)
  9. python中算法定义_Python入门进阶笔记--04Python中表示“组”的概念与定义
  10. 【北亚数据恢复】误操作分区损坏导致SqlServer数据库数据丢失的数据恢复案例