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相关推荐

  1. (连载)Android系统源码分析--Android系统启动流程之Linux内核

    > **这是一个连载的博文系列,我将持续为大家提供尽可能透彻的Android源码分析 [github连载地址](https://github.com/foxleezh/AOSP/issues/3 ...

  2. (连载)Android 8.0 : 系统启动流程之Linux内核

    这是一个连载的博文系列,我将持续为大家提供尽可能透彻的Android源码分析 github连载地址 前言 Android本质上就是一个基于Linux内核的操作系统,与Ubuntu Linux.Fedo ...

  3. activiti自己定义流程之Spring整合activiti-modeler5.16实例(四):部署流程定义

    注:(1)环境搭建:activiti自己定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建         (2)创建流程模型:activiti自己定义流程之Spr ...

  4. activiti自定义流程之Spring整合activiti-modeler5.16实例(四):部署流程定义

    注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建         (2)创建流程模型:activiti自定义流程之Sprin ...

  5. [原创]FOCUS处理系统流程之:流程批量生成(个人专用懒人版)

    根据标准流程生成整个工区流程文件 (1)可按按目录生成 (2)可替换其中的关键字 标准流程准确,则生成的流程将一点到底,所剩的操作变成鼠标的操作,懒之产物. 界面如下:  ☆其它物探处理原创软件相关☆ ...

  6. [原创]FOCUS处理系统流程之:大文本文件极速合并(sps文件合并)

    下载地址:csdn 软件界面1: (功能如题) :    1.普通文本文件的合并                                2.大文件快速合并,空行及重复行删除等功能 3.合并物探 ...

  7. 数字IC后端设计实现流程之initial design

    数字IC后端设计实现流程之initial design 前端提供的文件 门级网表 (Gate Level Netlist) 数字前端工程师或者是 R2N 的同事在 release 东西给后端工程师做 ...

  8. 数字IC后端设计实现流程之floorplan及powerplan规划

    数字IC后端设计实现floorplan及powerplan规划 数字 IC 后端设计实现流程之 initial design 初始化 Initial 模块形状 估算完模块的面积后,block owne ...

  9. LiteOS学习笔记-9LiteOS SDK oc流程之MQTT

    LiteOS学习笔记-9LiteOS SDK oc流程之MQTT MQTT协议 MQTT协议简介 MQTT消息类型 LiteOS中MQTT实现 LiteOS OC MQTT 抽象组件 概述 配置并连接 ...

最新文章

  1. Visual Studio 常见问题及解决方案(持续更新)
  2. SAP CRM和C4C的客户主数据修改历史记录查询
  3. 安装hadoop伪分布式集群心得
  4. HDU 1003 Maxsum
  5. Hotspot虚拟机的对象
  6. 探讨 | SpringBoot + MyBatis 多数据源事物问题
  7. 流媒体地址文件制作方法
  8. Cisco访问控制列表
  9. 使用draw.io更改形状编辑图表的方法
  10. Predator:比微软Kinect更强的视频追踪算法——来自捷克博士论文
  11. shader基础学习摘要(一)
  12. Linux文件其他操作
  13. linux配置ftp错误530,ubuntu16安装配置ftp服务(和530错误解决)
  14. IOS swift开发——获取设备定位信息
  15. jpg图片损坏怎么修复?可以试试这个方法
  16. 方差分析分类及SAS实现代码
  17. Java面向对象设计(面向对象)
  18. Android 8.0+调用相机相册
  19. jasper report分组显示
  20. RFID资产管理解决方案

热门文章

  1. 特技摩托前线android安装_特技摩托前线
  2. 公司年会策划活动PPT模板,精选20套可下载
  3. Frida官方文档-Gadget
  4. eclipse生成uml图的插件Green uml的安装和使用
  5. 754. 平方矩阵 II
  6. PROTEUS电子仿真软件的使用——流水灯
  7. 5道面试逻辑智力测试题内附详细答案
  8. 除自身以外数组的乘积-左右累乘-c++
  9. SAXParserFactory解析XML文件
  10. seata TCC模式