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。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLyV2YhB3cvw1coRXYwNWaw91dfB3LcRHb1FmZlR2LcNXZtVGa09CXxYjM19CXl9CXt92Yu8GdjFTNuc2bsJ2Lc9CX6MHc0RHaiojIsJye.gif)
便箋
對于一個傳入 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 編碼消息的上下文。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLyV2YhB3cvw1coRXYwNWaw91dfB3LcRHb1FmZlR2LcNXZtVGa09CXxYjM19CXl9CXt92Yu8GdjFTNuc2bsJ2Lc9CX6MHc0RHaiojIsJye.gif)
上述各段将被寫入到上下文中,而不是更新。但是,您可以使用消息收集示例将這些段附加到事務集中。您還可以采用附加示例的代碼将其添加到自定義管道元件中。有關詳細資訊,請參閱消息收集示例(BizTalk Server 示例)。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLyV2YhB3cvw1coRXYwNWaw91dfB3LcRHb1FmZlR2LcNXZtVGa09CXxYjM19CXl9CXt92Yu8GdjFTNuc2bsJ2Lc9CX6MHc0RHaiojIsJye.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 交換的預設值是 UTF8,UNB1.1 字段決定該字元集。
動态發現分隔符
當 BizTalk Server 接收 EDI 交換時,沒有任何協定屬性訓示應在交換中使用哪些分隔符。EDI 拆裝器而是在運作時發現應使用哪些分隔符(對于 X12 或 EDIFACT)。
對于 X12 消息,EDI 拆裝器使用來自交換内部的下列字元:
分隔符
字元
資料元素分隔符
ISA 的第 4 個字元
元件元素分隔符
ISA16
段分隔符
ISA 的第 106 個字元
段終止符字尾
ISA 段和 GS 段之間的字元
值:無、CR、LF 或 CRLF
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLyV2YhB3cvw1coRXYwNWaw91dfB3LcRHb1FmZlR2LcNXZtVGa09CXxYjM19CXl9CXt92Yu8GdjFTNuc2bsJ2Lc9CX6MHc0RHaiojIsJye.gif)
分隔符隻能采用上述值。
重複分隔符或标準辨別符
(取決于雙向協定頁籤的“信封”頁上的“ISA11 用法”協定屬生)
ISA11
對于 EDIFACT 交換,EDI 拆裝器将檢查在交換中定義分隔符的 UNA 段。如果交換沒有 UNA 段(可選),拆裝器将使用在管道元件屬性中定義的預設值。
UNA 的字元
第 4 個字元
第 5 個字元
十進制符号
第 6 個字元
轉義符
第 7 個字元
重複字元
第 8 個字元
第 9 個字元
段分隔符字尾
UNA 段和 UNB 段之間的字元
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLyV2YhB3cvw1coRXYwNWaw91dfB3LcRHb1FmZlR2LcNXZtVGa09CXxYjM19CXl9CXt92Yu8GdjFTNuc2bsJ2Lc9CX6MHc0RHaiojIsJye.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 協定)
擴充驗證
允許出現前導和尾随零及空格
建立空 XML 标記(如果尾部分隔符允許)
雙向協定頁籤中“事務集設定”下的“本地主機設定”頁(針對 X12 和 EDIFACT 協定)
入站批處理選項
雙向協定頁籤中的“本地主機設定”頁(“交換設定”下)(針對 X12 和 EDIFACT 協定)
預設 EDIFACT 分隔符
-
屏蔽安全/授權/密碼資訊
将隐式小數格式 Nn 轉換為十進制數值
雙向協定頁籤中“事務集設定”下的“本地主機設定”頁(針對 X12 協定)
将确認路由到請求-響應接收端口的發送管道
雙向協定頁籤中“交換設定”下的“本地主機設定”頁(“接收方設定”部分)(針對 X12 和 EDIFACT 協定)
X12 字元集
X12 交換信封生成
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLyV2YhB3cvw1coRXYwNWaw91dfB3LcRHb1FmZlR2LcNXZtVGa09CXxYjM19CXl9CXt92Yu8GdjFTNuc2bsJ2Lc9CX6MHc0RHaiojIsJye.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>