EDI 類型 (資料元素) 驗證
EDI 接收管線和 EDI 傳送管線,可以對交易集資料元素執行 EDI 驗證。 此驗證會針對來自或傳送至特定合作物件的所有訊息,透過該合作者的合約屬性,在 X12 或 EDIFACT 合約) 的 [交易集設定] 區段底下 (。 如果未在 [驗證] 頁面中選取EDI 類型驗證屬性,則不會執行本主題中所述的資料驗證。
在 [合約屬性] 對話方塊的 [雙向合約] 索引標籤的 [驗證] 頁面中選取[EDI 類型驗證]屬性,即可啟用傳入和傳出訊息的 EDI 類型驗證。 針對傳入和傳出訊息,預設會選取此屬性,以便預設啟用 EDI 驗證。
驗證檢查
EDI 接收管線或 EDI 傳送管線在執行 EDI 驗證時,會驗證下列項目:
由結構描述之 EDI 屬性所定義的資料型別
長度限制
空白資料元素和尾端分隔符號
注意
這項驗證不會檢查程式碼集合 (列舉) 或 Min Occurs 或 Max Occurs。
字元集
若要執行 EDI 資料元素驗證,EDI 接收和傳送管線會要求依下列方式來建立此字元集:
若為 EDIFACT,則會在 [合約屬性] 對話方塊或[EDIFACT 後援設定] 對話方塊的單向合約索引標籤的[字元集]頁面的[UNB1] 資料元素 UNB1中建立字元集, (如果尚未建立任何合約) 。
針對 KEDIFACT,字元會在 EDIFACT 之 [合約屬性] 對話方塊的單向合約索引標籤之Charset 和 Separators頁面的資料元素UNB1中建立。 UNB1.1元素的值必須設定為
KECA
。對於 X12,要在管線屬性中建立訊息的字元集。
注意
當 BizTalk 執行階段對訊息執行 EDI 驗證時,它會使用已在管線屬性中選取的 X12 字元集。 不過,驗證在 [ 合約屬性 ] 對話方塊頁面輸入的屬性,會使用該對話方塊的 Charset 和分隔符號 頁面中選取的字元集來執行。 在執行時間期間,管線會忽略 [合約屬性] 對話方塊的 X12 字元集屬性Charset 和分隔符號頁面的值。 如果這兩個設定與 (不同,亦即,[ 合約屬性 ] 對話方塊中的 [X12 字元集] 屬性會設定為 [擴充 ],而管線屬性中的 X12 字元屬性設定為 [基本 ]) ,則可能會產生訊息驗證錯誤。
資料型別驗證
對於 X12,結構描述中會標註下列 EDI 資料型別,應由接收管線或傳送管線中的解譯器/組合器元件進行驗證:Numeric、Decimal、Identifier、String、Date、Time、Binary 和 Composite。
對於 EDIFACT,結構描述中會標註下列 EDI 資料型別,應由接收管線或傳送管線中的解譯器/組合器元件進行驗證:Alphabetic、Numeric、Identifier、String 和 Composite。
長度限制
對於 X12 和 EDIFACT,元素或子元素都必須通過長度 (最小值和最大值) 需求的驗證。 長度定義為所使用的字元位置數目。 長度不包括正負號和小數點標記。
注意
如果是 X12_AN 字串資料型別,則會保留前置空格,而且允許任何區段中使用尾端空格以滿足最小長度需求。
對於 KECA,長度是解譯為位元組數目。 例如,如果長度定義為三,則元素或子元素可以包含三個單一位元組字元,或是一個雙位元組字元和一個單一位元組字元的組合。
空白資料元素和尾端分隔符號驗證
若為 X12,如果區段存在,則標示為強制的資料元素不能是實例中的空白。 若是複合資料元素,至少必須要有一個元件資料元素有設定值。
對於 EDIFACT,可以排除非值和條件式資料元素 (和子元件),不過分隔符號會加以保留。
尾端分隔符號對 X12 或 EDIFACT 來說都不是必要項,但建議使用它。
當 EDI 類型驗證停用時
如果您停用 EDI 類型驗證,則 EDI 接收管線或 EDI 傳送管線會處理由 EDI 類型驗證檢查出有錯誤的資料元素,而不會擱置要進行處理的訊息。
注意
即使停用 EDI 類型驗證,仍會執行 EDI 結構驗證。 未通過基本結構驗證的交換將遭擱置,即使 EDI 類型驗證已停用。
下面是一些會被處理而不會造成訊息擱置的錯誤:
未預期/未定義的交易集
位在區段/迴圈和資料元素層級的未預期/未定義的資料
位在區段/迴圈和資料元素層級的選用性 (Min Occurs 和 Max Occurs)
資料元素層級的長度 (最小值/最大值) 違規 (資料長度超過最大層級或低於最小層級)
資料元素層級位置的資料型別不符 (除了有專屬控制項的識別碼資料型別之外)
資料元素層級位置的無效列舉清單
如果 EDI 類型驗證在接收端已停用,但在傳送端上是啟用狀態,則當 XML 檔案包含錯誤時,EDI 傳送管線就無法將接收管線所產生的 XML 重新處理成有效的 EDI 檔案。 因此傳送管線就會發生錯誤。
如果 EDI 類型驗證已停用,EDI 接收管線或傳送管線將依照下列方式處理錯誤:
未預期的資料 | 動作 |
---|---|
未預期/未定義的交易集 | EDI 接收或傳送管線會接受交易集,即使其結構描述尚未部署 |
未預期的區段/記錄 | 接收管線會產生具有適當前置詞的標記: < UnexpectedSegment_%SegmentID%。 > 傳送管線會將 XML 標記名稱的前三個字元做為區段名稱。 |
未預期的簡單資料元素 | 接收管線會產生具有前置詞、區段識別碼和索引的 XML 標記,代表區段中資料元素的位置: < UnexpectedDataElement_%FieldName%。 |
未預期的複合資料元素 | 接收管線會產生具有前置詞、區段識別碼和索引的 XML 標籤,代表區段中資料元素的位置: < UnexpectedCompositeDataElement_%FieldName%。 |
遺失必要的資料 | 管線會將該資料視為選擇性。 |
資料元素長度違規 | 管線會將無效的資料元素長度視為有效 (最小值 = 0、最大值 = 無限制)。 |
執行個體中的無效列舉值 (適用於識別碼資料型別) | 管線會忽略該錯誤並繼續處理。 |
執行個體中出現「最大」重複違規 | 管線會將這類重複資料視為有效 (Min Occurs = 0、Max Occurs = 無限制)。 |
錯誤報告
關閉 EDI 類型驗證時,BizTalk Server不會回報事件檢視器中的錯誤,但會報告警告。 此外,通知會向來源合作對象回報「接受」,其方法是將 AK501 和 AK901 設定為 "E" (對於 X12 997),而將 UCI.4、UCM.3 和 UCF.4 設定為 "7" (對於 EDIFACT CONTRL)。 如此一來,未來傳輸中就沒有任何修正的機會。 不過,訊息接收者有機會透過手動處理來搶救文件,而不放任訊息遭拒絕或擱置。 此外, Edi.ErrorsInTransactionSet
如果 EDI 接收管線遇到任何錯誤,內容屬性將會升級。 如果遇到 EDI 或擴充驗證錯誤,這個屬性會升級為 "True"。 如果未遇到錯誤,則這個屬性將升級為 "False"。
如果接收或傳送管線遇到未預期的資料,它會在父層級報告錯誤並忽略子層級錯誤,如下所示:
未預期的資料 | 動作 |
---|---|
未預期的交易集 | 通知會報告這個錯誤,並忽略區段/迴圈和資料元素層級位置的後續錯誤 |
未預期的區段/迴圈 | 通知會報告這個錯誤,並忽略資料元素層級的錯誤。 |
未預期的資料元素 | 通知會報告這個錯誤,並忽略與屬性 (如識別碼、長度、相符項目等) 相關的複合錯誤,以及與複合資料元素欄位相關的錯誤 (如果有的話)。 |