활동 사용
BAM을 사용하는 가장 간단한 방법은 BAM API를 사용하여 명시적인 마일스톤 또는 데이터를 보내는 것입니다. BAM 활동은 실제 작업 단위와 동기화하여 유지되는 SQL 테이블의 레코드 정도로 생각할 수 있습니다.
각 새 작업 단위를 호출
BeginActivity
합니다.작업이 완료되고 이 작업 단위의 컨텍스트에서 더 이상 이벤트가 발생하지 않을 때 를 호출
EndActivity
합니다.구현의 중요한 위치에서 Microsoft.BizTalk.Bam.EventObservation.EventStream.UpdateActivity 를 호출하여 정보 작업자에게 유용한 데이터 및 마일스톤을 보냅니다.
중요
이벤트 스트림은 삭제하기 전에 플러시해야 합니다. EventStream 개체는 삭제될 때 데이터의 자동 플러시를 수행하지 않습니다. 즉, 일반적으로 활동 처리를 완료한 후에만 스트림을 플러시하도록 작성되는 코드를 사용하면 플러시 호출 이전에 예외가 발생하는 경우 데이터가 손실될 수 있습니다.
데이터 손실을 방지하려면 아래의 의사 코드처럼 try/finally 블록에서 처리를 캡슐화하고 플러시하는 것이 좋습니다.
BufferedEventStream es = new BufferedEventStream(…)
Try
{
// Do the activity processing here.
}
Finally
{
if (es != null ) es.Flush();
}
다음 예제 코드는 작업 단위가 Purchase Order인 경우 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 샘플)