組合批次 EDI 交換
若要將個別交易集批次元素組合成 EDI 交換,BizTalk Server EDI 和 AS2 會執行下列動作:
識別用於批次處理的批次元素
在收到批次元素時個別進行驗證及緩衝處理
擷取特定批次專案,並在符合發行準則時組合批次交換
個別訊息集合組合成批次的開始時間是由批次啟動準則所決定, 而釋放批次的時間則是由批次釋放準則所決定。 如需這兩組準則的詳細資訊,請參閱 設定傳出批次。
外寄批次訊息的訊息流程
當 BizTalk Server 設定為批次處理外送訊息時,BizTalk Server 元件將會執行一系列如下的步驟,以準備傳送批次的訊息。 這一系列步驟說明的案例是以具有 BatchMarker 管線元件的 EDIReceive 管線來處理收到的交換,而這些交換中包含要進行批次處理以供傳送的交易集。
EDIReceive 管線中的 BatchMarker 管線元件會透過合作對象屬性的 EDI 批次篩選條件設定,判斷需要進行批次處理的訊息 (這是唯一可查看批次篩選條件設定並根據這些設定運作的批次處理元件)。
如果只有一個批次組態的篩選設定訂閱訊息,BatchMarker 元件將會升級 屬性
EDI.ToBeBatched = True
。 這可確保批次處理或協調流程一定會收取訊息。如果多個批次組態的篩選設定符合訊息的內容,BatchMarker 元件會升級屬性
EDI.ToBeRouted = True
,並將 屬性設定EDI.BatchIds
為包含相符批次識別碼的空間分隔清單。 這可確保路由或協調流程一定會訂閱訊息。注意
您可以升級自訂接收管線或自訂協調流程中適當的內容屬性。 自訂接收管線可以使用 BatchMarker 管線元件,或是不使用 BatchMarker 管線元件,直接升級屬性。
路由協調流程會挑選任何交易集
EDI.ToBeRouted = True
並EDI.BatchIds
升級,然後建立交易集的複本,確保每個批次識別碼都有EDI.BatchIds
一個複本。 路由協調流程會設定EDI.ToBeBatched = True
為EDI.BatchId
每個交易集複本相符批次組態的批次識別碼。 這可確保批次處理協調流程將會收取交易集以進行批次處理。批次處理協調流程會收取已升級下列屬性的所有訊息:
EDI.ToBeBatched = True
和 EDI。BatchId = 與這個批次處理協調流程實例相關聯的批次識別碼。EDI.ToBeBatched = True
和 EDI。BatchName = 已設定批次和 EDI 的名稱。DestinationPartyName = 包含批次組態的合作物件名稱。當 EDIReceive 管線處理內送訊息 (使用 BatchMarker 管線元件) 時,批次處理協調流程只會批次處理 X12 或 EDIFACT 編碼的交易集。
注意
每個作用中批次組態都有一個批次處理協調流程執行個體,而且每個執行個體都會訂閱特定批次識別碼。 在 [合約屬性] 對話方塊之 [單向協定] 索引標籤的 [批次設定] 頁面的 [識別] 區段中,建立新的批次組態時,會自動設定批次識別碼值。
批次處理協調流程會驗證要批次處理的每個交易集。 如果交易集驗證失敗,它會將
EDI.BatchItemValidationFailure
內容屬性設定為 「True」。 BatchSuspend協調流程會根據該內容屬性挑選訊息、張貼錯誤資訊,然後暫停。當批次發行準則符合時,批次處理協調流程會將批次元素組合成批次,並建立信封。
批次處理協調流程完成交換批次處理之後,它會在該交換上升級下列屬性:EDI。DestinationPartyName = %PartyName%,EDI。BatchEncodingType = X12 或 EDIFACT 和 EDI。ToBeBatched = False。
傳送埠會根據 EDI 挑選批次交易集。DestinationPartyName = < PartyName,EDI > 。BatchEncodingType = EDIFACT 或 X12 和 EDI。ToBeBatched = False。
批次處理協調流程控制訊息
批次處理協調流程由下列控制訊息啟動、終止或覆寫:
BatchActivation:當協調流程收到此訊息時,就會建立批次處理協調流程的實例,而且協調流程在符合批次啟用準則時,會作用中接收批次元素) (。 按一下 [合約屬性] 對話方塊之 [單向合約] 索引標籤的 [批次設定] 頁面上的批次組態的 [開始] 按鈕,即可傳送此控制項訊息。
BatchTermination:當協調流程收到此訊息時,它會從現有的批次元素建立批次、將訊息發佈至 MessageBox,然後終止。 按一下 [合約屬性] 對話方塊之 [單向協定] 索引標籤的 [批次處理組態] 頁面上的 [批次設定] 按鈕,即可傳送此控制訊息。
注意
如果在 [合約屬性] 對話方塊之 [批次設定] 頁面的 [批次設定] 頁面的 [終止] 區段中,達到 [結束依據] 屬性所指定的時間,則協調流程也會終止。
BatchOverride:當協調流程收到此訊息時,它會從現有的元素建立批次、將訊息發佈至 MessageBox,然後等候下一個批次的訊息。 按一下 [合約屬性] 對話方塊之 [單向合約] 索引標籤的 [批次設定] 頁面上的 [批次設定] 按鈕,即可傳送此控制項訊息。
批次處理協調流程會透過 BatchControlMessageRecvLoc 接收位置接收控制訊息。 此 SQL 接收位置的輪詢間隔預設設定為 30 秒,但在接收位置的 [ SQL 傳輸屬性 ] 對話方塊中可以變更。 縮短輪詢間隔可確保在您執行傳送控制訊息的動作之後 (例如在您啟動批次處理協調流程時),BatchControlMessageRecvLoc 接收位置可以立即收到控制訊息。
啟動批次協調流程時執行的步驟如下:
當您按一下 [開始] 按鈕時,BizTalk Server在資料表中建立記錄,指出您要啟用批次協調流程的合作物件和批次識別碼。
與 BatchControlMessageRecvLoc 接收位置關聯的 SQL 配接器會進行輪詢,確定資料庫中是否有該筆記錄。
如果記錄存在,SQL 配接器會使用記錄中的資訊建置控制訊息。
注意
以這種方式建置訊息可確保無效的控制訊息將無法啟動協調流程。
BatchControlMessageRecvLoc 接收位置會接收控制訊息,而 BizTalk Server 則會啟動批次處理協調流程執行個體。
批次元件
BizTalk Server EDI 會使用下列元件,將 XML 交易集批次處理成 EDI 交換:
EDI 接收管線中的 BatchMarkerReceivePipelineComponent
路由協調流程
批次處理協調流程
升級批次處理協調流程
BatchSuspend 協調流程
EDI 傳送管線
當您安裝和設定 BizTalk Server EDI 和 AS2 時,這些元件會安裝為 DLL。
注意
BizTalk Server EDI 和 AS2 中的批次處理元件不保證批次中交易集的排序。
BatchMarkerReceivePipelineComponent
EDI 接收管線中的 BatchMarkerReceivePipelineComponent 可讓批次處理協調流程收取要批次處理的訊息。 這個管線元件是在 EDI 接收管線中的解譯器之後套用。 元件會在 [合約屬性] 對話方塊之 [單向協定] 索引標籤的 [批次處理組態] 頁面的 [篩選] 區段中評估篩選準則集,並以下列內容屬性標示交易集,以便路由和批次處理協調流程進行處理
如果單一合作物件訂閱要批次處理的訊息,則會升級
ToBeBatched = True
BatchId,並將 BatchId 設定為相符批次組態的批次識別碼值。 這可讓批次處理協調流程收取訊息。如果多個批次訂閱要批次處理的訊息,則會升級
ToBeRouted = True
,並將EDI.BatchIds
屬性設定為以空格分隔的批次識別碼清單。 這可讓路由協調流程取貨。如果沒有任何訂閱存在,它就不會升級內容屬性。 這表示交易集不會進行批次處理。
管線元件會忽略 XML 以外的訊息,以及屬性
ReuseEnvelope
(保留批次) 的訊息。 如果不要對通知進行批次處理,此管線元件便會忽略 ACK 訊息類型 (CONTRL、TA1 和 997)。 為了優化路由和批次處理協調流程的處理,如果反組譯程式將訊息內容屬性MessageDestination
設定為 「SuspendedQueue」,BatchMarkerPipelineComponent 會將訊息傳遞至 MessageBox。如果您使用的是自訂管線,而不是 EDIReceive 管線,可以使用自訂管線中的 BatchMarker 元件。 如果您未使用 EDIReceive 管線,而且正在從協調流程發佈訊息,則必須在其中一個元件中升級及
BatchID
升級ToBeBatched = True
為使用中批次的識別碼。
路由協調流程
路由協調流程會訂閱具有內容屬性 ToBeRouted = True
的任何訊息,並將內容屬性 EDI.BatchIds
設定為以空格分隔的批次識別碼清單。 當多個批次篩選訂閱要批次處理的訊息時,就會發生這種情況。 路由協調流程會針對 中包含的 EDI.BatchIds
每個批次識別碼建立訊息複本。 它會以兩個新的內容屬性來戳記每個複本:
EDI.BatchID
,其設定為此訊息所要使用的批次識別碼。EDI.ToBeBatched
,設定為 True。接著,它會將這些複本傳送到 MessageBox,供批次處理協調流程收取。 每個目的地批次識別碼都會使用相同協調流程的單一實例,並篩選特定批次識別碼。
批次處理協調流程
批次處理協調流程是一種可設定狀態的服務,它會緩衝一段時間內的批次元素 (交易集)、將它們組合成交換,然後再根據釋放準則將交換釋放到傳送管線。
啟動之後,批次處理協調流程的實例可以啟動特定編碼類型的批次處理訊息給指定的合作物件, (如果 開始日期 時間通過) 。 在任何一個時間點,每個合作對象的批次處理協調流程可以具有許多執行個體,但是每個作用中批次組態只能有一個執行個體。 批次協調流程的單一實例可以針對單一批次組態釋放多個批次。 在符合結束準則後,批次處理協調流程執行個體將會終止。 您必須使用 [ 開始 ] 按鈕,從交易夥伴管理 (TPM) 手動建立批次處理協調流程的新實例。
如果批次協調流程在 [合約屬性] 對話方塊之 [單向協定] 索引標籤之 [批次設定] 頁面的 [啟用] 區段的開始日期時間之前開始,它只會接收啟用範圍中指定的訊息。 不會接收在開始日期時間之前傳送的訊息。
批次處理協調流程執行的作業包括:
訂閱具有內容屬性
EDI.ToBeBatched = True
和EDI.BatchId
批次組態識別碼或EDI.ToBeBatched = True
EDI 的 XML 批次專案。BatchName = 已設定批次和 EDI 的名稱。DestinationPartyName = 包含批次組態的合作物件名稱。 它會使用迴圈中的 Receive 動作作業 來 接收批次專案。注意
批次處理協調流程不會根據 [合約屬性] 對話方塊之 [單向合約] 索引標籤之 [批次處理組態] 頁面之 [篩選準則] 區段中所設定的篩選準則來批次處理交易集。 它會訂閱已設定前述內容屬性的交易集。 BatchMarker 管線元件會根據合作對象屬性中的篩選設定來設定及升級這些內容屬性。
擷取內容屬性中所
BatchId
識別之合作物件的批次組態設定。根據合作對象設定來驗證批次元素 (交易集)。
如果批次專案發生錯誤,批次協調流程將會在該交易集上升級下列屬性:
EDI.BatchItemValidationFailure = True
。 BatchElementSuspend協調流程會訂閱已升級此屬性的任何交易集。 這個協調流程將會提供在批次處理交換時所遇到的第一個錯誤。如果批次元素中沒有任何錯誤,則保留該批次元素的參考。
收到適當的控制訊息或符合批次處理發行準則時,會中斷 Receive 動作迴圈、從 MessageBox 擷取所有批次元素,以及組合交換。
設定交換的內容屬性,以及 CoNtext 屬性
ToBeBatched = False
DestinationPartyName = %PartyName% ,其中 %PartyName% 是訊息所要之合作物件的名稱。注意
如果傳送埠訂閱或同時訂閱屬性
EDI.ToBeBatched = False
和 EDI。DestinationPartyName = %PartyName%,傳送埠可以挑選批次交換。 請確定傳送埠的篩選條件已設定成讓傳送埠只收取它應該收取的批次交換。注意
批次處理協調流程捨棄到 MessageBox 的交換只有屬性
EDI.ToBeBatched = False
、EDI。DestinationPartyName = %PartyName%, 和 EDI。BatchEncodingType = 「X12」 或 「EDIFACT」 升級至內容。 原始交易集裡的所有內容屬性都會遺失。針對 X12 編碼的交換,將下列屬性套用到信封:
ISA6:交換寄件者識別碼
ISA8:交換接收者識別碼
ISA15:使用狀況指示符號
ISA_Blob (寫入內容中)
針對 EDIFACT 編碼的交換,將下列屬性套用到信封:
UNB2.1:交換傳送者識別碼
UNB3.1:交換收件者識別碼
UNB2.3:反向路由的位址
UNB11:使用狀況指示符號
UNA_Blob (寫入內容中)
UNB_Blob (寫入內容中)
將批次交換傳送至 MessageBox,供 EDI 傳送管線收取。
UpgradeBatching 協調流程
UpgradeBatching 協調流程會處理屬性 EDI.ToBeBatched
設定為 true 但未設定屬性的 EDI.BatchID
訊息。
在舊版BizTalk Server中,每一方只能有一個批次設定。 處理已 EDI.ToBeBatched
設定為 true 的訊息時, EDI.DestinationPartyId
會使用 來判斷合作物件,然後從合約屬性讀取批次組態。
在BizTalk Server中,每一方都可以有多個與其相關聯的批次組態,因此 EDI.DestinationPartyId
不會提供足夠的資訊來判斷應該使用哪個批次組態。 當BizTalk Server接收訊息時, EDI.BatchId
會使用 屬性來識別處理訊息時應該使用哪些特定批次組態。
升級至BizTalk Server之後,您可能仍有使用 屬性來指定合作物件組態的 EDI.DestinationPartyId
自訂管線。 收到已 EDI.ToBeBatched
設定為 true 的訊息時,並已 EDI.DestinationPartyID
設定而不是 EDI。BatchID,UpgradeBatching 協調流程會嘗試判斷應該使用哪個批次組態。
UpgradeBatching 協調流程會使用下列訂用帳戶篩選來訂閱標示為批次處理的檔,但未指定批次識別碼:
EDI.ToBeBatched=True
EDI.EncodingType
存在EDI.DestinationPartyId
存在當協調流程收到訊息時,它會嘗試使用合作物件名稱和編碼類型來尋找訊息的相符批次組態。 屬性
EDI.DestinationPartyID
是用來判斷合作物件名稱,然後協調流程會尋找符合 PartyName > +EncodingType > + < Default 的 < 批次名稱。 例如,如果合作物件名稱是 Contoso,而 的值EDI.EncodingType
是 X12,則協調流程會尋找名為 ContosoX12Default 的批次。如果找到相符的批次組態,訊息會放在訊息方塊中,並具有下列屬性:
EDI.ToBeBatched = True
EDI.ToBeRouted = False
Edi。BatchId = 相符批次的批次識別碼
批次處理協調流程接著會處理訊息
注意
如果找不到相符的批次,則會發生下列情況:
- 訊息不會傳送至 BatchSuspend 協調流程。
- UpgradeBatching 協調流程實例和訊息將會暫停。
- 錯誤會記錄到事件記錄檔中,指出找不到批次。
BatchSuspend 協調流程
BatchSuspend 協調流程可處理批次處理協調流程所收到的無效訊息。 BatchSuspend 是必要的協調流程,因為沒有任何方法可以直接從協調流程 (在此案例中為批次處理協調流程) 擱置訊息,而不需要停止執行協調流程執行個體。
當批次處理協調流程的執行個體收到訊息時,它會嘗試驗證該訊息。 如果訊息驗證失敗,批次處理協調流程會建立 BatchSuspend 協調流程的實例,並將內容屬性設定 EDI.BatchItemValidationFailure
為 True。 BatchSuspend 協調流程會訂閱該內容屬性設定為 True 的所有訊息。 在將無效的交易集傳送至 BatchSuspend 協調流程之後,BatchSuspend 協調流程執行個體便會擱置。
BatchSuspend 協調流程會提供遇到的第一個錯誤的詳細錯誤資訊。
您可以使用篩選中的 屬性, EDI.BatchElementValidationFailure
建立自訂協調流程來處理批次協調流程驗證失敗的交易集。
EDI 傳送管線
從批次處理協調流程接收批次交換之後,EDI 傳送管線會執行下列動作:
針對 X12 編碼的交換,傳送管線會將下列屬性套用到信封:
ISA2:授權資訊
ISA4:安全性資訊
ISA9:交換日期
ISA10:交換時間
ISA13:交換控制編號
GS4:日期
GS5:時間
GS6:群組控制編號
ST2:交易集控制編號
針對 EDIFACT 編碼的交換,傳送管線會將下列屬性套用到信封:
UNB4.1:日期
UNB4.2:時間
UNB5:交換控制參考
UNB6.1:收件者參考密碼
UNG4.1:日期
UNG4.2:時間
UNG5:功能群組參考
UNG8:應用程式密碼
透過關聯配接器傳遞訊息