Activiti学习之根据条件判断流程走向


  在流程设计当中经常会遇到根据条件来判断流程走向的问题,Activiti中也给出了相应的实现方法:网关。

  网关(Gateway)用于控制流程走向(在BPMN2.0规范中称为“执行令牌”)。根据功能不同可以划分为以下四种网关:

  - 排他网关

  - 并行网关

  - 包容网关

  - 事件网关

  其中,排他网关(Exclusive Gateway)用来对流程中的走向进行建模。流程执行到该网关时,Activiti 根据设置的条件进行计算,当条件计算结果为true时,执行当前网关的输出流。

  小提示:如果多个线路计算结果都为true,那么只会执行第一个,如果没有为true的值,会抛出异常。

  排他网关在流程图当中的形象如下图所示:

  下面介绍一下排他网关的使用方法。

  1、绘制流程图

  ExclusiveProcess.bpmn如下所示:

  其中排他网关的三个输出线分别设置Condition值为:

  ${type == 1}

  ${type == 2}

  ${type == 3}123

  当表达式判断结果为true时会执行后面的系统任务。

  三个系统任务分别设置成如图所示:

  三个系统任务的Task type 设为Expression,Expression选项中分别填入

  ${resumeService.showTask1()}

  ${resumeService.showTask2()}

  ${resumeService.showTask3()}123

  流程图的XML代码如下:

  123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

  2、部署流程

  将流程图文件放到项目当中的resources下的processes文件夹,运行程序 。

  3、编写代码

  新建spring boot 项目,在项目中实现一个service,并且在service中实现三个方法,代码如下:

  ResumeService接口

  public interface ResumeService {

  void showTask1();

  void showTask2();

  void showTask3();

  }12345678

  ResumeServiceImpl实现类

  @Service("resumeService")

  public class ResumeServiceImpl implements ResumeService {

  @Override

  public void showTask1() {

  System.out.println("#############################执行任务1");

  }

  @Override

  public void showTask2() {

  System.out.println("#############################执行任务2");

  }

  @Override

  public void showTask3() {

  System.out.println("#############################执行任务3");

  }

  }123456789101112131415161718

  利用spring boot 单元测试来实现流程:

  ExclusiveProcessTest测试类

  @RunWith(SpringJUnit4ClassRunner.class)

  @SpringBootTest(classes = SpringBootActivitiApplication.class)

  public class ExclusiveProcessTest {

  @Autowired

  RuntimeService runtimeService;

  /**

  * 启动流程,并给流程传入参数type,排他网关根据参数type来判断流程走向

  */

  @Test

  public void testStartProcess() {

  Map map = new HashMap<>();

  map.put("type", 3);

  runtimeService.startProcessInstanceByKey("exclusiveProcess", map);

  }

  }





宁波手臂吸脂http://www.iyestar.com/xzss/sbxz/

你可能感兴趣的:(Activiti学习之根据条件判断流程走向)