Freigeben über


Aktivitätsfortsetzung

Die BAM-Aktivität (auch als Geschäftsaktivität bezeichnet) kann sich über mehrere heterogene Anwendungen (z. B. eine Pipeline, zwei Orchestrierungen, eine Branchenanwendung und eine weitere Pipeline) erstrecken. Die BAM-Infrastruktur kann die Ereignisse aus mehreren Anwendungen mit ein wenig Hilfe des Entwicklers korrelieren – ein Konzept namens "Fortsetzung", das in der folgenden Abbildung gezeigt wird.

Screenshot: BAM-Infrastruktur

Anwendungen

Der erste Teil der Aktivität wird in der Vertriebsanwendung, der zweite in der Verpackungs- & Montageanwendung durchgeführt, und der Übermittlungsprozess ist schließlich in der Versandanwendung verfügbar. Jede Anwendung verwendet unterschiedliche IDs für die aktuelle Arbeitseinheit: Bestellnummer (Auftragsnummer), Verkaufsauftragsnummer (SO) und Versandauftragsnummer (UPS). Um die Ereignisse zwischen zwei verschiedenen Aktionen zu korrelieren, müssen Sie folgende Schritte ausführen:

  • Geben Sie ein Fortsetzungstoken an. Hierbei handelt es sich um eindeutige Daten, die für beide Anwendungen verfügbar sind (z. B. der Teil der Nachricht, der ausgetauscht wird).

  • Rufen Sie in der ersten Anwendung EnableContinuation auf, und übergeben Sie das Fortsetzungstoken zusammen mit der aktuellen Aktivitäts-ID.

  • Rufen Sie "BeginActivity" in der zweiten Anwendung nicht auf.

  • Führen Sie in der zweiten Anwendung alle nachfolgenden Ereignisse durch, und verwenden Sie anstelle der Aktivitäts-ID das Fortsetzungstoken.

    Im folgenden Codebeispiel wird die Verwendung der Aktivitätsfortsetzung unter drei Anwendungen veranschaulicht:

    Bestellungsanwendung

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

Ausführungsanwendung

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

Versandanwendung

string upsID="UPS#97892"  
es.UpdateActivity("PurchaseOrder", upsID,  
"POShipped",DateTime.UtcNow);  
es.EndActivity("PurchaseOrder",upsID)  
  

Beachten bei der Verwendung von Aktivitätsfortsetzung in Code folgende Richtlinien:

  • Verwenden Sie die Fortsetzung nur, wenn der Endbenutzer die Arbeit unterschiedlicher Anwendungen als Teil derselben Aktivität behandeln muss. Verwenden Sie für jede Anwendung eigene Aktivitäten, und erstellen Sie eine Aktivitätsbeziehung, wenn der Endbenutzer die Arbeit in den einzelnen Anwendungen als sinnvolle Aktivitäten anzeigt.

  • Wenn die Arbeitseinheiten in den Anwendungen keine direkte Beziehung aufweisen (wenn es z. B. für einen Verkaufsauftrag mehrere Lieferungen gibt), können Sie zwar Aktivitätsbeziehungen verwenden, jedoch keine Fortsetzung.

  • Wenn Sie Daten (mit "DirectEventStream") synchron an BAM senden, und die Aktivitäts-ID an alle beteiligten Komponenten weitergegeben wird, müssen Sie keine Fortsetzung zu verwenden.

  • Wenn Sie Daten (mit "BufferedEventStream" oder aus Orchestrierungen) asynchron an BAM senden, müssen Sie die Fortsetzung verwenden, auch wenn die Aktivitäts-ID an alle Komponenten weitergegeben wird. In diesem Fall müssen Sie für jede Anwendung eine andere Aktivitäts-ID verwenden, indem Sie dieser eine eindeutige Zeichenfolge (z. B. den Anwendungsnamen) als Präfix voranstellen. Dies ist erforderlich, weil die Daten aus verschiedenen Anwendungen unter Umständen in beliebiger Reihenfolge bei BAM eintreffen und BAM diese nach dem Zufallsprinzip eingehenden Ereignisse ausblenden muss, um richtige Abfrage- und Aggregationsergebnisse zu gewährleisten.

  • Für die Fortsetzung müssen Sie Ihre Anwendungen nicht neu erstellen, um mehr Daten austauschen zu können.

Weitere Informationen

Dynamische BAM-Infrastruktur
BAM-API (BizTalk Server-Beispiel)
End-to-End für BAM (BizTalk Server-Beispiel)