装配批处理的 EDI 交换

若要将单个事务集批处理元素组合成 EDI 交换,BizTalk Server EDI 和 AS2 执行以下操作:

  • 标识要进行批处理的批元素

  • 收到各个批元素后对其进行验证和缓冲

  • 检索特定批元素,如果满足发布标准,则组装批交换

    收集各个消息以组合成批的开始时间是根据批处理激活标准确定的, 批的发布时间是根据批发布标准确定的。 有关这两组条件的详细信息,请参阅 配置传出批处理

传出批处理消息的消息流

BizTalk Server 配置为对传出消息进行批处理时,BizTalk Server 组件将执行下面的一系列步骤来准备要发送的批处理消息。 这一系列的步骤描述了这样一种情况:具有 BatchMarker 管道组件的 EDIReceive 管道处理收到的交换,这些交换包含要成批进行发送的事务集。

  1. EDIReceive 管道中的 BatchMarker 管道组件通过参与方属性中的 EDI 批处理筛选器设置,确定需要进行批处理的消息。 (该组件是唯一一个查看批处理筛选器设置并根据这些设置进行处理的批处理组件。)

  2. 如果只有一个批处理配置的筛选器设置订阅消息,BatchMarker 组件将提升 属性 EDI.ToBeBatched = True。 这样可确保批处理业务流程将提取该消息。

  3. 如果多个批处理配置的筛选器设置与消息的上下文匹配,BatchMarker 组件将提升属性 EDI.ToBeRouted = True 并将属性 EDI.BatchIds 设置为包含匹配批 ID 的空格分隔列表。 这样可确保路由业务流程将订阅该消息。

    注意

    您可以在自定义接收管道或自定义业务流程中升级相应的上下文属性。 自定义接收管道可使用 BatchMarker 管道组件,或者在不使用 BatchMarker 管道组件的情况下升级属性。

  4. 路由业务流程会选取为其 EDI.ToBeRouted = True 提升 和 EDI.BatchIds 的任何事务集,然后创建事务集的副本,确保 包含 EDI.BatchIds的每个批 ID 都有一个副本。 路由业务流程设置 EDI.ToBeBatched = TrueEDI.BatchId 设置为每个事务集副本的匹配批处理配置的批 ID。 这样可确保批处理业务流程会提取事务集以便进行批处理。

  5. 批处理业务流程提取已升级下列属性的所有消息:

    • EDI.ToBeBatched = True与此批处理业务流程实例相关的批的 和 EDI.BatchId = 批 ID。

    • EDI.ToBeBatched = True 和 EDI.BatchName = 已配置批的名称,且 EDI.DestinationPartyName = 包含此批配置的参与方名称。

      当具有 BatchMarker 管道组件的 EDIReceive 管道处理传入消息时,批处理业务流程将仅对 X12 或 EDIFACT 编码的事务集进行批处理。

    注意

    对于每个活动批配置,都将有一个批处理业务流程的实例,并且每个实例订阅一个特定的批 ID。 在“协议属性”对话框的单向协议选项卡的“批处理配置”页的“标识”部分中创建新的批处理配置时,会自动设置批 ID 值。

  6. 批处理业务流程会验证要进行批处理的每个事务集。 如果事务集未通过验证,它将上下文 EDI.BatchItemValidationFailure 属性设置为“True”。 BatchSuspend 业务流程根据该上下文属性选取消息,发布错误信息,然后暂停。

  7. 当满足批发布条件时,批处理业务流程将批元素组装为一个批,并创建信封。

  8. 在批处理业务流程完成某个交换的批处理之后,它将升级该交换的以下属性:EDI.DestinationPartyName = %PartyName%,EDI.BatchEncodingType = X12 或 EDIFACT,并且 EDI.ToBeBatched = False。

  9. 发送端口根据 EDI 选取批处理的事务集。DestinationPartyName = <PartyName>, EDI。BatchEncodingType = EDIFACT 或 X12,EDI。ToBeBatched = False。

批处理业务流程控制消息

批处理业务流程由下列控制消息激活、终止或重写:

  • BatchActivation:当业务流程收到此消息时,将创建批处理业务流程的实例,并且业务流程处于活动状态,以接收批处理元素 (如果满足批处理激活条件) 。 通过在“协议属性”对话框的单向协议选项卡的“批处理配置”页上单击批处理配置的“开始”按钮,发送此控制消息。

  • BatchTermination:业务流程收到此消息时,它会从现有批处理元素创建一个批,将消息发布到 MessageBox,然后终止。 此控制消息是通过单击“协议属性”对话框的单向协议选项卡的“批处理配置”页上的“批处理配置”按钮发送的。

    注意

    如果业务流程达到在“协议属性”对话框的单向协议选项卡的“批处理配置”页的“终止”部分中为 End-by 属性指定的时间,则业务流程也会终止。

  • BatchOverride:业务流程收到此消息时,它会从现有元素创建一个批,将消息发布到 MessageBox,然后等待下一批消息。 此控制消息是通过单击“协议属性”对话框的单向协议选项卡的“批处理配置”页上的“批处理配置”按钮发送的。

    批处理业务流程通过 BatchControlMessageRecvLoc 接收位置接收控制消息。 此 SQL 接收位置的轮询间隔默认设置为 30 秒,但可以在接收位置的 “SQL 传输属性 ”对话框中进行更改。 缩短轮询间隔可确保 BatchControlMessageRecvLoc 接收位置将在您执行控制消息发送操作之后(如启动批处理业务流程时)会立即收到控制消息。

    当您启动批处理业务流程时,将执行下列步骤:

  1. 单击“开始”按钮时,BizTalk Server会在表中创建一条记录,指示要为其激活批处理业务流程的参与方和批 ID。

  2. 与 BatchControlMessageRecvLoc 接收位置关联的 SQL 适配器将进行轮询,以查看数据库中是否存在该记录。

  3. 如果该记录存在,SQL 适配器将使用该记录中的信息生成一条控制消息。

    注意

    通过此种方式生成控制消息可确保无效控制消息无法启动业务流程。

  4. BatchControlMessageRecvLoc 接收位置收到控制消息,并且 BizTalk Server 激活批处理业务流程实例。

批组件

BizTalk Server EDI 使用以下组件将 XML 事务集批处理到 EDI 交换中:

  • EDI 接收管道中的 BatchMarkerReceivePipelineComponent

  • 路由业务流程

  • 批处理业务流程

  • 升级批处理业务流程

  • BatchSuspend 业务流程

  • EDI 发送管道

    在安装和配置 EDI 和 AS2 BizTalk Server时,这些组件将作为 DLL 安装。

注意

BizTalk Server EDI 和 AS2 中的批处理组件不保证批处理中事务集的顺序。

BatchMarkerReceivePipelineComponent

通过 EDI 接收管道中的 BatchMarkerReceivePipelineComponent,批处理业务流程可以提取要进行批处理的消息。 应用 EDI 接收管道中的拆装器之后即可应用该管道组件。 组件评估在“协议属性”对话框的单向协议选项卡的“批处理配置”页的“筛选器”部分中设置的筛选条件,并使用以下上下文属性标记事务集以供路由和批处理业务流程进行处理

  • 如果一方订阅要批处理的消息,则会提升 ToBeBatched = True BatchId,并将 BatchId 设置为匹配批处理配置的批 ID 的值。 这样,批处理业务流程即可进行提取。

  • 如果多个批订阅要批处理的消息,则会提升 ToBeRouted = True,并将 EDI.BatchIds 属性集设置为以空格分隔的批 ID 列表。 这样,路由业务流程即可进行提取。

  • 如果不存在任何订阅,则不会升级上下文属性。 这表示不会对事务集进行批处理。

    管道组件忽略 XML 以外的消息,以及属性 ReuseEnvelope (保留批) 的消息。 如果不对确认进行批处理,则管道组件将忽略确认类型的消息(CONTRL、TA1 和 997)。 为了优化路由和批处理业务流程的处理,如果反汇编程序将消息上下文属性 MessageDestination 设置为“SuspendedQueue”,BatchMarkerPipelineComponent 会将消息传递到 MessageBox。

    如果您使用的是自定义管道,而不是 EDIReceive 管道,那么您可以在自定义管道中使用 BatchMarker 组件。 如果未使用 EDIReceive 管道,并且正在从业务流程发布消息,则必须将 和 BatchID 提升ToBeBatched = True为其中一个组件中活动批处理的 ID。

路由业务流程

路由业务流程订阅上下文属性和上下文属性ToBeRouted = TrueEDI.BatchIds设置为以空格分隔的批 ID 列表的任何消息。 当多个批处理筛选器订阅要进行批处理的消息时会出现此情况。 路由业务流程将为 中包含的 EDI.BatchIds每个批 ID 创建消息的副本。 并使用以下两个新上下文属性标记每个副本:

  • EDI.BatchID,将此属性设置为此消息要使用的批 ID。

  • EDI.ToBeBatched,将此属性设置为 True。

    然后再将副本路由到 MessageBox,以供批处理业务流程提取。 每个目标批 ID 使用同一业务流程的单个实例,并在具体批 ID 上包含一个筛选器。

批处理业务流程

批处理业务流程是具有状态的服务,它在一段时间内缓冲批元素(事务集),将其组装为交换,然后再根据发布标准将交换发布到发送管道。

激活后,批处理业务流程的实例可以开始将特定编码类型的消息批处理到给定的一方 (如果 开始日期 时间已过) 。 在任何时候,每个参与方都可以有许多批处理业务流程实例,每个活动批配置有一个实例。 批处理业务流程的单个实例可以为单个批处理配置释放多个批处理。 符合结束标准后,批处理业务流程实例将终止。 批处理业务流程的新实例需要使用“ 开始 ”按钮从贸易合作伙伴管理 (TPM) 手动创建。

如果批处理业务流程在“协议属性”对话框的单向协议选项卡的 “批处理配置” 页的 “激活” 部分中显示的开始日期时间之前开始,则只会接收在激活范围内指定的消息。 而不会接收在此开始日期时间之前发送的消息。

批处理业务流程可执行下列操作:

  • 使用上下文属性 EDI.ToBeBatched = TrueEDI.BatchId 批处理配置的 ID 或 和 EDI.ToBeBatched = True EDI 订阅 XML 批处理元素。BatchName = 配置的批处理的名称和 EDI。DestinationPartyName = 包含批处理配置的参与方名称。 它在循环中使用 Receive 操作操作接收批处理元素。

    注意

    批处理业务流程不会根据“协议属性”对话框的单向协议选项卡的“批处理配置”页的“筛选器”部分中设置的筛选条件来批处理事务集。 该业务流程会订阅设置了上述上下文属性的事务集。 BatchMarker 管道组件根据参与方属性中的筛选器设置来设置和升级这些上下文属性。

  • 检索上下文属性中 BatchId 标识的参与方的批处理配置设置。

  • 根据参与方设置验证批元素(事务集)。

  • 如果批处理元素中存在错误,批处理业务流程将提升该事务集上的以下属性: EDI.BatchItemValidationFailure = TrueBatchElementSuspend 业务流程订阅已为其提升此属性的任何事务集。 此业务流程将提供在批处理交换中遇到的第一个错误的详细错误信息。

  • 如果批元素中没有任何错误,则会保留对该批元素的引用。

  • 收到适当的控制消息或满足批处理释放条件时,会中断 Receive 操作循环,从 MessageBox 检索所有批处理元素,并组合交换。

  • 设置交换的上下文属性 ToBeBatched = False 和上下文属性 DestinationPartyName = %PartyName% ,其中 %PartyName% 是消息的目标参与方的名称。

    注意

    如果发送端口订阅属性和 EDI 的任一或两者 EDI.ToBeBatched = False 。DestinationPartyName = %PartyName%,发送端口可以选取批处理交换。 请确保配置发送端口的筛选器,使该筛选器仅提取应提取的批交换。

    注意

    批处理业务流程丢弃到 MessageBox 中的交换只有属性 EDI.ToBeBatched = FalseEDI。DestinationPartyName = %PartyName%, 和 EDI。BatchEncodingType = “X12” 或 “EDIFACT” 提升到上下文。 原始事务集的所有上下文属性将丢失。

  • 对于 X12 编码的交换,请向信封应用下列属性:

    • ISA6:交换发送方 ID

    • ISA8:交换接收方 ID

    • ISA15:用法指示符

    • ISA_Blob(写入到上下文)

  • 对于 EDIFACT 编码的交换,请向信封应用下列属性:

    • UNB2.1:交换发送方 ID

    • UNB3.1:交换接收方 ID

    • UNB2.3:反向路由的地址

    • UNB11:用法指示符

    • UNA_Blob(写入到上下文)

    • UNB_Blob(写入到上下文)

  • 将批交换传送给 MessageBox,以供 EDI 发送管道提取。

