EDI 拆装器的工作方式

BizTalk Server 执行 EDI 接收管道 (Microsoft.BizTalk.DefaultPipelines.EDIReceivePipeline) 中接收的 EDI 编码交换的大多数处理。此管道包括用于执行下列处理的 EDI 拆装器管道组件:

  • 将单个消息中的多个交换拆分为单独的交换(条件是接收位置的“DetectMID”管道属性设置为 True)。EDI 拆装器执行此操作的方法是:即使在遇到交换控制尾部(IEA UNZ)之后,也仍将搜索交换控制标头(ISAUNA UNB)。

  • 验证信封。

  • 拆装交换。

  • 处理 HIPAA 交换的触发字段。

  • 根据需要验证 EDI 和特定于合作伙伴的属性。这包括 EDI 架构验证、X12 编码消息的跨字段验证(如果已配置)、EDI 结构验证和扩展架构验证(如果此架构是使用具有非 EDI 数据类型的节点自定义的)。有关详细信息,请参阅验证收到的 EDI 消息

  • 验证交换、组和事务集控制编号未重复(如果在协议属性对话框的双向协议选项卡的验证页(交换设置下方)中启用了这些检查)。根据以前收到的交换检查交换控制编号。根据交换中的其他组控制编号检查组控制编号。根据该组中的其他事务集控制编号检查事务集控制编号。如果发现重复项,状态报告将指示存在重复记录。

  • 为每个事务集生成一个 XML 文档。在每个 XML 文件中,升级 BTS.MessageType 上下文属性,将其设置为带有命名空间的架构名称。

  • 如果入站批处理选项属性设置为此两个保留交换值之一,则将整个交换转换为 XML。此属性可以从协议属性对话框的双向协议选项卡的交换设置下的本地主机设置页进行设置。接收管道将升级     ReuseEnvelope 属性以将交换标识为保留。

  • 生成技术确认和/或功能确认(如果已配置)。这包括对确认进行批处理(如果已配置)。升级 BTS.MessageType 上下文属性,将其设置为 http://schemas.microsoft.com/EDI/<X12 EDIFACT> 命令空间中的控制架构(如适用于 997 确认的     X12_997_Root)。同时,还将升级     EDI.DestinationPartyName 上下文属性,此属性可确保提取确认以便发送。有关详细信息,请参阅发送 EDI 确认

  • 执行 HIPAA 276/277(仅版本 5010 834835(仅版本 4010)和 837 文档拆分(如果适用)。

  • 将属性升级或写入到消息上下文(请参阅下一部分)。

将属性升级或写入到上下文

EDI 拆装器处理收到的消息时,该拆装器会将下列属性升级或写入到消息上下文:

  • 对于 X12 编码的未进行批处理的消息,请从信封升级下列属性:ISA06ISA08ISA15GS01GS02GS03GS08ST03 ST01

                                                                spacer.gif便笺

对于一个传入 HIPAA 837 交换,BizTalk Server 支持以下三种 HIPAA 837 架构:Claim-Dental_837DClaim-Institutional_837I Claim-Professional_837P。其中每个架构的 ST01 都是“837”。在版本 5010 中,这三个架构对于 GS08 有不同的值:“005010X223A1”(837I)“005010X224A1”(837D) “005010X222”(837P)。在版本 4010 中,这些架构对于 GS08 有不同的值:“004010X096A1”(837I)“004010X097A1”(837D) “004010X098A1”(837P)

  • 对于 EDIFACT 编码的未进行批处理的消息,请从信封升级下列属性:UNB2.1UNB2.3UNB3.1UNB11UNG1UNG2.1UNG3.1UNH2.1UNH2.2 UNH2.3

  • 如果拆分批交换,请将 ISA_Segment     GS_Segment 写入到 X12 编码消息的上下文,或者将 UNA_SegmentUNB_Segment     UNG_Segment 写入到 EDIFACT 编码消息的上下文。

spacer.gif便笺

上述各段将被写入到上下文中,而不是升级。但是,您可以使用消息收集示例将这些段附加到事务集中。您还可以采用附加示例的代码将其添加到自定义管道组件中。有关详细信息,请参阅消息收集示例(BizTalk Server  示例)

spacer.gif便笺

升级的 ISA_Segment 属性包含安全/授权信息(ISA02 包含授权信息,ISA04 包含安全信息),这可能导致信息泄漏。您可以使用上下文属性中屏蔽安全/授权/密码信息属性(位于双向协议属性的交换设置本地主机设置页)来使用“#”符号替换 ISA02 ISA04 字段中的每个字符。这是一个单向过程:“#”字符不能转换为实际的字符。

  • 对于 X12     EDIFACT 编码的消息,升级     ReuseEnvelope,该属性指示拆分或保留批交换。

  • 如果批交换得以保留,请升级下列属性:

    • InboundTransportatLocation

    • InboundTransportType

    • ISA05

    • ISA07

    • ISA06

    • ISA08

    • ISA15

    • LastInterchangeMessage      = {True|False}

    • MessageType

    • ReceivePortID

    • ReceivePortName

    • ReuseEnvelope

解析信封

EDI 接收管道使用标头控制架构解析收到的 EDI 消息的信封,并使用 EDI 文档架构解析交换中的事务集/消息。

如果 EDIINT/AS2 编码的消息是通过 HTTP/HTTPS 传输接收的,EDI 拆装器将检查上下文属性 BTS.MessageDestination。如果该属性设置为 SuspendQueue,则表示在 AS2 处理中发生错误,该消息将被挂起,EDI 拆装器将充当直通管道组件,并将该消息挂起到 MessageBox

在解析 EDIFACT 交换期间,EDI 接收管道将删除用于转义字符的转义指示器。转义指示器不包括在 EDI 验证中。EDI 接收管道在计算长度限制时不包括转义指示器。

字符集

对于 X12 交换,管道组件属性确定在处理交换时 EDI 拆装器将使用的字符集。字符集可以是基本扩展“UTF8/Unicode”EDIFACT 交换的默认值是 UTF8UNB1.1 字段决定该字符集。

动态发现分隔符

BizTalk Server 接收 EDI 交换时,没有任何协议属性指示应在交换中使用哪些分隔符。EDI 拆装器而是在运行时发现应使用哪些分隔符(对于 X12 EDIFACT)。

对于 X12 消息,EDI 拆装器使用来自交换内部的下列字符:

 

分隔符

字符

数据元素分隔符

ISA 的第 4 个字符

组件元素分隔符

ISA16

段分隔符

ISA 的第 106 个字符

段终止符后缀

ISA 段和 GS 段之间的字符

值:无、CRLF CRLF

spacer.gif便笺

分隔符只能采用上述值。

重复分隔符或标准标识符

(取决于双向协议选项卡的信封页上的“ISA11 用法协议属生)

ISA11

对于 EDIFACT 交换,EDI 拆装器将检查在交换中定义分隔符的 UNA 段。如果交换没有 UNA 段(可选),拆装器将使用在管道组件属性中定义的默认值。

 

分隔符

UNA 的字符

组件元素分隔符

4 个字符

数据元素分隔符

5 个字符

十进制符号

6 个字符

转义符

7 个字符

重复字符

8 个字符

段分隔符

9 个字符

段分隔符后缀

UNA 段和 UNB 段之间的字符

值:无、CRLF CRLF

spacer.gif便笺

分隔符只能采用上述值。

UNA 字符串是可选的。如果存在,它定义文件的所有分隔符。如果不存在,EDI 拆装器将使用 EfactDelimiters 管道组件属性确定分隔符。有关详细信息,请参阅配置 EDI 管道属性

发布错误

如果 EDI 拆装器遇到 EDI 处理错误,BizTalk Server 将在事件查看器中发布以下两个错误(如果已启用此发布功能):

  • BizTalk Server 挂起消息时记录的错误。该错误是与 BizTalk Server 处理相关的必需错误。

  • BizTalk Server EDI 记录的报告事务集中的问题的错误。该错误特定于 EDI

使用协议属性

如果 EDI 拆装器可标识协议,则使用协议属性(请参阅接收到的 EDI 消息的协议解析、架构发现和授权)。如果无法找到匹配协议,而且后备协议中的对应值也不可用,则将使用 Visual Studio 属性窗口中的 EDI 拆装器属性集。但是,如果选择了验证失败时删除消息验证失败时保留消息,则需要在接收端口属性中进行验证,此时将不会出现以上后备机制。在这种情况下,必须配置协议;否则,交换将挂起。

EDI 拆装器使用协议属性时,需要设置下列协议属性:

 

属性

协议属性页

重复分隔符

双向协议选项卡中的信封页(交换设置下)

执行 EDI 数据类型验证

双向协议选项卡中事务集设置下的验证页(针对 X12 EDIFACT 协议)

扩展验证

双向协议选项卡中事务集设置下的验证页(针对 X12 EDIFACT 协议)

允许出现前导和尾随零及空格

双向协议选项卡中事务集设置下的验证页(针对 X12 EDIFACT 协议)

创建空 XML 标记(如果尾部分隔符允许)

双向协议选项卡中事务集设置下的本地主机设置页(针对 X12 EDIFACT 协议)

入站批处理选项

双向协议选项卡中的本地主机设置页(交换设置下)(针对 X12 EDIFACT 协议)

默认 EDIFACT 分隔符

-

屏蔽安全/授权/密码信息

双向协议选项卡中的本地主机设置页(交换设置下)(针对 X12 EDIFACT 协议)

将隐式小数格式 Nn 转换为十进制数值

双向协议选项卡中事务集设置下的本地主机设置页(针对 X12 协议)

将确认路由到请求-响应接收端口的发送管道

双向协议选项卡中交换设置下的本地主机设置页(接收方设置部分)(针对 X12 EDIFACT 协议)

X12 字符集

X12 交换信封生成

spacer.gif便笺

此设置仅用于验证为协议属性输入的值。用于运行时处理的 X12 字符集在管道属性中选择。有关详细信息,请参阅EDI 字符集

使用 HIPAA 触发器字段

EDI 段通常包含修改段含义的限定符值。例如,N1 段可包含一个限定元素“BT”,表示帐单收件人名字,或可能包含一个限定元素“ST”,表示收货方名字。通常,由业务逻辑来决定如何解释这些字段,拆装器会将 N1 段的所有实例解析到相同的 XML 记录名称;但是,随 BizTalk Server 2013 一同发售的 HIPAA 架构包含允许 EDI 拆装器基于是否存在限定值来创建唯一 XML 记录的批注(请参阅HIPAA 架构触发器字段批注)。

当收到一个 HIPAA 事务集时,如果 EDI 拆装器遇到一个包含触发器字段的段,它将使用触发器信息来生成一个特定于该段和触发器组合的 XML 记录。

下表显示了 N1 段是如何基于 N101 值转化成 XML 记录的:

 

N1

生成的 XML 数据

N1*PR*Contoso*XV*0000000~

复制

<ns0:TS835W1_1000A_Loop>

 <N1_PayerIdentification_TS835W1_1000A>

   <N101__EntityIdentifierCode>PR</N101__EntityIdentifierCode>  

   <N102__PayerName>Contoso</N102__PayerName>

   <N103__IdentificationCodeQualifier>XV</N103__IdentificationCodeQualifier>  

  <N104__PayerIdentifier>0000000</N104__PayerIdentifier>  

 </N1_PayerIdentification_TS835W1_1000A>

N1*PE*Fabrikam*FI*9999999~

复制

<TS835W1_1000B_Loop>  

 <N1_PayeeIdentification_TS835W1_1000B>  

  <N101__EntityIdentifierCode>PE</N101__EntityIdentifierCode>  

   <N102__PayeeName>Fabrikam</N102__PayeeName>

   <N103__IdentificationCodeQualifier>FI</N103__IdentificationCodeQualifier>  

   <N104__PayeeIdentificationCode>9999999</N104__PayeeIdentificationCode>  

 </N1_PayeeIdentification_TS835W1_1000B>