Cas d’utilisation : supervision de vos workflows supervising-workflows
Ce cas pratique détaille la création d'un workflow qui permet de suivre le statut d'un ensemble de workflows dont l'état est "en pause", "stoppé" ou "en erreur".
Son objectif est le suivant :
- Utiliser un workflow pour suivre un groupe de workflows métiers.
- Envoyer un message à un superviseur via une activité "diffusion".
Pour suivre le statut d'un ensemble de workflows, vous devez procéder comme suit :
- Créer le Workflow de suivi.
- Ecrire le JavaScript permettant de déterminer les workflows ayant le statut en erreur, en pause ou stoppé.
- Créer l'activité Test.
- Préparer le modèle de diffusion.
Etape 1: Création du workflow de suivi step-1--creating-the-monitoring-workflow
Le dossier de workflows que nous allons suivre est le dossier "CustomWorkflows" stocké dans le noeud : Administration > Exploitation > Workflows Techniques. Ce dossier contient un ensemble de workflows métiers.
Le workflow de suivi est stocké à la racine du dossier Workflows Techniques. Le libellé utilisé est "Suivi".
Le schéma suivant montre l'ordonnancement des activités :
Ce workflow se compose de :
- une activité "Début".
- une activité "Code JavaScript" responsable de l'analyse du dossier de workflows métiers.
- une activité "Test" pour lancer une diffusion vers le superviseur ou relancer le workflow.
- une activité "Diffusion" responsable de la mise en forme du message.
- une activité "Attente" contrôlant l'intervalle de temps entre les itérations du workflow.
Etape 2: Ecriture du JavaScript step-2--writing-the-javascript
La première partie du code JavaScript correspond à une requête (queryDef) permettant d'identifier les workflows ayant un statut "pause" (@state == 13), "erreur" (@failed == 1) ou "stoppé" (@state == 20).
Le nom interne du dossier de workflow à suivre est donné dans la condition suivante :
<condition boolOperator="AND" expr="[folder/@name] = 'Folder20'" internalId="1"/>
var strError = "";
var strPaused = "";
var strStop = "";
var queryWkfError = xtk.queryDef.create(
<queryDef schema="xtk:workflow" operation="select">
<select>
<node expr="@internalName"/>
<node expr="@state"/>
<node expr="@label"/>
<node expr="@failed"/>
<node expr="@state"/>
</select>
<where id="12837805386">
<condition boolOperator="AND" expr="[folder/@name] = 'Folder20'" internalId="1"/>
<condition boolOperator="AND" internalId="2">
<condition boolOperator="OR" expr="@state = 20" internalId="3"/>
<condition expr="@state = 13" internalId="4"/>
</condition>
</where>
</queryDef>
);
var ndWkfError = queryWkfError.ExecuteQuery();
La deuxième partie du code JavaScript permet d'afficher un message pour chaque workflow en fonction du statut remonté lors de la requête.
for each ( var wkf in ndWkfError.workflow )
{
if ( wkf.@state == 13 ) // Status 13 = paused
{
if ( wkf.@failed == 1 )
strError += "<li>Workflow '" + wkf.@internalName + "' with the label '" + wkf.@label + "'</li>";
else
strPaused += "<li>Workflow '" + wkf.@internalName + "' with the label '" + wkf.@label + "'</li>";
}
if ( wkf.@state == 20 ) // Status 20 = stop
strStop += "<li>Workflow '" + wkf.@internalName + "' with the label '" + wkf.@label + "'</li>";
}
vars.strWorkflowError = strError;
vars.strWorkflowPaused = strPaused;
vars.strWorkflowStop = strStop;
Etape 3: Création de l'activité 'Test' step-3--creating-the--test--activity
L'activité "Test" permet de déterminer si une diffusion doit être envoyée ou bien si le workflow de suivi doit recommencer un cycle en se positionnant sur l'activité "Attente".
Une diffusion est envoyée au superviseur si au moins une des trois variables d'événements "vars.strWorkflowError", "vars.strWorkflowPaused", "vars.strWorkflowStop" est non nulle.
L'activité "Attente" peut être paramétrée pour relancer le workflow de suivi à intervalle régulier. Pour ce cas pratique, la durée d'attente est fixée à une heure.
Etape 4: Préparation de la diffusion step-4--preparing-the-delivery
L'activité "Diffusion" est basée sur un modèle de diffusion stocké dans le noeud Ressources > Modèles > Modèles de diffusion.
Ce modèle doit comporter :
-
l'adresse mail du superviseur.
-
un contenu HTML permettant d'insérer du texte personnalisé.
Les trois variables déclarées (WF_Stop, WF_Paused, WF_Error) correspondent aux trois variables d'événements du workflow.
Ces variables doivent être déclarées dans l'onglet Variables des propriétés du modèles de diffusion.
Afin de récupérer le contenu des variables d'événements du workflow, il est nécessaire de déclarer des variables propres à la diffusion qui seront initialisées avec les valeurs retournées par le code JavaScript.
Le contenu de modèle de diffusion est le suivant :
Une fois le modèle crée et validé, vous devez configurer l'activité Diffusion pour:
- lier l'activité "Diffusion" avec le modèle de diffusion précédemment crée.
- lier les variables d'événements du workflow avec les variables propres au modèle de diffusion.
En double cliquant sur l'activité Diffusion, choisissez les options suivantes :
-
Diffusion : sélectionnez Nouvelle, créée depuis un modèle, et sélectionnez le modèle de diffusion créé précédemment.
-
Pour les champs Destinataires et Contenu, sélectionnez Spécifiés dans la diffusion.
-
Action à effectuer : sélectionnez Préparer et démarrer.
-
Décochez l'option Traiter les erreurs.
-
Dans l'onglet Script de l'activité Diffusion, ajoutez trois variables de type chaîne de caractères via le sélecteur de champs de personnalisation
Les trois variables déclarées sont :
code language-none delivery.variables._var[0].stringValue = vars.strWorkflowError; delivery.variables._var[1].stringValue = vars.strWorkflowPaused; delivery.variables._var[2].stringValue = vars.strWorkflowStop;
Une fois lancé, ce workflow de surveillance envoie au destinataire de la diffusion un message récapitulatif.