一、绘制流程图
包容网关可以看作是排他网关和并行网关的结合体。和排他网关一样,可以在外出顺序流上定义条件,包容网关会解析它们。但是主要的区别是包容网关可以选择多余一条顺序流,这和并行网关一样。包容网关的功能是基于进入和外出顺序流的:
- 分支:所有外出顺序流的条件都会被解析,结果为true的顺序流会以并行方式继续执行,会为每个顺序流创建一个分支。
- 汇聚:所有并行分支到达包容网关,会进入等待状态,直到每个包含流程token进入顺序流的分支都到达。这是与并行网关的最大不同。
创建流程模型:
绘制如下流程:
保存并导出流程模型。
二、部署
@Test
void contextLoads() {
DeploymentBuilder deployment = repositoryService.createDeployment();
deployment.addClasspathResource("process01/HolidayDemo5.bpmn20.xml");
deployment.name("包容网关案例");
Deployment deploy = deployment.deploy();
System.out.println("deploy.getId() = " + deploy.getId());
}
三、启动
/**
* 发起流程
*/
@Test
public void startProcess() {
String id = "HolidayDemo5:1:5dab514f-2bb8-11ef-baee-644ed7087863";
// 根据流程定义ID启动流程
ProcessInstance processInstance = runtimeService.startProcessInstanceById(id);
}
首先进入用户申请。
设置num值,向下审批。
@Test
public void completeTask() {
String taskId = "59029f05-2bba-11ef-bd5e-644ed7087863";
// 指定分支条件的值
Map<String, Object> variables = new HashMap<>();
variables.put("num", 7);
taskService.complete(taskId, variables);
}
因为值设置为7,所以只有审批3符合条件。
然后总经理审批流程结束。