• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

工作流Activiti75、Activiti7 多子流程

武飞扬头像
菜鸟是大神
帮助1

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

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

  • 一个子流程只能有一个none类型的启动事件,不允许有其他类型的启动事件。一个子流程必须至少有一个结束事件。(请注意,BPMN 2.0 规范允许在子流程中省略开始和结束事件,但当前的 Activiti 实现不支持这一点。)
  • 顺序流(顺序流是流程的两个元素之间的连接器,说白了就是流程图中的连线)不能跨越子流程边界。

考虑下面这个流程图

学新通

学新通

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

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

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

  1.  
    <dependency>
  2.  
    <groupId>org.activiti</groupId>
  3.  
    <artifactId>activiti-spring-boot-starter</artifactId>
  4.  
    <version>7.1.0.M6</version>
  5.  
    </dependency>

测试代码如下

  1.  
    package com.example.demo222;
  2.  
     
  3.  
    import org.activiti.engine.RepositoryService;
  4.  
    import org.activiti.engine.RuntimeService;
  5.  
    import org.activiti.engine.TaskService;
  6.  
    import org.activiti.engine.runtime.ProcessInstance;
  7.  
    import org.activiti.engine.task.Task;
  8.  
    import org.junit.jupiter.api.Test;
  9.  
    import org.springframework.beans.factory.annotation.Autowired;
  10.  
    import org.springframework.boot.test.context.SpringBootTest;
  11.  
     
  12.  
    import java.util.Arrays;
  13.  
    import java.util.HashMap;
  14.  
    import java.util.Map;
  15.  
     
  16.  
    @SpringBootTest
  17.  
    class Demo222ApplicationTests {
  18.  
     
  19.  
    @Autowired
  20.  
    private RepositoryService repositoryService;
  21.  
    @Autowired
  22.  
    private RuntimeService runtimeService;
  23.  
    @Autowired
  24.  
    private TaskService taskService;
  25.  
     
  26.  
    @Test
  27.  
    void testDeply() {
  28.  
    repositoryService.createDeployment()
  29.  
    .addClasspathResource("processes/test.bpmn20.xml")
  30.  
    .name("test")
  31.  
    .key("test")
  32.  
    .deploy();
  33.  
    }
  34.  
     
  35.  
    @Test
  36.  
    void testStart() {
  37.  
    Map<String, Object> variables = new HashMap<>();
  38.  
    variables.put("assigneeList", Arrays.asList("zhangsanfeng", "lixiaoyao", "zhaolinger"));
  39.  
    ProcessInstance processInstance = runtimeService.startProcessInstanceById("test:8:c76442ee-398a-11ed-b16c-84a9386654d8", variables);
  40.  
     
  41.  
    System.out.println(processInstance);
  42.  
    }
  43.  
     
  44.  
    @Test
  45.  
    void testCompleteTask2() {
  46.  
    Map<String, Object> variables = new HashMap<>();
  47.  
    variables.put("manager", "guanyu");
  48.  
    taskService.complete("da51fa72-22d4-11ed-834c-84a9386654d8", variables);
  49.  
    }
  50.  
     
  51.  
    }

可以看到,流程启动的时候,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表新增了一条王五的任务

学新通

学新通

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

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfkikfa
系列文章
更多 icon
同类精品
更多 icon
继续加载