Verwenden einer Aktivität
Die einfachste Art der Verwendung von BAM ist das Senden von expliziten Meilensteinen oder Daten über die BAM-API. Sie können sich die BAM-Aktivität als Datensatz in einer SQL-Tabelle vorstellen, die Sie mit der eigentlichen Arbeitseinheit synchron halten.
Rufen Sie
BeginActivity
für jede neue Arbeitseinheit auf.Rufen Sie
EndActivity
auf, wenn die Arbeit abgeschlossen ist und Sie keine weiteren Ereignisse im Kontext dieser Arbeitseinheit erwarten.Rufen Sie Microsoft.BizTalk.Bam.EventObservation.EventStream.UpdateActivity an kritischen Stellen der Implementierung auf, um Daten und Meilensteine zu senden, die für den Information Worker nützlich sind.
Wichtig
Der Ereignisstream muss vor dem Verwerfen geleert werden. Das Objekt "EventStream" leert seine Daten jedoch nicht automatisch, wenn es verworfen wird. Der Stream wird erst dann in den normalerweise von Ihnen verwendeten Code geleert, nachdem Sie die Verarbeitung Ihrer Aktivitäten abgeschlossen haben. Wenn jedoch vor dem Aufruf zum Leeren eine Ausnahme auftritt, gehen die Daten verloren.
Um Datenverluste zu vermeiden, sollten Sie die Verarbeitung einschließen und in einen try-finally-Block leeren, wie im nachfolgenden Pseudocode dargestellt:
BufferedEventStream es = new BufferedEventStream(…)
Try
{
// Do the activity processing here.
}
Finally
{
if (es != null ) es.Flush();
}
Der folgende Beispielcode veranschaulicht die Verwendung von BeginActivity, UpdateActivity und EndActivity, wenn es sich bei der Arbeitseinheit um die Aktivität Purchase Order handelt. Im Beispiel wird davon ausgegangen, dass die Zeichenfolgenvariable poid die aktuelle Bestellung in Bearbeitung identifiziert:
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);
Implementieren von BAM-Aktivitäten mit Ereignisstreams
Aktivitätsfortsetzung
Dynamische BAM-Infrastruktur
BAM-API (BizTalk Server-Beispiel)