EDI 拆装器的工作方式

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

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

  • 验证信封。

  • 分解交换。

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

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

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

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

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

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

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

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

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

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

  • 对于 X12 编码的未批处理消息,从信封升级以下属性:ISA06、ISA08、ISA15;GS01、GS02、GS03、GS08;ST03 和 ST01。

    注意

    对于传入的 HIPAA 837 交换,BizTalk Server支持三种 HIPAA 837 架构:Claim-Dental_837D、Claim-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.1、UNB2.3、UNB3.1、UNB11;UNG1、UNG2.1、UNG3.1;UNH2.1、UNH2.2、UNH2.3.

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

    注意

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

    注意

    升级的 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 交换的默认值是 UTF8,UNB1.1 字段决定该字符集。

动态发现分隔符

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

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

Separator 字符
数据元素分隔符 ISA 的第 4 个字符
组件元素分隔符 ISA16
段分隔符 ISA 的第 106 个字符
段终止符后缀 ISA 段和 GS 段之间的字符

值: None、CR、LF 或 CRLF 注意: 分隔符只能采用上述值。
重复分隔符或标准标识符

(,具体取决于双向协议选项卡“ 信封 ”页上的“ISA11 用法”协议属性)
ISA11

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

Separator UNA 的字符
组件元素分隔符 第 4
数据元素分隔符 第 5 个字符
十进制符号 第 6 个字符
释放字符 第 7 个字符
重复字符 第 8 个字符
段分隔符 第 9 个字符
段分隔符后缀 UNA 段和 UNB 段之间的字符

值: 无、CR、LF 或 CRLF 注意: 分隔符只能采用上述值。

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 交换信封生成 注意: 此设置仅用于验证为协议属性输入的值。 用于运行时处理的 X12 字符集在管道属性中选择。 有关详细信息,请参阅 EDI 字符集

使用 HIPAA 触发器字段

EDI 段通常包含修改段含义的限定符值。 例如,N1 段可包含一个限定元素“BT”,表示“帐单收件人名字”,或可能包含一个限定元素“ST”,表示“收货方名字”。 通常,由业务逻辑决定如何解释这些字段,反汇编程序会将 N1 段的所有实例解析为相同的 XML 记录名称;但是,BizTalk Server附带的 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>

另请参阅

BizTalk Server 如何接收 EDI 消息