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