天天看點

EDI 解決方案之•EDI 消息傳遞•EDI 消息結構

EDI 消息結構

EDI 消息由信封和一系列分層結構元素組成。信封包含一組頭部和尾部,每組都描述并包含一個結構元素。這些結構元素如下所示:

EDI 消息的層次結構允許對事務集/消息群組進行批處理。即使一個交換隻包含一個事務集/消息和一個組,該交換也具有與批處理時完全相同的基本結構元素,不同的是,它不會有多個事務集/消息或組元素。

EDI 的頭部和尾部

EDI 交換的各部分由标頭和尾部分隔,而标頭和尾部必須遵循 X12 或 EDIFACT 标準。交換控制标頭和尾部隻出現一次;功能組和事務集标頭和尾部可重複出現,前提是事務叢集組在交換内是按批處理的。每個标頭和尾部均由一系列資料元素組成,這些元素包含有關标頭和尾部所含内容的資訊。

X12 和 EDIFACT 的标頭和尾部很相似。主要差別在于,在 EDIFACT 中,交換中使用的分隔符是在 UNA 服務字元串建議标頭中定義的。而在 X12 編碼中,分隔符是在 ISA 交換控制标頭中定義的。

交換控制和功能組标頭和尾部表示為信封段。當 BizTalk Server 将傳入交換分割成事務集時,它将這些信封段另存為上下文屬性。對路由非常有用的主要信封屬性可作為單獨的屬性使用。當保留交換時,不會出現這種情況,此時信封資料屬于消息自身的一部分。

當 BizTalk Server 生成傳出消息時,它根據貿易合作夥伴協定來确定标頭和尾部,或者在未确定任何參與方時根據全局協定确定。

标頭字段和尾部字段,以及用于在交換中分隔它們的分隔符均在兩個參與方之間的協定中進行定義。按照對協定的規定,切勿在交換、組或事務集的任何頭字段或尾字段的定義中使用分隔符。如果使用了這樣的分隔符,則在作為發送方的 BizTalk Server 的 EDI 組裝器中或在接收方的拆裝器中将無法處理交換。如果交換為出站批,它在 EDI 組裝器中将失敗,因為組裝器會根據頭控制(服務)架構驗證信封。如果交換未進行批處理,EDI 組裝器會将其序列化,但交換在接收協定的拆裝器中将無法處理。

X12 的标頭和尾部

X12 編碼消息的标頭和尾部如下所示:

如果 ISA 标頭後面緊跟 IEA 尾部,則交換為空。如果事務集存在,則 GS 标頭和 GE 尾部必須存在,否則它們将受條件限制。

在 X12 編碼的消息中,ISA 交換控制标頭字段是固定長度。對于某些字段,可以輸入小于字段固定長度的值。如果這樣做,交換必須包含尾部空格(對于字元串字段)或前導零(對于數字字段),以便每個字段都具有所需長度。當建立出站交換時,BizTalk Server 将輸入尾部空格或前導零,以便建立長度正确的交換控制标頭。GS 組标頭字段和 ST 事務集标頭字段的長度不固定。

在 X12 編碼中,功能安全标頭、功能保證标頭、功能安全值段和功能安全尾部段均超出 BizTalk Server EDI 和 AS2 的範圍。如果收到具有這些段的交換,則會挂起交換并顯示錯誤日志,訓示無法識别這些段。

ST01 字段是事務集 ID 代碼;ST02 字段是事務集控制編号。ST03 字段是架構版本辨別符。SE01 字段訓示事務集中包含的段數;SE02 字段與 ST02 字段(事務集控制編号)相同。當解析傳入消息時,BizTalk Server 将驗證事務集中的段數是否與 SE01 字段的值相對應。當生成傳出消息時,BizTalk Server 會将 SE01 字段設定為事務集中的正确段數。

