Utilisation d’une activité
La façon la plus aisée d'utiliser l'analyse BAM consiste à envoyer des étapes majeures ou des données explicites à l'aide de l'API BAM. Vous pouvez vous représenter l'activité BAM comme un enregistrement d'une table SQL que vous maintiendriez en synchronisation avec l'unité de travail en cours.
Appelez
BeginActivity
pour chaque nouvelle unité de travail.Appelez
EndActivity
lorsque le travail est terminé et que vous n’attendez plus d’événements dans le contexte de cette unité de travail.Appelez Microsoft.BizTalk.Bam.EventObservation.EventStream.UpdateActivity aux endroits critiques de l’implémentation pour envoyer des données et des jalons qui seront utiles au travailleur de l’information.
Important
Le flux d'événements doit être vidé avant suppression. L'objet EventStream n'effectue pas de vidage automatique des données lorsqu'il est supprimé. Cela signifie que le code que vous écririez normalement, dans lequel vous videz le flux uniquement après avoir terminé de traiter vos activités, peut entraîner une perte de données si une exception se produit préalablement à un appel de vidage.
Pour éviter la perte de données, il est recommandé d'encapsuler le traitement et le vidage dans un bloc try/finally tel qu'illustré dans le pseudo-code ci-dessous :
BufferedEventStream es = new BufferedEventStream(…)
Try
{
// Do the activity processing here.
}
Finally
{
if (es != null ) es.Flush();
}
L'exemple de code suivant indique comment vous servir des événements BeginActivity, UpdateActivity et EndActivity lorsque l'unité de travail correspond à un bon de commande. Dans l’exemple, nous partons du principe que la variable de chaîne poid identifie le bon de commande actuel en cours :
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);
Implémentation d'activités BAM avec des flux d'événements
Continuation d’activités
Infrastructure dynamique de l’analyse BAM
API BAM (exemple BizTalk Server)