activiti5/6 系列之--流程復用技術 callActivity
阿新 • • 發佈:2018-11-26
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