1. 程式人生 > >activiti5/6 系列之--流程復用技術 callActivity

activiti5/6 系列之--流程復用技術 callActivity

main process pri meta edit 不用 nds agen 很多

定義:當流程執行到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>


子流程的流程定義沒有什麽特別的。 它也可以單獨使用,不用其他流程調用。

activiti5/6 系列之--流程復用技術 callActivity