Activiti7 多实例子流程()

  本篇文章为你整理了Activiti7 多实例子流程()的详细内容,包含有 Activiti7 多实例子流程,希望能帮助你了解 Activiti7 多实例子流程。

  顾名思义,子流程是一个包含其他活动、网关、事件等的活动,这些活动本身形成了一个流程,该流程是更大流程的一部分。

  使用子流程确实有一些限制:

  一个子流程只能有一个none类型的启动事件,不允许有其他类型的启动事件。一个子流程必须至少有一个结束事件。(请注意,BPMN 2.0 规范允许在子流程中省略开始和结束事件,但当前的 Activiti 实现不支持这一点。)

  顺序流(顺序流是流程的两个元素之间的连接器,说白了就是流程图中的连线)不能跨越子流程边界。

  考虑下面这个流程图

  用多实例子流程实现了类似会签的功能。(当然了,不用子流程,用多实例任务也能实现会签功能。)

  上面这个流程会根据传入的人数来决定开启几个子流程,在每个子流程中第一个任务审批时指定下一个审批人(PS:流程变量)

  代码使用的是7.1.0.M6这个版本

  

  

 dependency 

 

   groupId org.activiti /groupId

   artifactId activiti-spring-boot-starter /artifactId

   version 7.1.0.M6 /version

   /dependency

 

  测试代码如下

  

package com.example.demo222;

 

  import org.activiti.engine.RepositoryService;

  import org.activiti.engine.RuntimeService;

  import org.activiti.engine.TaskService;

  import org.activiti.engine.runtime.ProcessInstance;

  import org.activiti.engine.task.Task;

  import org.junit.jupiter.api.Test;

  import org.springframework.beans.factory.annotation.Autowired;

  import org.springframework.boot.test.context.SpringBootTest;

  import java.util.Arrays;

  import java.util.HashMap;

  import java.util.Map;

  @SpringBootTest

  class Demo222ApplicationTests {

   @Autowired

   private RepositoryService repositoryService;

   @Autowired

   private RuntimeService runtimeService;

   @Autowired

   private TaskService taskService;

   @Test

   void testDeply() {

   repositoryService.createDeployment()

   .addClasspathResource("processes/test.bpmn20.xml")

   .name("test")

   .key("test")

   .deploy();

   @Test

   void testStart() {

   Map String, Object variables = new HashMap ();

   variables.put("assigneeList", Arrays.asList("zhangsanfeng", "lixiaoyao", "zhaolinger"));

   ProcessInstance processInstance = runtimeService.startProcessInstanceById("test:8:c76442ee-398a-11ed-b16c-84a9386654d8", variables);

   System.out.println(processInstance);

   @Test

   void testCompleteTask2() {

   Map String, Object variables = new HashMap ();

   variables.put("manager", "guanyu");

   taskService.complete("da51fa72-22d4-11ed-834c-84a9386654d8", variables);

  }

 

  可以看到,流程启动的时候,act_ru_execution表中插入了8条记录,因为有1个主流程,3个子流程,所以 (3+1)×2=8

  每个子流程当前一个任务,总共3个激活的任务

  每个流程有6个变量,3×6=18

  当至少有2个子流程结束后,才会回到主流程节点

  

  下面再看另一个流程

  这个流程跟前面一个实现的功能有一点点类似,只有一个子流程,子流程中有两个并行的任务,当这两个任务都完成后子流程就结束了

  启动流程以后,act_ru_execution表中应该新增4条记录,因为有主子2个流程

  2个并行的任务

  当张三完成任务以后,这个流程实例当前只剩下一个激活的任务

  当李四也完成任务后,子流程结束,回归主流程。于是act_ru_execution表应该只剩2条记录,act_ru_task表新增了一条王五的任务

  王五完成任务后,整个流程就结束了

  

  以上就是Activiti7 多实例子流程()的详细内容,想要了解更多 Activiti7 多实例子流程的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: