组装批量 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 的事务集,然后创建这些事务集的副本,确保每个批处理 ID 都有一个 EDI.BatchIds 的副本。 路由编排集 EDI.ToBeBatched = TrueEDI.BatchId 被设置为事务集每个副本的匹配批处理配置所用的批处理 ID。 这可确保事务集将被批处理编排选取以进行批处理。

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

    • EDI.ToBeBatched = True 和 EDI.BatchId = 与此批处理编排实例关联的批次的批处理 ID。

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

      当 EDIReceive 管道(使用 BatchMarker 管道组件)处理传入消息时,批处理业务流程将仅批处理 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 并终止。 通过单击“协议属性”对话框的单向协议选项卡的“批处理配置”页上的“批处理配置”页上的“停止”按钮,发送此控制消息。

    注释

    如果编排到达协议属性对话框的单向协议选项卡的批处理配置页面的终止部分中为结束属性指定的时间,则编排也会被终止。

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

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

    当您启动批处理编排时,将执行以下步骤:

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

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

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

    注释

    这样生成控件消息可确保业务流程不能由无效的控制消息启动。

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

Batch 组件

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

  • EDI 接收管道中的 BatchMarkerReceivePipelineComponent

  • 路由编排

  • 批处理编排

  • 升级批处理业务流程

  • BatchSuspend 业务流程

  • EDI 发送管道

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

注释

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

批处理标记接收管线组件

EDI 接收管道中的 BatchMarkerReceivePipelineComponent 使批处理协调能够接收待批处理的消息。 此管道组件在 EDI 接收管道中的反汇编程序后应用。 该组件评估协议属性对话框单向协议选项卡的“批处理配置”页的筛选器条件集,并使用以下上下文属性标记事务集,以便路由和批处理业务流程进行处理

  • 如果单个参与方订阅要批处理的消息,它将提升 ToBeBatched = True,并且 BatchId 将设置为匹配批处理配置的批处理 ID 的值。 这样就可以通过批处理编排进行提取。

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

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

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

    如果使用自定义管道,而不是 EDIReceive 管道,则可以在自定义管道中使用 BatchMarker 组件。 如果您不使用 EDIReceive 管道,并且正在从业务流程发布消息,则必须在您的一个组件中将 ToBeBatched = TrueBatchID 提升为一个活动批次的标识符。

路由编排

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

  • EDI.BatchID,这个 ID 被设置为该消息所指向的批处理的 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 = True BatchElementSuspend 业务流程订阅已为其升级此属性的任何事务集。 此编排将为批处理交互中遇到的第一个错误提供详细的错误信息。

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

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

  • 设置交换的上下文属性 ToBeBatched = False,同时设置上下文属性 DestinationPartyName = %PartyName%,其中 %PartyName% 是消息所针对的参与方的名称。

    注释

    如果发送端口订阅属性 EDI.ToBeBatched = False 或同时订阅 EDI。DestinationPartyName = %PartyName%,那么该发送端口可以选取批处理交换。 确保配置了发送端口的筛选器,以便发送端口仅选取其要选取的批处理交换。

    注释

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

  • 对于 X12 编码的交换,将以下属性应用于信封:

    • ISA6:交换发送方 ID

    • ISA8:交换接收器标识符

    • ISA15:使用情况指示器

    • ISA_Blob(写入上下文)

  • 对于 EDIFACT 编码的交换,将以下属性应用于信封:

    • UNB2.1:交换发送方 ID

    • UNB3.1:交换收件人 ID

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

    • UNB11:使用情况指示器

    • UNA_Blob(写入上下文)

    • UNB_Blob(写入上下文)

  • 将批处理交换传递到 MessageBox 供 EDI 发送管道取件。

UpgradeBatching 业务流程

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

在早期版本的 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 消息