Activiti子流程学习
Activiti提供两种子流程实现:
二、调用子流程
1、流程图
主流程:callProcess
主流程xml表示:
子流程:callledProcess
子流程xml表示,可以看到子流程就是一个正常的独立流程,流程id为calledProcess:
/***
*启动流程并记录日志
*@param businessKey 流程唯一标识
*@param businessType 业务类型
*@param businessId 业务id
* */
public void start(Long businessKey, Integer businessType, Long businessId, Operator operator) {
//主流程变量
MapapproveParam = new HashMap<>();
approveParam.put("businessKey", businessKey);
approveParam.put("businessType", businessType);
approveParam.put("businessId", businessId);
// 启动流程
runtimeService.startProcessInstanceByKey("callProcess", businessKey.toString(),
approveParam);
// 记录日志
approveRecordService.saveApproveRecord(businessKey, businessType, businessId, "-1",
FlowNode.Startevent.getCode(), operator.getOperatorId(), ApproveOperation.START.getCode(), "启动流程");
}
/**
* 审核
* @param businessKey 流程唯一标识
* */
public void approve(Long businessKey){
//审核变量
MapapproveParam = new HashMap<>();
approveParam.put("approve", "pass");
//获取当前任务
Task currentTask = taskService.createTaskQuery().processInstanceBusinessKey(businessKey.toString()).singleResult();
Mapvariables = currentTask.getProcessVariables();
// 级联结束本节点发起的会签任务
String parentTaskId = currentTask.getParentTaskId();
if (parentTaskId != null) {
Listtasks = taskService.createTaskQuery().taskId(parentTaskId).taskDescription("JOINT_PROCESS").list();
for (Task task : tasks) {
taskService.setVariablesLocal(task.getId(), null);
taskService.complete(task.getId(), null);
}
}
//完成当前任务
taskService.setVariablesLocal(currentTask.getId(), approveParam);
taskService.complete(currentTask.getId(), approveParam);
// 记录日志
approveRecordService.saveApproveRecord(businessKey, (Integer)variables.get("businessType"),
(Long)variables.get("businessId"), "-1",
FlowNode.Startevent.getCode(), 888L,
ApproveOperation.START.getCode(), "启动流程");
}
@Service
public class SubProcessTestListener implements TaskListener {
private static final long serialVersionUID = 1L;
@Autowired
private RuntimeService runtimeService;
@Transactional
public void notify(DelegateTask delegateTask){
System.err.println("1.子流程任务创建======delegateTask{}:" + delegateTask.getId());
//获取子流程变量
DelegateExecution execution = delegateTask.getExecution();
Long businessId = (Long)execution.getVariable("businessId");
Integer businessType = (Integer)execution.getVariable("businessType");
Long businessKey = (Long)execution.getVariable("businessKey");
System.err.println(
"2.获取子流程参数======businessId:" + businessId + ";businessType:" + businessType
+ ";businessKey:" + businessKey);
//子流程实例set业务单号和主流程保持一致
runtimeService.updateBusinessKey(delegateTask.getProcessInstanceId(), businessKey.toString());
}
}
<extensionElements>
<activiti:in source="businessId" target="businessId"></activiti:in>
<activiti:in source="businessType" target="businessType"></activiti:in>
<activiti:in source="businessKey" target="businessKey"></activiti:in>
</extensionElements>
</callActivity>
Activiti子流程学习相关推荐
- activiti 子流程
https://blog.csdn.net/lazy_cpp/article/details/77979634 https://blog.csdn.net/shirdrn/article/detail ...
- Activiti中的关于子流程中的并发节点标记处理
最近在研究一个轻量级的工作流引擎Activiti,就遇到了子流程中无法标记其并发节点的问题,经过几天的研究,想到了一个简单易懂的方法,总结如下,希望对你们能有所帮助,有写的不对的地方,还希望大家多提宝 ...
- java中bpmn流程图_Java学习之BPMN知识以及Activiti的流程部署
BPMN的介绍 Activiti项目是一项新的基于Apache许可的开源BPM平台,从基础开始构建,旨在提供支持新的BPMN 2.0标准,包括支持对象管理组(OMG),面对新技术的机遇,诸如互操作性和 ...
- Activiti 多个并发子流程的应用
应用场景: 多个部门发起资金计划,最后统一到财务部审批,每个部门发起资金计划是一个子流程,财务部审批是多个部门的计划同时审批,审批完成后,再提交上级领导审批. 流程如下: 要解决以上问题,需要实现多个 ...
- Activiti 5.3:子流程(subProcess)
Activiti 5.3提供了子流程的实现,包括两种基于子流程的实现: 一种是内嵌子流程:子流程元素<subProcess>内嵌在主流程元素<process>之内,只能在该流程 ...
- Activiti的BPMN2.0中的子流程
Activiti的BPMN2.0中的子流程分为两种类型: 第一种:Sub-Process 第二种:Call Activities
- 基于Activiti的流程应用开发平台JSAAS-WF V5.3
第1章 产品概述及体系架构 1.1.概述 红迅JSAAS-WF工作流平台V5是广州红迅软件有限公司面向合作伙伴以及有IT运维团队中大型企业提供新一代的流程管理产品,它基于流行的JAVA开源技术上构建, ...
- node.js的开发流程_Node.js子流程:您需要了解的一切
node.js的开发流程 by Samer Buna 通过Samer Buna Node.js子流程:您需要了解的一切 (Node.js Child Processes: Everything you ...
- agilebpm脑图_干货基于SpringBoot2开发的Activiti引擎流程管理项目脚手架
干货基于SpringBoot2开发的Activiti引擎流程管理项目脚手架 [干货]基于SpringBoot2开发的Activiti引擎流程管理项目脚手架 前言 在工作中,难免会遇到需要开发基于流程管 ...
最新文章
- SQL Server 2005 命令行实用工具
- Python Flask-表单提交方式
- 90-40-009-源码-CUBE-引擎为Spark写入Hbase本
- 《Splunk智能运维实战》——第1章 游戏时间——导入数据 1.1 简介
- Python中ASCII码的数字和字符的转换
- SpringMVC学习笔记(1)-SpringMVC介绍
- paip.论大数据的方法,技术erlang,haddop.attilax总结.
- ubuntu开机启动+图标配置
- Linux Command ss
- Windows使用批处理文件更改指定目录下的文件名(含序号)
- Cluster04 - Ceph概述 部署Ceph集群 Ceph块存储
- FPGA秋招面试手撕代码20+
- AW9523B IIC驱动
- 查看电脑自带的Office版本信息重新安装Office
- 北风:利用微信红包封面怎么引流和变现(案例)
- 局域网联机_【进击的巨人21】【全DLCs整合】【局域网联机】【免安装解压即玩】 免费分享...
- 0-1000Hz频率转4-20mA隔离变送器贝福IBF
- 解决VMware 16在Win7虚拟机安装VMware Tools时报 “Windows 无法验证此驱动程序软件的发布者”问题
- 通用查询实现方案(可用于DDD)[附源码] -- 简介
- 算法-动态规划-股票交易