✔️本专栏将从Camunda(卡蒙达) 7中的关键概念到实现中国式工作流相关功能。
✔️文章中只包含演示核心代码及测试数据,完整代码可查看作者的开源项目snail-camunda
✔️请给snail-camunda 点颗星吧
流程定义中需要用到排他网关时需要注意两点:
1是必须要有一条默认路线,当其他条件均不满足时走该路线。
2是条件表达式要设置正确
表单定义如下
Flow_0a6p958
Flow_0a6p958
Flow_0i294hl
Flow_0i294hl
Flow_07vd7cq
Flow_19gtn2c
${day > 3}
Flow_1cxwd4c
Flow_0gnj3ll
Flow_07vd7cq
Flow_1cxwd4c
Flow_19gtn2c
Flow_0gnj3ll
发起实例的接口,参数类和之前文章中提到的都一样,不重复贴了
/**
* 根据流程定义key发起流程实例
*
* @param requestParam 请求参数
* @return 流程实例id
*/
@PostMapping("/startProcessInstanceByKey")
public String startProcessInstanceByKey(@RequestBody StartProcessRequest requestParam) {
Map paramMap = new HashMap<>(8);
paramMap.put("initiator", requestParam.getInitiator());
paramMap.put("day", 4);
paramMap.put("manager","10087");
paramMap.put("head", "10088");
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(requestParam.getProcessDefinitionKey(), requestParam.getBusinessKey(), paramMap);
return processInstance.getProcessInstanceId();
}
发起后,满足预期来到【部长】节点
Camunda支持统一表达式语言,使用开源的JUEL来实现的。需要掌握更多可访问如下链接
Unified Expression Language
在之前的《认识BPMN2.0》中我们知道并行网关的功能是基于传入和传出序列流:
流程定义设计如下:
Flow_0woj0jt
Flow_0woj0jt
Flow_0istezk
Flow_0istezk
Flow_1ucnqdb
Flow_0nvwxww
Flow_06j90pb
Flow_1ucnqdb
Flow_11upvwe
Flow_0nvwxww
Flow_1qfv4jz
Flow_0rzniwk
Flow_06j90pb
Flow_1mymqa7
Flow_1mymqa7
Flow_11upvwe
Flow_0luwvad
Flow_0luwvad
Flow_05npw3q
Flow_05npw3q
Flow_1qfv4jz
Flow_0rzniwk
发起实例接口:
/**
* 根据流程定义key发起流程实例
*
* @param requestParam 请求参数
* @return 流程实例id
*/
@PostMapping("/startProcessInstanceByKey")
public String startProcessInstanceByKey(@RequestBody StartProcessRequest requestParam) {
Map paramMap = new HashMap<>(8);
paramMap.put("initiator", requestParam.getInitiator());
paramMap.put("userOne","10087");
paramMap.put("userTwo","10088");
paramMap.put("userThree","10089");
paramMap.put("userFour","10090");
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(requestParam.getProcessDefinitionKey(), requestParam.getBusinessKey(), paramMap);
return processInstance.getProcessInstanceId();
}
从下图可见,经过第一个并行网关后三个节点的审批人会同时收到待办任务。
所以3号完成后执行会在最后的并行网关等待