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>

 


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM