Uso di un'attività
Il modo più semplice per utilizzare BAM consiste nell'inviare attività cardine o dati espliciti utilizzando l'API BAM. L'attività BAM può essere paragonata a un record di una tabella SQL che viene sincronizzato con l'effettiva unità di lavoro.
Chiamare
BeginActivity
ogni nuova unità di lavoro.Chiamare
EndActivity
al termine del lavoro e non si prevede più eventi nel contesto di questa unità di lavoro.Chiamare Microsoft.BizTalk.Bam.EventObservation.EventStream.UpdateActivity nelle posizioni critiche dell'implementazione, per inviare dati e attività cardine utili per il ruolo di lavoro informativo.
Importante
Prima di essere eliminato, il flusso di eventi deve essere scaricato. Al momento dell'eliminazione dell'oggetto EventStream, non viene eseguito lo scaricamento automatico dei dati. Ciò implica che il codice che, di solito, viene scritto per scaricare il flusso dopo l'elaborazione delle attività, può causare una perdita di dati se si verifica un'eccezione prima di una chiamata da scaricare.
Per evitare tale perdita, è consigliabile incorporare l'elaborazione e lo scaricamento in un blocco try/finally come illustrato nello pseudocodice indicato di seguito.
BufferedEventStream es = new BufferedEventStream(…)
Try
{
// Do the activity processing here.
}
Finally
{
if (es != null ) es.Flush();
}
Nel codice di esempio riportato di seguito viene illustrato come utilizzare BeginActivity, UpdateActivity ed EndActivity quando l'unità di lavoro è rappresentata da un ordine di acquisto. Nell'esempio si presuppone che la variabile stringa identifica l'ordine di acquisto corrente nel processo:
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);
Implementazione di attività BAM con flussi di eventi
Continuazione dell'attività
Infrastruttura dinamica BAM
BAM API (esempio di BizTalk Server)