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 或 EDIFACT> 命令空间中的控制架构(如适用于 997 确认的 X12_997_Root)。同时,还将升级 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 拆装器使用来自交换内部的下列字符:
分隔符 | 字符 | ||
数据元素分隔符 | ISA 的第 4 个字符 | ||
组件元素分隔符 | ISA16 | ||
段分隔符 | ISA 的第 106 个字符 | ||
段终止符后缀 | ISA 段和 GS 段之间的字符 值:无、CR、LF 或 CRLF
| ||
重复分隔符或标准标识符 (取决于双向协议选项卡的“信封”页上的“ISA11 用法”协议属生) | ISA11 |
对于 EDIFACT 交换,EDI 拆装器将检查在交换中定义分隔符的 UNA 段。如果交换没有 UNA 段(可选),拆装器将使用在管道组件属性中定义的默认值。
分隔符 | 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 交换信封生成
|
使用 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> |
转载于:https://blog.51cto.com/6060579/1865035