
使用“服务组件体系结构”与流程交互
使用“服务组件体系结构”(SCA) 启动流程实例并与之交互的方式有多种。 您可以使用接收消息事件来创建流程实例或与之交互。
您还可以使用 SCA 来创建流程实例,而不使用接收消息事件。 在这种情况下,流程的输入及其输出(可选)可定义 SCA 交互的服务接口。要与接收消息事件交互,您可以使用 SCA 作为触发机制来代替使用 Undercover Agent (UCA)。 接收消息事件可以是开始消息事件、中间消息事件、边界消息事件或事件子流程的开始事件。
使用 SCA 作为触发机制使得采用基于实例的关联成为可能,此关联始终将消息传递至一个实例的一个事件。 相比之下,Undercover Agent 调用支持的关联则允许(相同或不同模型的)多个实例和事件接收同一条消息。
使用接收消息事件的受支持交互模式
您可以使用 SCA 消息来调用以下事件类型。 这些交互是单向交互。
- 消息开始事件
- 开始事件将导致创建流程的新实例。 如果您的流程包含多个开始事件,那么每个事件都应使用不同的 SCA 服务标识。 否则,如果多个开始事件指定同一个 SCA 服务标识,那么将随意选择接收启动消息的开始事件。
- 消息事件子流程的开始事件
- 消息事件子流程的开始事件需要关联。 调用消息事件子流程的消息必须与随后调用事件子流程的流程实例相关联。 (可选)可将该事件类型配置为可重复或中断父流程实例。
- 中间消息事件
- 中间消息事件需要关联,以确保消息触发属于正确流程实例的中间消息事件。
- 边界消息事件
- 边界消息事件是与活动连接的中间消息事件。 边界消息事件需要关联,以确保消息触发属于正确流程实例的边界消息事件。 (可选)可将该事件类型配置为可重复或中断事件所连接的活动。
使用输入和输出变量的受支持交互模式
流程的输入和输出变量可定义 SCA 请求消息和 SCA 响应消息的参数。 它们用于存储通过 SCA 方式交换的请求消息和响应消息的参数数据。 存在两种交互模式:- 单向接口
- 使用流程的单向接口创建流程实例。 当流程实例接收 SCA 消息时,自动将消息参数分配给输入变量。
- 请求/响应接口
- 您创建流程实例,并在流程完成时接收到使用流程的请求/响应接口的响应消息。 当流程实例接收到 SCA 请求消息时,会自动将请求消息参数分配给输入变量。 SCA 响应消息是在流程实例结束时根据输出变量构造的。
基于实例的关联
如果请求消息必须由流程的现有实例接收,那么必须指定关联变量以标识接收消息的预期实例。
SCA 消息关联需要至少将一个流程变量标记为流程实例标识。 只能写入关联变量一次。 分配给关联变量的值必须唯一地标识实例。 通常,业务数据将分配给流程实例标识变量。 例如,可以通过开始消息为关联变量分配员工编号。 计划用于同一实例的所有消息都必须包含针对关联变量的同一个值,以标识相应的流程实例。 用于标识流程实例的值不能复用以标识新实例,直至第一个实例进入“已完成”或“已终止”状态或者删除该实例之后才可执行该操作。
重要信息: 必须确保先初始化流程实例标识变量,然后再针对该实例发送任何消息。 由于仅在消息到达时才执行关联匹配操作,因此,如果消息在初始化流程实例标识变量之前到达,那么它永远无法与流程实例匹配,并且永远不会触发接收消息事件。
如果在合适的消息接收事件进入“正在等待”状态之前发布消息,那么会存储该消息。 该消息将由进入“正在等待”状态的第一个匹配消息接收事件来接收。
注: 不支持启动应接收不同 SCA 消息的多个并行子流程实例的模式。 原因是在子流程中设置标记为流程实例标识的变量时,此变量实际标识整个父流程实例,而不是特定子流程实例。 通过在同一子流程的多个实例中设置相同变量,将创建具有相同名称但值不同的多个流程实例标识。 但是,它们全都标识相同的父流程实例。 因此,在发送针对于其中一个并行子流程实例的 SCA 消息时,所有子流程实例都可能接收它,因为基于实例的关联将相同父流程实例标识为目标。 在此情况下,将随意选择其中一个子流程。
为避免任意选择,在 IBM Process Designer 中对使用 "链接的流程" 活动调用子流程的流程进行建模时,请将 "链接的流程" 活动标记为 运行顺序 ,而不是 并行运行。
在流程中定义可以触发不同事件的服务
通常,当接收消息事件与 SCA 一起使用时,流程的相应服务接口派生自消息事件的服务标识和消息对象类型。
您可以指定流程仅公开一个服务,该服务由流程的不同接收消息事件实现。 要执行该操作,请为流程中不同的消息事件指定相同的服务标识和消息对象类型。 当接收消息时,某个接收消息事件将会处理该消息。 哪个事件接收消息取决于是否找到关联流程实例,如果找到的话,取决于哪个事件处于活动状态或哪个事件第一个到达。
- 如果流程实例与消息中的实例标识值匹配,那么将应用以下规则:
- 如果实例有且仅有一个处于等待状态的匹配事件(事件子流程的中间、边界或开始事件),那么该匹配事件将接收该消息。
- 如果实例有多个处于等待状态的匹配事件,那么将随意选择其中之一来接收该消息。
- 如果实例没有任何处于等待状态的匹配事件,那么该消息将存储起来,直至可以接收该消息的事件变为活动状态为止。
- 如果没有流程实例与消息中的实例标识值匹配,并且存在与消息类型匹配的开始流程消息事件,那么将创建流程的新实例,并且开始消息事件将接收该消息。
警告: 可以无意中为多个事件定义同一服务接口。 例如,如果不同的事件具有相同的名称(这在“常规”选项卡上会显示为错误),或者将不同的服务标识映射到相同的 NMToken 字符串,那么不同事件共享相同服务接口。 如果发生此命名冲突,您可以通过重命名重复的事件名称,然后恢复缺省服务标识名称来消除命名冲突。
实例迁移规则
要允许对包含标记为流程实例标识的 SCA 消息事件和变量的流程进行实例迁移,在创建已部署的流程的新版本时,必须遵守有关无法更改或删除哪些内容的规则。 迁移实例的开发策略中描述了相关规则。
任务概述
要使用 SCA 与流程交互,您必须完成以下操作:
- 使用 Process Designer:
您可以使用流程隐式提供的服务,或使用为接收消息事件(其中将 SCA 指定为触发机制)提供的服务。 对于前者,您无需执行任何操作,而对于后者,您必须指定相应的接收消息事件。
- 如果 SCA 消息与现有流程实例交互,请将基于实例的关联用于消息事件子流程、中间接收消息事件或边界消息事件。 为此,您必须将一个或多个流程变量标记为流程实例标识。 请参阅 声明流程或服务的变量。
- 确保为标识流程实例的流程变量分配了适当的值。 必须分配该值,然后对于该实例才会有任何 SCA 消息到达。
- 可选:将启动消息事件添加到流程。 请参阅 使用启动消息事件。
- 如果希望流程中的消息事件子流程或接收消息事件能够接收 SCA 消息,请执行以下操作:
- 根据需要添加中间接收消息事件和边界消息事件。 请参阅 使用中间和边界消息事件来接收消息。
- 在需要时,添加具有相应开始消息事件的消息事件子流程。 请参阅 使用启动消息事件。
- 对于作为数据映射一部分的每个接收消息事件,请选择唯一标识每个流程实例的变量。 请参阅 映射活动或步骤的输入和输出数据。
- 切换到使用 Integration Designer,并完成以下操作:
- 将流程拖动到设计画布上,并选择要包含在 SCA 导入中的接口。 请参阅 创建导入以启动业务流程定义。
- 在组合件编辑器中,您可以使用 SCA 导入通过 SCA 消息来调用流程实例以及与流程实例通信。
This topic only applies to BAW, and is located in the BAW repository. Last updated on 2025-01-20 10:38