Condividi tramite


Continuazione dell'attività

L'attività BAM (denominata anche attività di business) può coinvolgere varie applicazioni eterogenee, ad esempio una pipeline, due orchestrazioni, un'applicazione line-of-business e un'altra pipeline. L'infrastruttura BAM può correlare gli eventi di più applicazioni con un piccolo aiuto dello sviluppatore, un concetto denominato "Continuazione", illustrato nella figura seguente.

Screenshot che mostra l'infrastruttura BAM.

Applicazioni

La prima parte dell'attività si verifica nell'applicazione delle vendite, la seconda parte nell'applicazione di assemblaggio e confezionamento e infine la parte della consegna è disponibile nell'applicazione della spedizione. Ogni applicazione usa ID diversi per l'unità di lavoro corrente: ordine di acquisto (PO), numero ordine di vendita (SO) e numero ordine di spedizione (UPS). Per correlare gli eventi di due applicazioni differenti, è necessario eseguire le operazioni seguenti:

  • Identificare il token di continuazione, ovvero un dato univoco disponibile in entrambe le applicazioni (ad esempio la parte del messaggio che viene scambiata).

  • Chiamare EnableContinuation nella prima applicazione e inoltrare il token di continuazione con l'ActivityID corrente.

  • Non chiamare BeginActivity nella seconda applicazione.

  • Generare tutti gli eventi successivi nella seconda applicazione utilizzando il token di continuazione anziché l'ActivityID.

    Nel codice di esempio seguente viene illustrato l'utilizzo della continuazione dell'attività fra tre applicazioni:

    Applicazione ordine di acquisto

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

Applicazione di evasione

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

Applicazione di spedizione

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

Seguire queste indicazioni per utilizzare la continuazione dell'attività nel codice:

  • Utilizzare la continuazione solo quando l'utente finale deve considerare le operazioni eseguite nelle diverse applicazioni come appartenenti alla stessa attività. Utilizzare attività separate per ogni applicazione e creare una relazione di attività se l'utente finale considera le operazioni eseguite in ciascuna applicazione come attività significative.

  • Se le unità di lavoro nelle applicazioni non dispongono di una relazione univoca, è possibile utilizzare le relazioni di attività ma non la continuazione, ad esempio quando per un ordine di vendita esistono varie spedizioni.

  • Se si trasmettono dati a BAM in modo sincrono (con DirectEventStream) e l'ActivityID viene propagato a tutti i componenti coinvolti, non è necessario utilizzare la continuazione.

  • Se si trasmettono dati a BAM in modo asincrono (con BufferedEventStream o dalle orchestrazioni), è necessario utilizzare la continuazione anche se l'ActivityID viene propagato a tutti i componenti. In questo caso è necessario utilizzare un diverso ActivityID in ogni applicazione aggiungendo una stringa univoca come prefisso (ad esempio, Nome applicazione). Questa soluzione è necessaria perché potrebbero arrivare a BAM dati di diverse applicazioni in ordine casuale rendendo opportuno nascondere gli eventi non ordinati per garantire risultati corretti di query e aggregazioni.

  • La continuazione non richiede la riscrittura delle applicazioni per scambiare altri dati.

Vedere anche

Infrastruttura dinamica BAM
BAM API (esempio di BizTalk Server)
BAM End-to-End (esempio di BizTalk Server)