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> |