Activiti7子流程之Call activity
Call activity (子流程)
BPMN2.0有了常规子流程(Sub-Process)和调用子流程(call activity)。两者都是调用子流程。不用于Sub-process,call activity调用的子流程无需嵌套在原始流程中。
当流程执行到Call Activity调用活动时,将创建一个新流程实例,当子流程执行完成后将继续执行原始流程。
流程流程图示意
主流程定义
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef"><process id="process_call_activiti" name="callActiviti" isExecutable="true"><startEvent id="sid-16DBFA1E-35E2-47E3-AFAF-474794A484EF"></startEvent><callActivity id="sid-A18F2859-7517-4FE3-9492-E1D554D67E08" name="子流程" calledElement="process_demo" activiti:inheritVariables="false"></callActivity><userTask id="sid-36AE98BA-7D81-4CCD-9361-46A4C651A227" name="主任务"></userTask><sequenceFlow id="sid-6DD89223-E3B4-49DF-BAD1-3BD5C635BCEA" sourceRef="sid-A18F2859-7517-4FE3-9492-E1D554D67E08" targetRef="sid-36AE98BA-7D81-4CCD-9361-46A4C651A227"></sequenceFlow><endEvent id="sid-7B73BC3A-08CA-47F8-B054-13B71285FEFE"></endEvent><sequenceFlow id="sid-BBB8A48C-463D-4D32-BA11-225756DAB95B" sourceRef="sid-36AE98BA-7D81-4CCD-9361-46A4C651A227" targetRef="sid-7B73BC3A-08CA-47F8-B054-13B71285FEFE"></sequenceFlow><userTask id="sid-D94522CB-6251-4DC6-877C-6B113FE73E93" name="主任务开始"></userTask><sequenceFlow id="sid-8FE8E385-8901-42EE-B216-13A9AA7E9EFB" sourceRef="sid-16DBFA1E-35E2-47E3-AFAF-474794A484EF" targetRef="sid-D94522CB-6251-4DC6-877C-6B113FE73E93"></sequenceFlow><sequenceFlow id="sid-92753CF7-25F9-4FD3-83DD-A905EDA6CFF0" sourceRef="sid-D94522CB-6251-4DC6-877C-6B113FE73E93" targetRef="sid-A18F2859-7517-4FE3-9492-E1D554D67E08"></sequenceFlow></process>
</definitions>
其中 子流程定义如下 :
<callActivity id="sid-A18F2859-7517-4FE3-9492-E1D554D67E08" name="子流程" calledElement="process_demo" activiti:inheritVariables="false"></callActivity>
属性 | 简介 |
---|---|
id | 子流程定义ID |
name | 子流程名称 |
calledElement | 被调用的子流程的流程定义Key |
子流程定义
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef"><process id="process_demo" name="简单单线流程" isExecutable="true"><startEvent id="sid-49B8F59F-916D-4470-B47D-E102F46402B3"></startEvent><userTask id="sid-3D5E6338-B2EF-4235-AC08-63E311EEF45E" name="任务1"></userTask><sequenceFlow id="sid-28BF011E-A3F1-48EC-91C3-F187D84FCC67" sourceRef="sid-49B8F59F-916D-4470-B47D-E102F46402B3" targetRef="sid-3D5E6338-B2EF-4235-AC08-63E311EEF45E"></sequenceFlow><userTask id="sid-C8ED4D8D-8C94-4BA2-BFE7-6B315DC03518" name="任务2"></userTask><sequenceFlow id="sid-D1065EBF-AA27-4C1D-BE35-064EBFD839C1" sourceRef="sid-3D5E6338-B2EF-4235-AC08-63E311EEF45E" targetRef="sid-C8ED4D8D-8C94-4BA2-BFE7-6B315DC03518"></sequenceFlow><endEvent id="sid-AAD9DA48-D9DC-4CC2-8F77-D602D787D894" name="结束"></endEvent><sequenceFlow id="sid-538E7A61-32DB-48C6-8A67-599F7E97562D" sourceRef="sid-C8ED4D8D-8C94-4BA2-BFE7-6B315DC03518" targetRef="sid-AAD9DA48-D9DC-4CC2-8F77-D602D787D894"></sequenceFlow></process>
</definitions>
查询Call Activity
由于CallActivity并未继承Task
类,所以使用 historyService.createHistoricTaskInstanceQuery()
无法查询到CallActivity。
CallActivity继承关系如下 :
根据继承关系可以看出CallActivity继承了Activity对象,因此可以使用
historyService.createHistoricActivityInstanceQuery()
进行查询。
查询实例如下 :
List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId).list();for (HistoricActivityInstance activityInstance : list) {log.info("【流程实例】 实例名称 :[ {} ] 实例类型[ {} ] ID[ {} ] callInstanceId[ {} ]",activityInstance.getActivityName(),activityInstance.getActivityType(),activityInstance.getId(),activityInstance.getCalledProcessInstanceId());}
查询结果如下 :
[ 21:32:39.976 ] INFO | ActivitiTestController :: allTask | - 【流程实例】 实例名称 :[ null ] 实例类型[ startEvent ] ID[ 62f1ddd2e073d82423e53d98 ] callInstanceId[ null ]
[ 21:32:39.976 ] INFO | ActivitiTestController :: allTask | - 【流程实例】 实例名称 :[ 主任务开始 ] 实例类型[ userTask ] ID[ 62f1ddd2e073d82423e53d99 ] callInstanceId[ null ]
[ 21:32:39.976 ] INFO | ActivitiTestController :: allTask | - 【流程实例】 实例名称 :[ 子流程 ] 实例类型[ callActivity ] ID[ 62f1de08e073d82423e53d9b ] callInstanceId[ 62f1de08e073d82423e53d9c ]
[ 21:32:39.977 ] INFO | ActivitiTestController :: allTask | - 【流程实例】 实例名称 :[ 主任务 ] 实例类型[ userTask ] ID[ 62f1e09ce073d82423e53da4 ] callInstanceId[ null ]
传递变量
activiti 支持在调用子流程时将变量传递给子流程,同时也支持当子流程结束时将变量传递给主流程。
<callActivity id="callSubProcess" calledElement="checkCreditProcess" ><extensionElements><activiti:in source="someVariableInMainProcess" target="nameOfVariableInSubProcess" /><activiti:out source="someVariableInSubProcess" target="nameOfVariableInMainProcess" /></extensionElements>
</callActivity>
属性 | 简介 |
---|---|
source | 主流程变量名 |
target | 子流程变量名 |
除变量传递之外,activiti还支持公式。
<callActivity id="callSubProcess" calledElement="checkCreditProcess" ><extensionElements><activiti:in sourceExpression="${x+5}" target="y" /><activiti:out source="${y+5}" target="z" /></extensionElements>
</callActivity>
z = y+5 = x+5+5
Activiti7子流程之Call activity相关推荐
- (连载)Android系统源码分析--Android系统启动流程之Linux内核
> **这是一个连载的博文系列,我将持续为大家提供尽可能透彻的Android源码分析 [github连载地址](https://github.com/foxleezh/AOSP/issues/3 ...
- (连载)Android 8.0 : 系统启动流程之Linux内核
这是一个连载的博文系列,我将持续为大家提供尽可能透彻的Android源码分析 github连载地址 前言 Android本质上就是一个基于Linux内核的操作系统,与Ubuntu Linux.Fedo ...
- activiti自己定义流程之Spring整合activiti-modeler5.16实例(四):部署流程定义
注:(1)环境搭建:activiti自己定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建 (2)创建流程模型:activiti自己定义流程之Spr ...
- activiti自定义流程之Spring整合activiti-modeler5.16实例(四):部署流程定义
注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建 (2)创建流程模型:activiti自定义流程之Sprin ...
- [原创]FOCUS处理系统流程之:流程批量生成(个人专用懒人版)
根据标准流程生成整个工区流程文件 (1)可按按目录生成 (2)可替换其中的关键字 标准流程准确,则生成的流程将一点到底,所剩的操作变成鼠标的操作,懒之产物. 界面如下: ☆其它物探处理原创软件相关☆ ...
- [原创]FOCUS处理系统流程之:大文本文件极速合并(sps文件合并)
下载地址:csdn 软件界面1: (功能如题) : 1.普通文本文件的合并 2.大文件快速合并,空行及重复行删除等功能 3.合并物探 ...
- 数字IC后端设计实现流程之initial design
数字IC后端设计实现流程之initial design 前端提供的文件 门级网表 (Gate Level Netlist) 数字前端工程师或者是 R2N 的同事在 release 东西给后端工程师做 ...
- 数字IC后端设计实现流程之floorplan及powerplan规划
数字IC后端设计实现floorplan及powerplan规划 数字 IC 后端设计实现流程之 initial design 初始化 Initial 模块形状 估算完模块的面积后,block owne ...
- LiteOS学习笔记-9LiteOS SDK oc流程之MQTT
LiteOS学习笔记-9LiteOS SDK oc流程之MQTT MQTT协议 MQTT协议简介 MQTT消息类型 LiteOS中MQTT实现 LiteOS OC MQTT 抽象组件 概述 配置并连接 ...
最新文章
- Visual Studio 常见问题及解决方案(持续更新)
- SAP CRM和C4C的客户主数据修改历史记录查询
- 安装hadoop伪分布式集群心得
- HDU 1003 Maxsum
- Hotspot虚拟机的对象
- 探讨 | SpringBoot + MyBatis 多数据源事物问题
- 流媒体地址文件制作方法
- Cisco访问控制列表
- 使用draw.io更改形状编辑图表的方法
- Predator:比微软Kinect更强的视频追踪算法——来自捷克博士论文
- shader基础学习摘要(一)
- Linux文件其他操作
- linux配置ftp错误530,ubuntu16安装配置ftp服务(和530错误解决)
- IOS swift开发——获取设备定位信息
- jpg图片损坏怎么修复?可以试试这个方法
- 方差分析分类及SAS实现代码
- Java面向对象设计(面向对象)
- Android 8.0+调用相机相册
- jasper report分组显示
- RFID资产管理解决方案