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