Leer en inglés

Compartir a través de


Uso de una actividad

La manera más fácil de utilizar BAM es enviar datos o hitos explícitos mediante la API de BAM. Puede pensar en la actividad BAM como registro de una tabla SQL que mantiene en sincronización con la unidad de trabajo real.

  • Llame a BeginActivity cada nueva unidad de trabajo.

  • Llame EndActivity a cuando se complete el trabajo y no espere más eventos en el contexto de esta unidad de trabajo.

  • Llame a Microsoft.BizTalk.Bam.EventObservation.EventStream.UpdateActivity en lugares críticos de la implementación para enviar datos e hitos que serán útiles para el trabajador de la información.

Importante

La secuencia de eventos debe vaciarse antes de eliminarse. El objeto EventStream no efectúa un vaciado automático de los datos al eliminarse. Ello significa que el código que, por lo general, se escribiría, y en el cual se vacía la secuencia únicamente después de finalizar el procesamiento de las actividades, puede ocasionar la pérdida de datos en el caso de que se produzca una excepción antes que una llamada de vaciado.

Para evitar la pérdida de datos, recomendamos encapsular el procesamiento y efectuar el vaciado en un bloque try/finally como se muestra en el código siguiente:

BufferedEventStream es = new BufferedEventStream(…)  
Try  
{  
   // Do the activity processing here.  
}  
Finally  
{  
   if (es != null ) es.Flush();  
}  

El código de ejemplo siguiente muestra cómo hacer uso de BeginActivity, UpdateActivity y EndActivity cuando la unidad de trabajo es un pedido. En el ejemplo, se supone que la variable de cadena poid identifica el pedido de compra actual en proceso:

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

Consulte también

Implementar actividades de BAM con secuencias de eventos
Continuación de actividades
Infraestructura dinámica de BAM
API de BAM (ejemplo de BizTalk Server)