活動接續
BAM 活動 (也稱為商務活動) 可以跨越多個異質應用程式 (例如,從某個管線進入兩個協調流程,再到某個商務營運系統應用程式,然後到另一個管線)。 BAM 基礎結構可以將來自多個應用程式的事件與開發人員的一些協助相互關聯–稱為「接續」的概念,如下圖所示。
應用程式
活動的第一個階段發生於 Sales (銷售) 應用程式,第二個階段則發生於 Packaging & Assembly (包裝和組裝) 應用程式,最後由 Shipping (送貨) 應用程式提供送貨進度。 每個應用程式會針對目前工作單位使用不同的標識符:採購單號碼 (PO) 、銷售訂單號碼 (SO) ,以及 UPS) (出貨訂單號碼。 若要將兩個不同應用程式的事件相互關聯,您必須:
識別接續 Token,這是兩個應用程式都能使用的唯一資料片段 (例如,彼此交換的訊息部分)。
在第一個應用程式中呼叫 EnableContinuation,並傳遞接續 Token 和目前的 ActivityID。
請勿在第二個應用程式中呼叫 BeginActivity。
在第二個應用程式中使用接續 Token 代替 ActivityID,引發所有後續事件。
下列程式碼範例示範如何在三個應用程式之間使用活動接續:
訂單應用程式
string oID="PO#123";
string soID="SO#265";
es.BeginActivity("PurchaseOrder",poID);
es.UpdateActivity("PurchaseOrder",poID,
"POReceived",DateTime.UtcNow,
"POAmount",100,
"CustomerCity","Seattle");
es.EnableContinuation(
"PurchaseOrder",poId,soID);
es.EndActivity("PurchaseOrder",poID);
履行應用程式
string soID="SO#265";
string upsID="UPS#97892";
es.UpdateActivity("PurchaseOrder",soID,
"POApproved",DateTime.UtcNow,
"ProductName","ProductA");
es.EnableContinuation(
"PurchaseOrder",soID,upsID);
es.EndActivity("PurchaseOrder",soID);
送貨應用程式
string upsID="UPS#97892"
es.UpdateActivity("PurchaseOrder", upsID,
"POShipped",DateTime.UtcNow);
es.EndActivity("PurchaseOrder",upsID)
請依循下列指導方針,在程式碼中使用活動接續:
除非使用者必須將不同應用程式的工作視為相同活動的一部分,否則切勿使用接續。 如果每個應用程式的工作對使用者而言是各有其意義的活動,每個應用程式均應使用不同的活動,然後建立活動關係。
如果應用程式的工作單位並非一對一關係,則可使用活動關係但不應使用接續,例如,一張銷售訂單有數個送貨地點時。
若以同步方式將資料傳送至 BAM (使用 DirectEventStream),且 ActivityID 傳遞至所有參與的元件,就不需要使用接續。
若以非同步方式將資料傳送至 BAM (使用 BufferedEventStream 或透過協調流程),則即使 ActivityID 傳遞至所有元件,仍然必須使用接續。 在此情況下,每個應用程式必須使用不同的 ActivityID,所以請用唯一字串做為字首 (例如,加上應用程式名稱)。 需要這麼做是因為,不同的應用程式可能以隨機順序將資料送達 BAM,而 BAM 必須隱藏失序的事件以確保查詢和彙總結果正確。
使用接續的應用程式不需要重新撰寫就能交換更多資料。
另請參閱
BAM 動態基礎結構
BAM API (BizTalk Server 範例)
BAM 端對端 (BizTalk Server 範例)