接下来介绍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个,就是并行网关(汇聚)

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