如果要对流程执行期间接收的消息事件进行建模,可以在业务流程定义 (BPD) 中包含中间消息事件。流程执行到达中间消息事件时,如果匹配消息存储在系统中,那么会将其传递至该消息事件,否则,将阻止沿该路径的进一步执行,直到匹配的入局消息到达为止。
中间消息事件可以附加到 BPD 中的活动,也可以包含在过程流(与序列流连接)中。将中间消息事件拖到泳道上以创建中间消息事件。如果将中间消息事件拖到活动上,那么它将变为边界消息事件。您可以将任一现有消息事件类型更改为另一类型,方法是将其拖到或拖出泳道或活动。
提示: 在 BPD 中添加消息事件时,请了解
消息事件建模中适用于所有类型的消息事件的常规信息。
开始之前
要执行此任务,您必须进入 IBM® Process
Designer 桌面编辑器中。
关于此任务
对于接收中间消息事件,您可以将 Undercover Agent (UCA) 用于消息触发机制。
您还可以使用服务组件体系结构 (SCA) 服务作为触发机制。
提示: 要构建包含中间消息事件(包含在通过序列线连接的过程流中)的样本入站集成,请参阅
构建样例入站集成。
过程
- 打开 Process Designer 桌面编辑器。
- 打开 BPD,然后将中间消息事件组件从选用板中拖到 BPD 图上。可以将其拖到泳道或连接到活动。 将事件连接到活动时,该事件称为边界事件且包含在活动的大纲中。
- 在属性选项卡上,单击实施。
- 选择事件类型消息。
- 如果将“中间消息事件”组件拖动到 BPD 图上,请在中间事件详细信息部分中,选择中间事件类型消息。
- 如果将“中间消息事件”组件拖动到活动上,请在边界事件详细信息部分中,选择中间事件类型消息。
- 如果中间消息事件是边界事件,请使用边界事件详细信息部分以指定其行为:
- 如果接收到该消息意味着活动完成,请确保选择中断活动选项(这是缺省设置)。否则,清除此选择,以便在收到消息时不中断或完成活动。
- 如果未选择中断活动,那么可重复选项可用。
如果可以多次触发边界消息事件,请选择可重复选项,以便连接的活动可以接收多条消息。
- 要将 UCA 用于触发中间消息事件,请在消息触发器部分中完成以下操作。
- 对于触发机制,请选择 UCA。
- 要选择现有的 Undercover Agent,请单击附加的消息 UCA 字段旁边的选择。
- 要创建 Undercover Agent,请单击新建。请参阅Undercover Agent。
- 在条件文本框中,如果您希望定义处理消息事件的条件,请输入 JavaScript 表达式。
如果确实指定了条件且该条件评估为 true,那么将接受该消息且继续进行处理。如果条件评估为 false,那么将停止处理。在大部分情况下,因为应以单独的 Undercover Agent 实现每个消息事件,所以无需特殊消息条件。
- 如果希望在消息事件接收到入局消息后使用该入局消息,请启用使用消息。
请参阅消息事件建模中的符号列表以了解有关消息使用的更多信息。
- 如果在流程所处状态下,有入局消息到达,而消息事件尚未准备好接受该消息,要允许消息事件接收此类消息,请选择持久预订。持久预订会导致存储该消息,直至消息事件到达为止。
仅存储最近接收的消息。
提示: 如果您偶尔使用入站消息和 Undercover Agent,请考虑使用持久预订事件。
选中持久预订时,入局消息在数据库将持久存储。即使您选中复选框以使这些持久消息可消耗,但是它们仍会不断累积。请定期使用 BPMDeleteDurableMessages 命令来删除持久预订事件。
要点: 消息的发送方和接收方都必须使用同一 Undercover Agent。例如,如果消息的发送方是另一个 BPD 中的消息结束事件,那么为另一个 BPD 中的接收中间事件和发送消息结束事件均选择同一 Undercover Agent。
提示: UCA 必须具有事件上调度类型才能充当消息触发器。此外,附加到所选 Undercover Agent 的服务必须具有一个或多个输入变量,以便可以传递和关联来自事件的信息。
要将 SCA 服务用于触发中间消息事件,请在消息触发器部分中完成以下操作。 - 对于触发机制,请选择 SCA 服务。
- 对于消息对象类型,请单击选择以选择业务对象 (BO) 类型,单击新建以定义新的 BO 类型,或者使其在您选择服务定义时自动设置。 您选择的业务对象类型将确定中间消息事件的输出参数。消息对象类型必须是复杂类型。
- 对于服务标识,将根据事件名称提供缺省值,如 BPD 图中所示。 如果需要,您可以指定另一个服务标识名称,或者从与所选消息对象类型匹配的服务的下拉列表中选择一个名称。如果输入名称,那么将限制为使用 NMToken 字符集。
- 如果选择了现有服务定义并且未设置消息对象类型,那么将更新消息对象类型以与服务定义匹配。
- 服务标识将与 BPD 名称一起使用,以为该事件点生成唯一的 SCA 服务。将显示生成的服务接口名称。
- 如果选择了现有服务定义,那么会将关联的事件添加到该定义所包含的事件的列表。
- 如果为多个消息事件指定同一个 SCA 标识,那么对服务标识或消息对象类型的任何更改都将影响提供该服务的所有事件。进行此类更改可能会破坏事件的数据映射。
- 要恢复缺省值,请单击 X(删除)图标。
提示: 如果为多个消息事件指定同一个 SCA 标识,那么服务接口可能会在 BPD 中触发多个事件。但是,每条入局消息只会由一个事件接收。哪个事件接收消息或者是否存储消息以供将来传递,取决于是否找到关联流程实例,以及如果找到,哪些兼容的消息事件处于等待状态。有关语义的详细信息,请参阅使用服务组件体系结构与流程进行交互。
要点: 可能会无意间对多个事件定义了相同的服务标识。例如,如果不同的事件具有相同的名称(这在“常规”选项卡上会显示为错误),或者将不同的服务标识映射到相同的 NMToken 字符串。如果发生此类命名冲突,您可以通过重命名重复的事件名称来中断意外的多态性,然后单击 X(删除)以恢复缺省服务标识名称。
- 指定关联和输出映射。
- 在属性选项卡上,单击数据映射。
- 打开关联和输出映射部分。
- 选择要用于关联的输出变量。为其分配的值将确保运行时消息的参数值传递到正确的 BPD 实例。
选择进行关联的变量由赋值符号 (
) 标识。此关联确保运行时消息的参数值传递到正确的 BPD 实例。 - 对于使用复杂变量而不是服务实现的 Undercover Agent,可以针对映射或关联选择复杂变量或变量的顶级子属性。
如果使用 SCA,那么必须选择标记为流程实例标识的变量,该标识可确保根据该变量的值将消息传递至正确的 BPD 实例。
- 将每个输出变量映射到 BPD 中的局部变量。 对于每个变量,请单击变量选择器图标以将每个输出变量映射到 BPD 中的局部变量。