zoukankan      html  css  js  c++  java
  • activiti5/6 系列之--流程复用技术 callActivity

    定义:当流程执行到callActivity,会创建一个新分支,它是到达调用节点的流程的分支。 这个分支会用来执行子流程,默认创建并行子流程,就像一个普通的流程。 上级流程会等待子流程完成,然后才会继续向下执行。

    XML:

    <callActivity id="callCheckCreditProcess" name="Check credit" calledElement="checkCreditProcess" />

    注意,子流程的流程定义是在执行阶段解析的

    传递变量

    可以把流程变量传递给子流程,反之亦然。数据会复制给子流程,当它启动的时候, 并在它结束的时候复制回主流程。

    <callActivity id="callSubProcess" calledElement="checkCreditProcess" >
    <extensionElements>
    <activiti:in source="someVariableInMainProcess" target="nameOfVariableInSubProcess" />
    <activiti:out source="someVariableInSubProcss" target="nameOfVariableInMainProcess" />
    </extensionElements>
    </callActivity>

    实例
    下面的流程图演示了简单订单处理。先判断客户端信用,这可能与很多其他流程相同。 检查信用阶段这里设计成调用节点。


    流程看起来像下面这样:

    <startEvent id="theStart" />
    <sequenceFlow id="flow1" sourceRef="theStart" targetRef="receiveOrder" />
    
    <manualTask id="receiveOrder" name="Receive Order" />
    <sequenceFlow id="flow2" sourceRef="receiveOrder" targetRef="callCheckCreditProcess" />
    
    <callActivity id="callCheckCreditProcess" name="Check credit" calledElement="checkCreditProcess" /> <!-- 下面这个子流程的id,见下文 -->
    <sequenceFlow id="flow3" sourceRef="callCheckCreditProcess" targetRef="prepareAndShipTask" />
    
    <userTask id="prepareAndShipTask" name="Prepare and Ship" />
    <sequenceFlow id="flow4" sourceRef="prepareAndShipTask" targetRef="end" />
    
    <endEvent id="end" />

    子流程看起来像下面这样:

      <bpmn2:process id="checkCreditProcess" tns:packageName="net.hs.cw.bpme.ta" name="InputNav" isExecutable="true" processType="Private">
        <bpmn2:startEvent id="StartEvent_1" name="StartProcess">
          <bpmn2:extensionElements>
            <tns:metaData name="elementname">
              <tns:metaValue><![CDATA[StartProcess]]></tns:metaValue>
            </tns:metaData>
          </bpmn2:extensionElements>
          <bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>
        </bpmn2:startEvent>


    子流程的流程定义没有什么特别的。 它也可以单独使用,不用其他流程调用。

  • 相关阅读:
    grep 同时满足多个关键字、满足任意关键字和排除关键字
    随笔_生活感想
    oracle中to_number(),LPAD(),NVL()函数
    向数据库插入数据为null——忘记加@RequestBody
    自定义css样式覆盖Element-ui的样式
    ORA-00001: 违反唯一约束条件
    ORA-01400: 无法将 NULL 插入 ("JXKH"."SYS_MENU"."MENU_ID")
    'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
    Error: Cannot find module 'webpack-merge'
    ERROR:oracle.jdbc.driver.OracleDriver is deprecated.
  • 原文地址:https://www.cnblogs.com/zhjh256/p/10021104.html
Copyright © 2011-2022 走看看