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 多实例子流程的更多相关文章
- activiti并发多实例子流程任务处理
一直在搞工作流(activiti),总结一下关于工作流(activiti)中同时并发处理多个子流程的操作方法. 先说下我要实现的业务: 1.办公室发通知(在系统申报页面上,勾选科室,被选中的科室执行第 ...
- TCC细读 - 1 例子流程
http://www.iocoder.cn/categories/TCC-Transaction/ https://github.com/changmingxie/tcc-transaction 细读 ...
- PHP OOP面向对象部分方法归总(代码实例子)
<?php//对象名存在栈内存中,数据存在堆内存中class leyangjun{ var $name; //定义变量 var $age; var $sex; ...
- FIS3使用官方例子流程
fis3 的常用例子:https://github.com/fex-team/fis3-demo git链接可在页面中获取替换下面的git链接: 例子准备: git clone https://git ...
- Win7,win10(部分机型) 安装appscan9.0.3.10(可升级)实操流程
Win10部分机型不能很好的兼容appscan,建议使用者用win7系统安装appscan 写于:2018.12.2 IBM Security AppScan Standard 可通过自动执行应用安全 ...
- cloudflare 加https、加SSL(加CF处理)实操流程
建站过程中,少不了SSL证书等cf添加操作,cf,即cloudflare的简写 首先,点击如图“Add site”,弹出输入框后,填写已在如阿里云.goDaddy.freedom等域名平台购买的域名: ...
- Jquery ajax 完整实例子1
$ajax请求--------------------------------- var $personWifePs=$("#wife-money tbody tr"); var ...
- Activiti 多个并发子流程的应用
多个部门发起资金计划,最后统一到财务部审批,每个部门发起资金计划是一个子流程,财务部审批是多个部门的计划同时审批,审批完成后,再提交上级领导审批. 流程如下: 要解决以上问题,需要实现多个子流程并行处 ...
- jbpmAPI-6
第六章流程. 6.1. What is BPMN 2.0 业务流程模型和符号(BPMN)2.0规范是OMG规范,不仅定义了一个标准的业务流程的图形化表述(如BPMN 1. x),但现在还包括执行语义定 ...
- 最近学习工作流 推荐一个activiti 的教程文档
全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...
随机推荐
- 【ThreadX-FileX】Azure RTOS FileX概述
Azure RTOS FileX嵌入式文件系统是Azure RTOS的高级工业级解决方案,适用于Microsoft FAT文件格式,专门针对深度嵌入式,实时和IoT应用程序而设计.Azure RTOS ...
- 【canvas】 绘制七巧板
效果图: 代码 : <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- python环境 anaconda安装
官网: https://www.anaconda.com/distribution/#macos 国内镜像: https://mirrors.tuna.tsinghua.edu.cn/anaconda ...
- [转帖]日常Bug排查-读从库没有原子性?
https://zhuanlan.zhihu.com/p/658508920 3 人赞同了该文章 日常Bug排查系列都是一些简单Bug排查.问题虽小,但经常遇到,了解这些问题,会让我们少走点弯路,提升 ...
- [转帖]linux磁盘IO读写性能优化
在LINUX系统中,如果有大量读请求,默认的请求队列或许应付不过来,我们可以 动态调整请求队列数来提高效率,默认的请求队列数存放在/sys/block/xvda/queue/nr_requests 文 ...
- 【转帖】Linux性能优化(十四)——CPU Cache
一.CPU Cache 1.CPU Cache简介 CPU Cache是位于CPU与内存之间的临时存储器,容量比内存小但交换速度却比内存要快得多.Cache的出现主要是为了解决CPU运算速度与内存读写 ...
- ILRuntime性能测试
我们公司有一个Unity原生开发语言C#写的项目,目前已经在安卓测试过多次,上架IOS在考虑热更,所以对ILRuntim进行性能测试,在测试过程中已经按照官方文档进行了CLR绑定和生成Release的 ...
- 常见的for循环优化方式
?> 前言 经常使用一些循环,进行耗时计算的操作,特别是 for 循环,它是一种重复计算的操作,如果处理不好,耗时就比较大,如果处理书写得当,将大大提高效率,下面总结几条 for 循环的常见优化 ...
- 小白学k8s(10)-k8s中ConfigMap理解
理解ConfigMap 什么是ConfigMap ConfigMap的创建 使用key-value 字符串创建 从env文件创建 从目录创建 通过Yaml/Json创建 ConfigMap使用 用作环 ...
- 深度学习应用篇-计算机视觉-OCR光学字符识别[7]:OCR综述、常用CRNN识别方法、DBNet、CTPN检测方法等、评估指标、应用场景
深度学习应用篇-计算机视觉-OCR光学字符识别[7]:OCR综述.常用CRNN识别方法.DBNet.CTPN检测方法等.评估指标.应用场景 1.OCR综述 OCR(Optical Character ...