使用活動
使用 BAM 最簡易的方式就是使用 BAM API 傳送明確里程碑或資料。 您可以將 BAM 活動視為與實際工作單位保持同步的一筆 SQL 資料表記錄。
為每個新工作單位呼叫
BeginActivity
。工作完成時呼叫
EndActivity
,而且您預期此工作單元的內容中不會再發生任何事件。在實作的重要位置呼叫 Microsoft.BizTalk.Bam.EventObservation.EventStream.UpdateActivity ,以傳送對資訊工作者有用的資料和里程碑。
重要
處置事件資料流之前必須先予以排清。 EventStream 物件在受處置時不會自動排清資料。 這表示若依照一般常見的程式碼寫法,總是等到活動處理完成後才排清資料流,則一旦發出排清呼叫前發生例外狀況,可能就會造成資料遺失。
為避免資料遺失,建議您將處理和排清作業封裝在 try/finally 區塊中,如以下的虛擬程式碼所示:
BufferedEventStream es = new BufferedEventStream(…)
Try
{
// Do the activity processing here.
}
Finally
{
if (es != null ) es.Flush();
}
下列範例程式碼顯示如何使用 BeginActivity、UpdateActivity 和 EndActivity 處理採購單工作單位。 在此範例中,我們假設字串變數 poid 會識別目前處理中的採購單:
using Microsoft.BizTalk.BAM.EventObservation;
...
EventStream es=new DirectEventStream(connectionString,1);
...
// At the beginning of the processing of a new work:
// Here poid is a string variable that has the current
// Purchase Order identifier (e.g. PO number)
es.BeginActivity("PurchaseOrder",poid);
es.UpdateActivity("PurchaseOrder",poid,
"POReceived",DateTime.UtcNow,
"POAmount",100,
"CustomerName",""Joe",
"CustomerCity","Seattle");
...
// few days later
es.UpdateActivity("PurchaseOrder",poid,
"POApproved",DateTime.UtcNow,
"ProductName","Widget");
...
// and another few days later
es. UpdateActivity("PurchaseOrder",poid,
"POShipped",DateTime.UtcNow);
...
// and finally
es. UpdateActivity("PurchaseOrder",poid,
"Delivered",DateTime.UtcNow);
es.EndActivity("PurchaseOrder",poid);
使用事件資料流實作 BAM 活動
活動接續
BAM 動態基礎結構
BAM API (BizTalk Server 範例)