要序列化到傳出 EDI 交換中的 XML 事務集應當具有事務集标頭和尾部。但是,如果沒有事務集标頭或尾部,EDI 組裝器将處理相應消息。X12 和 EDIFACT 架構中的事務集标頭和尾部段對于 XML 事務集而言是可選的。如果事務沒有标頭或尾部,則 EDISend 或 AS2EDISend 發送管道中的 EDI 組裝器将會向其添加事務集标頭和尾部值。這些值将基于映射或計算。EDI 組裝器将會為交換 XML(保留批)、批處理的事務集 XML 和事務集 XML 執行此操作。有關詳細資訊,請參閱X12 Transaction SetHeader and Trailer Segments或EDIFACT TransactionSet Header and Trailer Segments。

EDIFACT 的标頭和尾部

EDIFACT 編碼消息的标頭和尾部如下所示:

無需 UNA 标頭。但 UNB 标頭是必需的。如果 UNA 标頭存在,則其中将包含要在處理傳入消息時使用的分隔符,否則将使用為 EfactDelimiters 管道屬性定義的分隔符。

如果 UNB 标頭後面緊跟 UNZ 尾部,則交換為空。如果 UNG 标頭後面緊跟 UNE 尾部,則組為空。UNG 标頭和 UNE 尾部對是條件元素,不一定必須出現在消息中。

EDI 交換結構元素

交換是 EDI 消息的最進階别的結構元素。它包含由兩個合作夥伴交換的一個或多個組的集合。交換的目标必須是一個貿易合作夥伴。交換可能包含一種或多種類型的事務集/消息。

使用交換時,交換自身以及其中的組和事務集/消息由标頭定義。段、資料元素和子元素由分隔符分隔。每個分隔符都有一個預設值,但可以為參與方定義其他字元。在 EDIFACT 交換中,在交換中用作分隔符的所選字元是在單獨的 UNA 交換标頭中定義的。而在 X12 交換中,分隔符是在 ISA 交換标頭中定義的。請注意,在 X12 中,資料元素分隔符是位于第四個字元位置的字元,資料段終止符是位于最後一個字元位置的字元。其他 X12 分隔符和全部 EDIFACT 分隔符由字段定義,例如 X12 元件分隔符由 ISA16 字段定義,EDIFACT 資料元素分隔符由 UNA2 字段定義。有關詳細資訊,請參閱UNA Segment Definition Page (EDI Properties)或ISA Segment Definition Page (EDI Properties)。

EDI 組結構元素

組包含一個或多個事務集。一個 EDIFACT 組必須包含同一類型的事務集。一個 X12 組可能包含類似類型的事務集(基于事務集 - 組 (GS01-ST01) 映射)或相同類型的事務集。下表列出了在單一組 (GS01) 可能會一起發生的類似 X12 事務集 (ST01)。

GS01

ST01

CF

844

849

DX

894

895

FR

821

827

GC

920

924

925

926

HC

837

837_D

837_I

837_P

IA

110

980

IO

310

312

ME

198

200

201

245

261

262

263

833

872

MG

203

206

259

260

264

266

OG

875

876

PK

196

839

QG

878

879

888

889

896

QO

313

315

RO

300

301

303

RQ

836

840

RS

869

870

SL

135

139

SO

302

311

317

319

322

323

324

325

326

361

TO

197

199

265

485

486

TP

460

463

466

468

490

492

494

WA

140

141

142

143

HIPAA 5010 組還允許單一組記憶體在不同版本的事務集。

如果在處理事務集時遇到異常,将使用 EDI 參與方屬性來确定是挂起整個交換還是僅挂起失敗的事務集。

一個組必須以功能組标頭(X12 中的 GS 或 EDIFACT 中的 UNG),且必須以功能組尾部(X12 中的 GE 或 EDIFACT 中的 UNE)結束。組标頭包含發送方和接收方代碼、日期和時間、與标頭和尾部比對的控制編号、可能包括在功能組内的用于定義事務集的集合的組辨別符以及其他資訊。組尾部具有訓示組内事務集數目的元素。

