EDI 解譯器如何運作
BizTalk Server會在 EDI 接收管線 Microsoft.BizTalk.DefaultPipelines.EDIReceivePipeline
() 中,對接收的 EDI 編碼交換執行大部分處理。 此管線包含 EDI 解譯器管線元件,可執行下列處理:
將單一訊息中的多個交換分割為不同的交換 (若接收位置的 "DetectMID" 管線屬性設定為 True)。 EDI 解譯器執行此工作的方式是搜尋交換控制標頭 (ISA、UNA 或 UNB),即使已經找到交換控制結尾 (IEA 或 UNZ) 也一樣。
驗證信封。
解譯交換。
處理 HIPAA 交換的觸發程序欄位。
適用時,驗證 EDI 和夥伴特定的屬性。 這包含 EDI 結構描述驗證、X-12 編碼訊息的欄位交互驗證 (若已設定)、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 架構:宣告Dental_837D、宣告Institutional_837I和宣告Professional_837P。 每個專案的 ST01 都是 「837」。這三個架構在 5010 版中具有 GS08 的不同值:837I 的 「005010X223A1」、837D 為 「005010X224A1」 和 「005010X2222」。 在 4010 版中,架構的 GS08 值不同:837I 為 「004010X096A1」、837D 為 「004010X097A1」 和 「004010X098A1」。
針對 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 文件結構描述剖析交換內的交易集/訊息。
若透過 HTTP/HTTPS 傳輸接收到 EDIINT/AS2 編碼的訊息,EDI 解譯器會檢查 BTS.MessageDestination 內容屬性。 若該屬性設定為 SuspendQueue,表示 AS2 處理中發生錯誤且已擱置訊息,EDI 解譯器會扮演通過管線元件的角色,並擱置傳送至 MessageBox 的訊息。
剖析 EDIFACT 交換時,EDI 接收管線會移除用來逸出字元的釋放指示符號。 EDI 驗證並未包含釋放指示符號。 EDI 接收管線計算長度限制時,並未包含釋放指示符號。
字元集
若為 X12 交換,[管線元件屬性] 會決定 EDI 解譯器處理交換時將使用的字元集。 可能是「基本」、「擴充的」或 UTF8/Unicode。 預設值是 UTF8。若為 EDIFACT 交換,UNB1.1 欄位會決定字元集。
動態分隔符號探索
當BizTalk Server收到 EDI 交換時,沒有合約屬性工作表示交換中的分隔符號應該是什麼。 反而是 EDI 解譯器會在執行階段探索分隔符號是哪些 (針對 X12 或 EDIFACT)。
若為 X12 訊息,EDI 解譯器會使用交換內的下列字元:
Separator | 字元 |
---|---|
資料元素分隔符號 | ISA 第 4 個字元 |
元件元素分隔符號 | ISA16 |
區段分隔符號 | ISA 第 106 個字元 |
區段結束字元尾碼 | ISA 區段與 GS 區段之間的字元 值: 無、CR、LF 或 CRLF 注意: 分隔符號只能接受上述值。 |
重複分隔符號或標準識別項 (取決於雙向合約索引標籤的 [信封 ] 頁面上的 [ISA11 使用量] 合約屬性) |
ISA11 |
若為 EDIFACT 交換,EDI 解譯器會檢查定義交換內之分隔符號的 UNA 區段。 若交換沒有 UNA 區段 (選擇性),解譯器會使用管線元件屬性內定義的預設值。
Separator | UNA 的字元 |
---|---|
元件元素分隔符號 | 第四 |
資料元素分隔符號 | 第 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 轉換為 10 進制數值 | X12 合約) 之雙向合約索引標籤中[交易集設定] 下的 [本機主機設定] 頁面 ( |
將通知的路由設定為要求回應接收埠上的傳送管線 | [本機主機設定 ] 頁面 (接收者的 [設定 ] 區段) 在 [雙向合約] 索引卷 標的 [ 雙向協定] 索引標籤下, (X12 和 EDIFACT 合約) |
X12 字元集 | X12 交換信封產生 附注: 此設定僅用於驗證為合約屬性輸入的值。 管線屬性內會選取用來進行執行階段處理的 X12 字元集。 如需詳細資訊,請參閱 EDI 字元集。 |
使用 HIPAA 觸發程序欄位
EDI 區段通常包含修飾區段意義的辨識符號。 例如,N1 區段可能包含 “BT” 辨識元素以表示「帳單收件人」,或可能包含 “ST” 辨識元素以表示「出貨收件人」。 一般而言,商務邏輯會決定如何解譯這些欄位,而反組譯程式會將 N1 區段的所有實例解析為相同的 XML 記錄名稱;不過,BIZTALK SERVER隨附的 HIPAA 架構包含批註,可讓 EDI 反組譯程式根據限定值的存在建立唯一的 XML 記錄, (請參閱HIPAA 架構觸發程式欄位注釋) 。
EDI 解譯器在收到 HIPAA 交易集時,若遇到含有觸發程序欄位的區段,便會使用觸發程序資訊來產生這個區段和觸發程序組合特有的 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> |