In BizTalk, BAM can be applied on pipeline level and in orchestration. Here we are going to implement BAM in BizTalk through BAM API programming.
For more details of BAM APIs click here
Normally for BAM Programming below three functions are required under EventStream class.
- BeginActivity
- UpdateActivity
- EndActivity
But if you want some more advance feature in BAM tracking then you can refer this reference.
Click here for example of BAM activity in custom pipeline
Normally, we write the code to produce BAM events in the Execute method of the pipeline component.
The pipeline context has a GetEventStream method that returns a MessagingEventStream.
Requirements:
Dlls:
- BizTalk.Bam.EventObservation.dll
- BizTalk.ExplorerOM
- BizTalk.Pipeline
- BizTalk.Streaming
Namespaces:
- usingBizTalk.Bam.EventObservation;
- usingBizTalk.Message.Interop;
- usingBizTalk.Component.Interop;
- usingBizTalk.Streaming;
- usingBizTalk.ExplorerOM;
Example:
public Microsoft.BizTalk.Message.Interop.IBaseMessage Execute(Microsoft.BizTalk.Component.Interop.IPipelineContext context, Microsoft.BizTalk.Message.Interop.IBaseMessage inMsg)
{
EventStream BAMes;
BAMes = context.GetEventStream();
string ActivityID; // it can be a GUID
String operation; // message context properties or any custom value to track in BAM
BAMes.BeginActivity(ActivityName, ActivityID);
BAMes.UpdateActivity(ActivityName, ActivityID, “Data”, operation);
BAMes.EndActivity(ActivityName, ActivityID);
BAMes.Flush();
}
Here ActivityName: BAM Definition File Name
ActivityID: It can be a GUID or any unique id
UpdateActivity function:
public virtual void UpdateActivity( string activityName, string activityInstance, params object[] data )
In Update activity, after first two parameters, data items are next parameters which are defined in key value pairs.
These data items can be defined in single UpdateActivity function as well as in separate activity function. E.g. if a BAM table has following data items.
Data1, data2, starttime, endtime, errordetails, status, lastmodified.
Here we can write update function as per requirements, it’s not mandatory to define all data items in one time.
BAMes.UpdateActivity(“BAMSample”, ActivityID, “starttime”, DateTime.Now);
BAMes.UpdateActivity(“BAMSample”, ActivityID, “Status”, “OperationStart”);
You can track info on BAM Portal or BAM definition table in BAM Primary Import Database. You can check data in Bam_<BAM Definition File>_Completed table.
e.g. bam_BAMSample_Completed
When you defining BAM Definition file then BAM creates five table in BAMPrimaryImport table. you can refer to following reference to create BAM Definition file.
https://vkbiztalk.wordpress.com/2017/06/14/implementation-of-bam-activity-definition-file/
How does EventStream work in pipeline?
MessagingEventStream (MES) is used inside a BizTalk pipeline component to write Bam as part of the messaging transactions ensuring that your BAM event persistence remains in sync with the BizTalk pipeline transactions.
Messaging Event Streams are asynchronous and store tracking data first in the BizTalk MessageBox database. Periodically the data is processed and persisted to the BAM Primary Import database by the Tracking Data Decode Service (TDDS).

One response to “BAM in Custom Pipeline”
[…] Apply BAM in Pipeline: https://vkbiztalk.wordpress.com/2017/07/26/bam-in-custom-pipeline/ […]
LikeLike