天天看點

Flowable入門系列文章29 - Activity解讀 05

1、消息開始事件

描述

甲消息開始事件可用于使用已命名的資訊來啟動一個過程執行個體。這有效地允許我們使用消息名稱從一組替代開始事件中選擇正确的開始事件。

在部署具有一個或多個消息啟動事件的流程定義時,應考慮以下注意事項:

  • 消息開始事件的名稱在給定的流程定義中必須是唯一的。流程定義不能有多個具有相同名稱的消息啟動事件。在部署包含兩個或更多引用同一消息的消息啟動事件的流程定義時,或者如果兩個或多個消息啟動事件引用具有相同消息名稱的消息,Flowable将引發異常。
  • 消息啟動事件的名稱在所有已部署的流程定義中必須是唯一的。Flowable在部署包含一個或多個消息啟動事件的流程定義時引發異

    常,該事件引用的消息與已由其他流程定義部署的消息啟動事件具有相同的名稱。

  • 程序版本控制:在部署新版本的程序定義時,先前版本的啟動消息訂閱将被删除。

當啟動一個流程執行個體,可以使用在下面的方法來觸發的消息開始的事件RuntimeService:

ProcessInstance startProcessInstanceByMessage(String messageName);
ProcessInstance startProcessInstanceByMessage(String messageName, Map<String, Object> processVariables);
ProcessInstance startProcessInstanceByMessage(String messageName, String businessKey,
Map<String, Object< processVariables);
           

這messageName是在name屬性message引用的messageRef屬性中給出的名稱messageEventDefinition。啟動流程執行個體時應用以下注意事項。

  • 消息啟動事件僅在頂級程序上受支援。嵌入式子程序不支援消息啟動事件。
  • 如果一個流程定義有多個消息啟動事件,runtimeService.startProcessInstanceByMessage(…)允許選擇适當的啟動事件。
  • 如果一個流程定義有多個消息啟動事件和一個單獨的無啟動事件,runtimeService.startProcessInstanceByKey(…)并

    runtimeService.startProcessInstanceById(…)使用無啟動事件啟動一個流程執行個體。

  • 如果一個流程定義有多個消息啟動事件,并且沒有無啟動事件,runtimeService.startProcessInstanceByKey(…)并且

    runtimeService.startProcessInstanceById(…)抛出一個異常。

  • 如果流程定義具有單個消息啟動事件,runtimeService.startProcessInstanceByKey(…)并

    runtimeService.startProcessInstanceById(…)使用消息啟動事件啟動新的流程執行個體。

  • 如果一個程序是從一個調用活動開始的,那麼消息開始事件隻在支援時才被支援
    • 除了消息啟動事件之外,該程序還有一個無啟動事件
    • 該過程具有單個消息啟動事件并且沒有其他啟動事件。

圖形表示法

消息開始事件被視為具有消息事件符号的圓圈。符号是空的,代表捕捉(接收)的行為。

Flowable入門系列文章29 - Activity解讀 05

XML表示

消息啟動事件的XML表示是帶有messageEventDefinition子元素的正常啟動事件聲明:

<definitions id="definitions"
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:flowable="http://flowable.org/bpmn"
targetNamespace="Examples"
xmlns:tns="Examples">
<message id="newInvoice" name="newInvoiceMessage" />
<process id="invoiceProcess">
<startEvent id="messageStart" >
<messageEventDefinition messageRef="tns:newInvoice" />
</startEvent>
...
</process>
</definitions>
           

2、信号啟動事件

描述

甲信号啟動事件可用于使用命名信号來啟動一個過程執行個體。信号可以使用中間信号抛出事件或通過

API(runtimeService.signalEventReceivedXXX方法)從流程執行個體中觸發。在這兩種情況下,将啟動具有相同名稱的信号啟動事件的所有流程定義。

請注意,在這兩種情況下,也可以在流程執行個體的同步和異步啟動之間進行選擇。

在signalName必須在API中傳遞是在給定的名稱name的屬性signal被引用的元素signalRef的屬性signalEventDefinition。

圖形表示法

信号啟動事件可視化為帶有信号事件符号的圓。符号是空的,代表捕捉(接收)的行為。

Flowable入門系列文章29 - Activity解讀 05

XML表示

信号啟動事件的XML表示是帶有signalEventDefinition子元素的正常啟動事件聲明:

<signal id="theSignal" name="The Signal" />
<process id="processWithSignalStart1">
<startEvent id="theStart">
<signalEventDefinition id="theSignalEventDefinition" signalRef="theSignal" />
</startEvent>
<sequenceFlow id="flow1" sourceRef="theStart" targetRef="theTask" />
<userTask id="theTask" name="Task in process A" />
<sequenceFlow id="flow2" sourceRef="theTask" targetRef="theEnd" />
<endEvent id="theEnd" />
</process>
           

上面文章來自盤古BPM研究院:http://vue.pangubpm.com/

文章翻譯送出:https://github.com/qiudaoke/flowable-userguide

了解更多文章可以關注微信公衆号:

Flowable入門系列文章29 - Activity解讀 05