組在 EDIFACT 交換内是可選的。即使不存在組(不存在 UNG 段),一個 EDIFACT 交換也可包含多個事務集。在此情況下,所有事務集都必須具有同一類型,因為一個組中的事務集的類型必須相同。例如,APERAK 和 ORDERS 事務集不能同時出現在一個組或不具有多個組的交換中。

組在 X12 交換内是必需的。

交換包括一個用于定義 EDI 消息的信封。該信封必須以交換标頭(X12 中的 ISA 或 EDIFACT 中的 UNA/UNB)開頭,且必須以交換尾部 (IEA/UNZ) 結束。交換标頭包括定義以下各項的元素:發送方和接收方、日期和時間、版本号、與标頭和尾部比對的控制編号以及其他資訊。

ISA12 和 GS8 字段(對于 X12 交換)和 UNH2 字段(對于 EDIFACT 交換)包含發現架構所必需的版本資訊。

交換尾部具有訓示交換中的組數的元素。

EDI 事務集/消息結構元素

事務集(在 X12 編碼中)或消息(在 EDIFACT 編碼中)包含構成消息資料的段。事務集由标頭、資料段集合和尾部組成。事務集中提供了處理事務所需的所有詳細資訊。

事務集必須以 ST 事務集标頭(在 X12 中)或 UNH 消息标頭(在 EDIFACT 中)開始,且必須以 SE 事務集尾部(在 X12 中)或 UNT 消息尾部(在 EDIFACT 中)結束。尾部提供包括标頭和尾部段在内的資料段的計數。

事務集可以包含一個或多個循環,這些循環是重複相關段的集合所必需的。

EDI 段結構元素

