首页 > 其他分享 >Activiti7 多实例子流程

Activiti7 多实例子流程

时间:2022-09-21 18:59:43浏览次数:64  
标签:activiti 流程 任务 多实 Activiti7 org import variables

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

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

  • 一个子流程只能有一个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表新增了一条王五的任务

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

 

标签:activiti,流程,任务,多实,Activiti7,org,import,variables
From: https://www.cnblogs.com/cjsblog/p/16716750.html

相关文章

  • 测试:禅道使用流程大纲
    管理员*、添加用户。*、项目集:有预算,有状态(挂起,暂停)、子项目集。*、产品:(关联项目集),指定负责:产品、测试、发布(通常为研发经理)。*、添加需求:(关联产品),维护模块。*、创建产品开......
  • git 公司内部分支流程
    目录git分支定义公司内部流程图git分支定义公司内部流程图黄色是发版点,蓝色是修改代码点,蓝色箭头表示需要代码走查的分支合并。分支定义:dev受保护分支,开发分支,发......
  • dotnet 为大型应用接入 ApplicationStartupManager 启动流程框架
    对于大型的应用软件,特别是客户端应用软件,应用启动过程中,需要执行大量的逻辑,包括各个模块的初始化和注册等等逻辑。大型应用软件的启动过程都是非常复杂的,而客户端应用软件......
  • 【小程序】小程序认证服务接入流程分享
    ​1、 agc网站创建web应用,并启用相关服务:创建web应用    ​启用认证服务​获取应用配置信息 ​    2、认证接口调用通过邮箱/手机号获取验证......
  • dotnet 为大型应用接入 ApplicationStartupManager 启动流程框架
    对于大型的应用软件,特别是客户端应用软件,应用启动过程中,需要执行大量的逻辑,包括各个模块的初始化和注册等等逻辑。大型应用软件的启动过程都是非常复杂的,而客户端应用软件......
  • Python实验报告——第3章 流程控制语句
    实验报告实例01:判断输入的是不是黄蓉所说的数代码如下:运行结果如下:  实例02:验证瑛姑给出的答案是否正确代码如下: 运行结果如下:  实例03:输出......
  • 流程控制语句的练习
    1.判断输入的是不是黄蓉所说的数.  2.验证瑛姑给出的答案是否正确   3.输出玫瑰花语  4.判断是否酒后驾车    5.助力瑛姑:while循环破解法......
  • day01-项目开发流程
    多用户即时通讯系统011.项目开发流程2.需求分析用户登录拉取在线用户列表无异常退出(包括客户端和服务端)私聊群聊发文件服务器推送新闻/广播3.设计阶段3.1界......
  • 测试流程规范
    目录1范围2相关文件3职责3.1测试项目组织结构3.2测试团队3.3职责划分4测试流程及规范4.1测试流程图4.2概念阶段4.3计划阶段4.3.1测试启......
  • 手绘地图深度解析:类型、风格、功能、价值、制作流程、智慧导览
    本文概要:文本尝试系统性、多角度、全方位的介绍一下现在流行的手绘地图系统。作者:轻轻的烟雾(z281099678)一、手绘地图定义什么是手绘地图?或者说,手绘地图到底是什么......