工作流框架--activiti(四)--排他网关和并行网关
接下来介绍activiti的排他网关和并行网关:排他网关(ExclusiveGateway): 用来在流程中实现决策。当流程执行到排他网关,所有数据就会被执行一遍,满足条件的就会让流程继续运行。需要注意的是:排他网关只会选择一条满足条件的执行。咱们以下面流程为例: 也就是当金额大于1000,就会走总经理流程,当在1000和500之间,就会走部门
接下来介绍activiti的排他网关和并行网关:
排他网关(ExclusiveGateway):
用来在流程中实现决策。当流程执行到排他网关,所有数据就会被执行一遍,满足条件的就会让流程继续运行。
需要注意的是:排他网关只会选择一条满足条件的执行。
咱们以下面流程为例:
也就是当金额大于1000,就会走总经理流程,当在1000和500之间,就会走部门经理流程,其它情况就会走财务进行报销。
其中这些大于1000,或者小于500的条件该怎么添加,才能让工作流识别呢??
如下,选择你需要写条件的连线,然后选择main config中的condition,然后写上条件,图示如下:
连接财务的那一条线(也就是默认走的流程),如下设置
然后就部署流程定义和启动流程实例,唯一不同的是,在完成任务的时候,如下设置,它就会跳到对应的流程下:
比如我输入钱为800,那么排他网关就会判断,排他网关的下一跳是部门经理。
/**完成任务我的之后,(进入到下一个人的工作列表中)*/ @Test public void completeMyPersonalTask(){ //任务id String taskId="2704"; //完成任务的同时,设置流程变量,使用流程变量来指定完成任务之后,下一个连线,对应exclusiveGateWay.bpmn中的${money>1000} java.util.Map<String,Object> variables=new HashMap<String,Object>(); variables.put("money", 800);//申请人申请的钱为800,经判断小于1000,所以它的下一跳为部门经理(500-1000) processEngine.getTaskService()//与正在执行的任务管理相关的Service .complete(taskId,variables); System.out.println("完成任务:任务ID:"+taskId); } |
并行网关(ParallelGateway):
它允许将流程分成多条分支,也可以把多条分支汇聚成一条。
分支:经过并行网关的所有流,都会并行执行
汇聚:等所有流都到达并行网关之后,流程才会通过并行网关。
并行网关,没有条件判断。流程通过网关之后,有几条分支,就会有几个执行对象同时执行。
需要注意的是:并行网关一定是成对出现的,有分支也有汇聚。
实例如下:模拟商家和买家的收付款和收发货流程:
买家付款,商家发货之后买家收货,商家收钱
代码如下:
//流程启动之后,会有3个执行对象:并行网关(分支)、付款,发货。
/**完成任务我的之后,(进入到下一个人的工作列表中)*/ @Test public void completeMyPersonalTask(){ //任务id String taskId="4207";//先付款 processEngine.getTaskService()//与正在执行的任务管理相关的Service .complete(taskId); System.out.println("完成任务:任务ID:"+taskId); }
/**完成任务我的之后,(进入到下一个人的工作列表中)*/ @Test public void completeMyPersonalTask1(){ //任务id String taskId="4210";//再发货 processEngine.getTaskService()//与正在执行的任务管理相关的Service .complete(taskId); System.out.println("完成任务:任务ID:"+taskId); }
/**完成任务我的之后,(进入到下一个人的工作列表中)*/ @Test public void completeMyPersonalTask2(){ //任务id String taskId="4402";//再收货 processEngine.getTaskService()//与正在执行的任务管理相关的Service .complete(taskId); System.out.println("完成任务:任务ID:"+taskId); }
/**完成任务我的之后,(进入到下一个人的工作列表中)*/ @Test public void completeMyPersonalTask3(){ //任务id String taskId="4302";//再收款 processEngine.getTaskService()//与正在执行的任务管理相关的Service .complete(taskId); System.out.println("完成任务:任务ID:"+taskId); }
等这4个任务完成之后,执行对象会变成1个,就是并行网关(汇聚) |
更多推荐
所有评论(0)