Freigeben über


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);  

Weitere Informationen

Implementieren von BAM-Aktivitäten mit Ereignisstreams
Aktivitätsfortsetzung
Dynamische BAM-Infrastruktur
BAM-API (BizTalk Server-Beispiel)