消息边界事件
定义
消息边界事件会捕获消息定义引用的相同信息名的信息。当执行到达边界消息事件依附的任务
时(如用户任务、子流程),引擎会创建一个捕获事件,在其依附的任务的生命周期内等待一个抛
出消息,该消息来自消息抛出事件或者 API,被触发后后继路线继续执行。
图形标记
边界消息事件显示成一个普通的中间事件(圆圈里有个小圆圈),位于节点边缘,内部是一个
消息小图标。消息图标是白色(无填充),表示捕获语义,如图所示
边界消息事件可能是中断(左侧)或非中断(右侧)的。
XML内容
<message id="theMessage" name="newInvoiceMessage" />
<process id="messageBoundaryInterrputingEventProcess">
<userTask id="usertask1" name=" "></userTask>
<boundaryEvent id="messageBoundaryInterrputingEvent" name="Timer"
attachedToRef="usertask1" cancelActivity="false">
<messageEventDefinition messageRef="theMessage" />
</boundaryEvent>
<!-- -->
</process>
在以上 xml 代码片段中,加粗的部分分别定义了 message、userTask 和 boundaryEvent,消息
message 的 id 属性值为 theMessage,消息边界事件 boundaryEvent 中的 messageEventDefinition 子元
素通过设置 messageRef 为 theMessage 引用了该信号,同时使用 attachedToRef 属性将其绑定到
userTask 上。cancelActivity 属性用法与定时边界事件相同。
这里是将消息边界事件附加在了用户任务节点上,其它流程活动(如子流程等)也可以附加。
使用示例
消息边界事件触发的方式有两种:
- 流程中抛出消息事件(Message Intermediate Throwing Event)、消息结束事件(Message EndEvent)发出的内部消息。
- 通过 API 触发,在 Flowable 中通过调用 runtimeService.messageEventReceived 系列方法发出一个指定的信号。runtimeService.messageEventReceived 系列方法下表格所示:
API 方法 | 含义 |
---|---|
runtimeService.messageEventReceived(String messageName, String executionId) | 把消息发送给指定执行流 |
runtimeService.messageEventReceived(String messageName, String executionId, HashMap<String, Object> processVariables) | 把消息发送给指定执行流,同时给更新流程变量 |
界面操作
总结
消息边界事件依然和上面几个边界事件一样,分中断和非中断
欢迎加入QQ群学习交流:582010059
视频地址:
演示demo
本文中内容和案例出自贺波老师的书《深入Activiti流程引擎:核心原理与高阶实战》,书中的介绍更全面、详细,推荐给大家。
深入Activiti流程引擎