アクティビティの使用
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 アクティビティの実装
アクティビティ Continuation
BAM 動的インフラストラクチャ
BAM API (BizTalk Server サンプル)