使用英语阅读

通过


使用活动

使用 BAM 的最简单的方式是使用 BAM API 发送显式里程碑或数据。 您可以将 BAM 活动看作 SQL 表中与实际工作单位保持同步的记录。

重要

事件流在释放前必须刷新。 在释放 EventStream 对象时,不会执行自动刷新数据的操作。 通常情况下您编写的代码只在已处理完活动后才刷新事件流,这意味着如果在调用刷新操作之前发生了异常,则可能导致数据丢失。

为了避免数据丢失,建议您将处理过程和刷新操作封装在 try/finally 块中,如下面的伪代码所示:

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

下面的示例代码显示了当工作单位为采购订单时如何使用 BeginActivity、UpdateActivity 和 EndActivity。 在此示例中,我们假定字符串变量 poid 标识正在处理的当前采购订单:

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

另请参阅

使用事件流实现 BAM 活动
活动延续
BAM 动态基础结构
BAM API(BizTalk Server 示例)