工作流Activiti75、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;
-
-
-
class Demo222ApplicationTests {
-
-
-
private RepositoryService repositoryService;
-
-
private RuntimeService runtimeService;
-
-
private TaskService taskService;
-
-
-
void testDeply() {
-
repositoryService.createDeployment()
-
.addClasspathResource("processes/test.bpmn20.xml")
-
.name("test")
-
.key("test")
-
.deploy();
-
}
-
-
-
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);
-
}
-
-
-
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表新增了一条王五的任务
王五完成任务后,整个流程就结束了
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfkikfa
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13