段包含一個或多個資料元素,是消息中的中間資訊機關。每個段均以一個由三個字元組成的資料段辨別符開頭,以段終止符(預設情況下為撇号 ('))結尾。段内的資料元素由資料元素分隔符分隔。預設情況下,資料元素分隔符為加号 (+)。段可分為兩類:必需段和可選段。傳出交換的分隔符可在兩貿易合作夥伴間的協定中設定,也可設定為後備貿易合作夥伴協定的一部分。

嵌套

段可以按一種稱為“嵌套”的分層關系進行分組。有兩種不同類型的嵌套:顯式和隐式。在任何一個交換内,隻能使用一種類型的嵌套。

顯式嵌套顯式訓示循環是嵌套的。使用顯式嵌套時,段标記中的第一個元件資料元素将為段代碼。段代碼後将為表示段的級别和重複發生率的條件元件資料元素。用于此目的的元件資料元素的數量由段在消息結構中出現的層級決定。如果段将出現在級别一,則會使用緊跟在段代碼之後的元件資料元素。如果段将出現在級别二,則會使用緊跟在段代碼之後的元件資料元素和下一個元件資料元素。如果段将出現在級别三,則會使用段代碼之後的三個元件資料元素。管道無法執行将資料與層次結構比較的結構驗證。

在隐式嵌套中,将嚴格遵循在消息結構中指定的段的順序。段之間的嵌套關系是隐式的,處理時不需要進一步的訓示。

循環

在一個事務集内,一個或多個段可以“循環”的形式重複。有兩種不同類型的循環:未綁定和綁定。

未綁定循環

未綁定循環不具有标記循環的開頭和結尾的唯一辨別段。未綁定循環按照計數進行重複。如果計數沒有值,則循環将重複兩次。循環中的每個段隻能按指定的順序出現一次。

未綁定循環以唯一的第一個資料元素開頭。在每次出現中,第一個元素可出現一次且僅出現一次。未綁定循環可在循環内進行嵌套;如果在循環内進行嵌套,則内部未綁定循環不能在與任何外部循環相同的序号位置處開始,也不能以與任何外部循環相同的段 ID 開頭。嵌套循環包含的段不能同時為同一嵌套結構中任何外部循環的起始段。

綁定循環

綁定循環以預定義的段 LS(循環開頭)開頭,以預定義的段 LE(循環結束)結束。LS 段的可選性必須與循環中第一個段的可選性比對。一個綁定循環可以包含另一個綁定循環。

便箋

X12 中的綁定循環與 EDIFACT 中的顯式循環等價。

在循環中使用綁定是為了解決不明确的問題。LS/LE 段上的要求訓示符與循環的第一個段的要求訓示符相比對。綁定會放松對某些經常重複段的用法的結構限制。綁定段對起始段 ID 沒有限制。這樣可使同一段在作為一個綁定循環的開頭的同時在該循環之外使用,如下例所示:

複制

AALSBBCCLEBB

允許存在從屬循環(循環内的循環)。如果綁定循環在循環内進行嵌套,則内部循環不能在與任何外部循環相同的序号位置處開始。内部綁定循環必須在與之相鄰的外部循環之前結束。

事務集内的每個綁定循環必須具有一個唯一定義的 <loop_id> 值,該值由一到四個大寫字母或數字組成。建議對應的 LS 和 LE 段也應包含同一唯一的 <loop_id> 值。<loop_id> 資料元素将作為“正常”資料元素進行處理并驗證其資料類型、最小/最大長度、可選性等等。不會執行跨段(跨越 LS 和 LE)驗證。BizTalk Server 将通過存在且僅存在 LS 和 LE 段來驗證模糊解析。在資料元素規則發生沖突的情況下,将接受存在錯誤的事務集,且 BizTalk Server 在确認中傳回 AK501=E 和 AK2/AK3 的相應評估。

還要求強制 LS/LE 段配對。在不比對的情況下,由于存在内在的模糊解析問題而拒絕事務集,且在事件檢視器和 997 确認中傳回 AK501 = E 和 AK502 = 5。如果缺少 LS/LE 段之一或兩者,而事務集是明确的,将接受存在錯誤的事務集并傳回 AK501=E 和 AK502 = 5。

LS/LE 對可以是可選的,也可以是必需的。但是,除非該對包含在可重複的父循環中,否則該對永不會是可重複的。在任一種情況下,LS/LE 對的 MaxOccurs 可為 1,但不能大于 1。在架構驗證中,這是強制要求。

EDI 拆裝器和 EDI 組裝器處理 LS 和 LE 段。在解析過程中,拆裝器為 LS 和 LE 段建立 XML 節點,并驗證這兩個段。在序列化過程中,組裝器從 XML 節點建立 LS 和 LE 段,并驗證這兩個段。如果缺少所需的 LS 或 LE 段,則會挂起/拒絕 AK501 = E 和 AK502 = 5 的事務集。如果存在 LS/LE 段而沒有對應的資料元素,且啟用了 EDI 驗證,則會接受存在錯誤的事務集并在事件檢視器和 997 确認中報告 AK501 = E 和 AK502 = 5。

EDI 資料元素:結構元素

資料元素是消息中的基本資料單元。資料元素由資料元素分隔符分隔,預設情況下 X12 是星号,EDIFACT 是加号。資料元素的可行性定義為:必需、可選或條件。

資料元素可以是簡單型,也可以是複合型。簡單資料元素為數值型,它們是最低級别的資料。複合資料元素是一串子元素,這些子元素是由複合元素分隔符分隔的簡單資料元素。預設狀态下,複合元素分隔符對于 x12 和 EDIFACT 是冒号。

對于 EDIFACT 編碼的消息,如果經由 EDI 發送的資料需要發送任何定義用作分隔符的字元,則需要使用轉義符來指明後面的字元不是分隔符,而是資料的一部分。預設情況下,轉義符為問号 (?)。

X12 不支援轉義符。如果遇到作為 X12 編碼的交換資料一部分的分隔符,則交換将在接收方或發送方挂起。