• Activiti7子流程之Call activity


    Call activity (子流程)

    BPMN2.0有了常规子流程(Sub-Process)和调用子流程(call activity)。两者都是调用子流程。不用于Sub-process,call activity调用的子流程无需嵌套在原始流程中。
    当流程执行到Call Activity调用活动时,将创建一个新流程实例,当子流程执行完成后将继续执行原始流程。

    流程流程图示意

    子流程

    主流程定义

    
    <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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    其中 子流程定义如下 :

      <callActivity id="sid-A18F2859-7517-4FE3-9492-E1D554D67E08" name="子流程" calledElement="process_demo" activiti:inheritVariables="false">callActivity>
    
    • 1
    属性简介
    id子流程定义ID
    name子流程名称
    calledElement被调用的子流程的流程定义Key

    子流程定义

    
    <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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    查询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());
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    查询结果如下 :

    [ 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 ] 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    传递变量

    activiti 支持在调用子流程时将变量传递给子流程,同时也支持当子流程结束时将变量传递给主流程。

    <callActivity id="callSubProcess" calledElement="checkCreditProcess" >
      <extensionElements>
    	  <activiti:in source="someVariableInMainProcess" target="nameOfVariableInSubProcess" />
    	  <activiti:out source="someVariableInSubProcess" target="nameOfVariableInMainProcess" />
      extensionElements>
    callActivity>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    属性简介
    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    z = y+5 = x+5+5

  • 相关阅读:
    CA与区块链之数字签名详解
    安装windows linux 双系统
    基础课5——垂直领域对话系统架构
    I/O处理器与DMA控制器与I/O通道
    webpack(一)模块化
    java分布式的ACP是什么
    我开发了《联机桌游合集: UNO+斗地主+五子棋》,让你享受纯粹的游戏
    使用kube-bench检测Kubernetes集群安全
    JVM的基础了解
    Windows系统管理二:基本命令
  • 原文地址:https://blog.csdn.net/qq_26462567/article/details/126255826