Deux Webcast illustrant l'article sont disponibles :
et a la fin de l'article
Introduction
Business activity monitoring ou supervision des activité métier est une fonctionnalité de biztalk permettant de superviser et de voir les performances du déroulement d'un processus métier. Cela permet de savoir les temps d'exécution du processus et de tracer, par exemple, les temps d'attente ou les goulets d'étranglement dans l'execution d'un processus. En effet BAM se base sur un mapping entre l'exécution d'une orchestration Biztalk et un fichier Excel qui contient les données, les dimensions et les mesures du processus métiers. Avec la version 2006 R2 de biztalk on voit apparaitre le BamTrackingService. Celui ci permet d'envoyer à BAM les informations concernant l'exécution non pas d'une orchestration Biztalk, mais d'un Workflow WF. Dans cet article nous allons un peu detourner le comportement de BAM pour tracer non pas les performances ou les temps d'attentes d'un processus mais plutot compter le nombre d'occurence de la valeur d'une variable dans le processus métier.
Application Exemple
L'application exemple est un simple hello world. Voici le résultat d'execution du workflow:
Ce workflow demande le nom, prenom et le sexe de la personne qui utilise le workflow. Le workflow en lui même est le suivant:
Dans notre exemple on va compter les genres de personnes qui utiliseront le workflow (fille, garçon et erreur) l'erreur sera utilisé en cas de faute de frappe par exemple.
BamTrackingService
Comme son nom l'indique, le BamTrackingService est un service WF. Il s'utilise très simplement dans le sens ou son implémentation est identique à celle d'un autre service comme le tracking ou la persistence. Pour cela on créer une instance de BamTrackingService auquel on ajoute la chaine de connexion à la base de données, ainsi que l'intervalle de pooling:
System.Collections.Specialized.NameValueCollection parameters = new System.Collections.Specialized.NameValueCollection();
parameters.Add("PollingIntervalSec", "5");
parameters.Add("ConnectionString", "Integrated Security=SSPI;Data Source=.;Initial Catalog=BAMPrimaryImport");
workflowRuntime.AddService(new BamTrackingService(parameters));
Voila pour le workflow il n'y a rien d'autre a faire. Maintenant on va paramétrer BAM pour qu'il puisse tracer notre workflow.
BamActivity
Premiérement on va paramétrer BAM en utilisant le plugin BAM pour excel. Pour cela on lance Excel sur le serveur Biztalk et on va crée une activity bam et une vue pour afficher les données. On lance l'assistant de création d'activité Bam d'excel:
On créé une activité auquel on ajoute un item Gender qui récuperera les données venant du workflow:
Une fois l'activité créé l'assistant de création de vue se lance a son tour:
On créé une vue en adéquation avec l'activité qu'on vient de créer puis on ajoute les items de l'activité et les alias sur les items:
Bien maintenant on créé la mesure et la dimension qui permettront de compter le nombre de garçon, de fille ou les erreurs:
Voici la mesure:
et voici la dimension:
Maintenant qu'on a les données et les mesures on va les insérer dans la pivot table:
Le principe est le même qu'un cube OLAP.
Pour l'exemple je vais utiliser des données LIVE pour cela j'active le bouton RTA (Real Time Aggregation):
Quand on a finit notre tableau avec nos données on peut le déployer sur le serveur avec l'outil BM:
BM fait deux choses quand on l'utilise avec un fichier XLS, la premiére c'est de déployer l'activité et la vue sur le serveur, puis il créé un fichier live qu'on utilisera plus tard.
BamConfiguration
C'est la partie la plus complexe du processus. Non pas que le principe soit complexe, mais, pour une raison que j'ignore, il n'y a pas d'assistant ou d'aide à la création du fichier qui fera la relation entre la vue et l'activité déployé sur le serveur et le workflow.
Voici le code complet du fichier:
<?xml version="1.0" encoding="utf-8" ?>
<ic:InterceptorConfiguration xmlns:ic="http://schemas.microsoft.com/BizTalkServer/2004/10/BAM/InterceptorConfiguration xmlns:wf="http://schemas.microsoft.com/BizTalkServer/2004/10/BAM/WorkflowInterceptorConfiguration>
<ic:EventSource Technology="WF" Name="Workflow1" Manifest="HelloWorldWorkflowLib.Workflow1, HelloWorldWorkflowLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
<ic:BamActivity Name="HelloWorldActivity">
<ic:OnEvent Name="HelloWorldEvent" Source="Workflow1" IsBegin="true" IsEnd="true">
<ic:Filter>
<ic:Expression>
<wf:Operation Name="GetActivityName" />
<ic:Operation Name="Constant">
<ic:Argument>AskGender</ic:Argument>
</ic:Operation>
<ic:Operation Name="Equals" />
<wf:Operation Name="GetActivityEvent" />
<ic:Operation Name="Constant">
<ic:Argument>Closed</ic:Argument>
</ic:Operation>
<ic:Operation Name="Equals" />
<ic:Operation Name="And" />
</ic:Expression>
</ic:Filter>
<ic:CorrelationID>
<ic:Expression>
<wf:Operation Name="GetContextProperty">
<wf:Argument>EventTime</wf:Argument>
</wf:Operation>
</ic:Expression>
</ic:CorrelationID>
<ic:Update DataItemName="Gender" Type="NVARCHAR">
<ic:Expression>
<wf:Operation Name="GetWorkflowProperty">
<wf:Argument>Gender</wf:Argument>
</wf:Operation>
</ic:Expression>
</ic:Update>
</ic:OnEvent>
</ic:BamActivity>
</ic:InterceptorConfiguration>
Regardons comment il fonctionne:
Premiérement on créé la source des événements. La source des événements est le manifest de la classe du Workflow. On donne un nom à l'event source, par principe on utilise le nom du workflow ici Name="Workflow1" mais on pourrait mettre ce qu'on veut. Ensuite fait le mapping avec l'activité créé par le fichier Excel, ici HelloWorldActivity.
On base le mapping sur un événement du Workflow, l'événement que j'ai choisit et la sortie de l'activité AskGender qui demande le sexe et le mets dans la propriété Gender.
Voici le bout de code qui permet de faire cela:
<ic:OnEvent Name="HelloWorldEvent" Source="Workflow1" IsBegin="true" IsEnd="true">
Ce code permet de crée l'événement par rapport a la source définit plus haut. Ensuite on indique que cette événement sera le début et la fin du tracking. En fait comme on en a pas d'autre le tracking commencera et finira sur cette événement.
<ic:Filter>
<ic:Expression>
<wf:Operation Name="GetActivityName" />
<ic:Operation Name="Constant">
<ic:Argument>AskGender</ic:Argument>
</ic:Operation>
<ic:Operation Name="Equals" />
<wf:Operation Name="GetActivityEvent" />
<ic:Operation Name="Constant">
<ic:Argument>Closed</ic:Argument>
</ic:Operation>
<ic:Operation Name="Equals" />
<ic:Operation Name="And" />
</ic:Expression>
</ic:Filter>
Ici on filtre les événements déclenché par le workflow. On récupére l'événement sur L'activité AskGender qu'on récupére grace à GetActivityName. Ensuite on filtre sur la fermeture de l'activité qui correspond a la sortie de celle ci. Pour cela on utilise GetActivityEvent et on spécifie Closed. Le filtre est "quand l'activité est égal à AskGender ET l'évenement est égal à Closed. Les opérations permette de mettre en place les test d'égalité et l'opérateur AND.
<ic:CorrelationID>
<ic:Expression>
<wf:Operation Name="GetContextProperty">
<wf:Argument>EventTime</wf:Argument>
</wf:Operation>
</ic:Expression>
</ic:CorrelationID>
La correlation permet de regrouper les événements. Ici on utilisera le temps car on ne veut pas de regroupement mais dans la plupart des cas on utilisera IntanceID.
<ic:Update DataItemName="Gender" Type="NVARCHAR">
<ic:Expression>
<wf:Operation Name="GetWorkflowProperty">
<wf:Argument>Gender</wf:Argument>
</wf:Operation>
</ic:Expression>
</ic:Update>
Ici on indique ce que l'interceptor doit faire, en l'occurence mettre à jour la propriété Gender avec la valeur de la variable Gender du workflow.
Maintenant on a plus qu'à déployer notre fichier de configuration, toujours avec l'utilitaire BM:
Execution
Bien passons à l'éxécution. Pour cela on va exécuter plusieur fois le Workflow pour remplir la base de données BAM:
On va commencer par ouvrir le fichier Excel live qui a été créé par le déploiement du fichier Excel de configuration de BAM:
Comme vous pouvez le voir on a le décompte des informations entré dans le workflow.
L'avantage de BAM c'est le portail qui se base sur Sharepoint (2003 pour l'instant)
Dans ce portail on a les même information que dans le fichier Excel.
Conclusion
BAM est un tres gros avantage de Biztalk 2006 R2, il permet de facilement tracer l'exécution du processus métier. Le fait qu'il soit possible d'integrer WF avec offre un gros avantage a WF. La question qui se pose est quand est ce que Microsoft vendra BAM sans Biztalk ;)).
Format: wmv
Duration: --:--