天天看点

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