UpgradeBatching 业务流程

UpgradeBatching 业务流程处理属性设置为 true 但未EDI.BatchID设置 属性的消息EDI.ToBeBatched

在以前版本的 BizTalk Server 中,每一方只能有一个批处理配置。 处理已 EDI.ToBeBatched 设置为 true 的消息时, EDI.DestinationPartyId 用于确定参与方,然后从协议属性中读取批处理配置。

在 BizTalk Server 中,每个参与方都可以有多个与之关联的批处理配置,因此 EDI.DestinationPartyId 不提供足够的信息来确定应使用哪个批处理配置。 当BizTalk Server接收消息时, EDI.BatchId 属性用于标识在处理消息时应使用的特定批处理配置。

升级到 BizTalk Server 后,可能仍有使用 EDI.DestinationPartyId 属性指定参与方配置的自定义管道。 收到 EDI.ToBeBatched 已设置为 true 且已 EDI.DestinationPartyID 设置 而不是 EDI 的消息时。BatchID,UpgradeBatching 业务流程尝试确定应使用哪个批处理配置。

UpgradeBatching 业务流程使用以下订阅筛选器来订阅标记为批处理,但未指定批 ID 的文档:

  • EDI.ToBeBatched=True

  • EDI.EncodingType 存在

  • EDI.DestinationPartyId 存在

    当业务流程收到消息时,它会尝试使用参与方名称和编码类型为此消息查找匹配的批设置。 属性EDI.DestinationPartyID用于确定参与方名称,然后业务流程查找与 PartyName>+EncodingType>+<Default 匹配的<批名称。 例如,如果参与方名称为 Contoso,值为 EDI.EncodingType X12,则业务流程将查找名为 ContosoX12Default 的批处理。

    如果找到匹配的批配置,则会将此消息以及下列属性放回消息框:

  • EDI.ToBeBatched = True

  • EDI.ToBeRouted = False

  • EDI.BatchId = 匹配批的批 ID

    然后,批处理业务流程将处理该消息

注意

如果没有找到匹配的批,则会出现以下情况:

  • 不会将此消息发送给 BatchSuspend 业务流程。
    • UpgradeBatching 业务流程实例和消息将被挂起。
    • 事件日志中将记录一个错误,说明找不到批。

BatchSuspend 业务流程

BatchSuspend 业务流程处理批处理业务流程收到的无效消息。 需要 BatchSuspend 业务流程的原因是:无法在不停止执行业务流程实例的情况下直接挂起业务流程(在本示例中为批处理业务流程)中的消息。

当批处理业务流程实例收到消息时,会尝试验证该消息。 如果消息未通过验证,批处理业务流程将创建 BatchSuspend 业务流程的实例,并将 EDI.BatchItemValidationFailure 上下文属性设置为 True。 BatchSuspend 业务流程订阅该上下文属性设置为 True 的所有消息。 在将无效事务集路由到 BatchSuspend 业务流程后,BatchSuspend 业务流程实例将挂起。

此 BatchSuspend 业务流程将提供遇到的第一个错误的详细错误信息。

可以使用筛选器中的 属性创建自定义业务流程来处理批处理业务流程 EDI.BatchElementValidationFailure 验证失败的事务集。

EDI 发送管道

从批处理业务流程收到批交换后,EDI 发送管道将执行下列操作:

  • 对于 X12 编码的交换,发送管道会向信封应用下列属性:

    • ISA2:授权信息

    • ISA4:安全信息

    • ISA9:交换日期

    • ISA10:交换时间

    • ISA13:交换控制编号

    • GS4:日期

    • GS5:时间

    • GS6:组控制编号

    • ST2:事务集控制编号

  • 对于 EDIFACT 编码的交换,发送管道会向信封应用下列属性:

    • UNB4.1:日期

    • UNB4.2:时间

    • UNB5:交换控制参考

    • UNB6.1:收件人引用密码

    • UNG4.1:日期

    • UNG4.2:时间

    • UNG5:功能组参考

    • UNG8:应用程序密码

  • 通过关联适配器传送消息

另请参阅

对传出 EDI 消息进行批处理