Mise en place d’un flux d’approbation dans Camunda

BPMN la norme mondialement connue pour la modélisation des processus

Mise en place d’un flux d’approbation dans Camunda

Camunda Processus d'approbation du flux

Peu d’articles existent en français sur Camunda et pourtant c’est un très bon moteur de BPM. Pour commencer, à quoi peut bien servir un moteur de BPM et la norme BPMN ? tout simplement à automatiser un ou plusieurs processus. Par exemple les demandes de congés, la gestion des demandes et des commandes fournisseurs etc. Votre entreprise a forcement des processus déjà en place mais sont-ils automatisés ?

Camunda n’est pas le seul outil de BPM, AirK2 est partenaire de deux autres applications :

Alors pourquoi en proposer un troisième ?

Camunda à des avantages comme le respect de la norme BPMN et des inconvénients. Une fois n’est pas coutume commençons par les Inconvénients.

  • Il n’y a pas d’éditeur évolué pour la conception des formulaires, vous ne pouvez de base uniquement faire des formulaires simples. Si vous souhaitez des formulaires plus complexes vous devez
    • soit passer par le développement
    • soit par des applications externes comme LinkCarto ; notre application des cartographies qui vous permet aussi de créer les formulaires compatibles avec Camunda et Iterop.
  • Il est nécessaire de faire un peu de code, comme par exemple, du javascript pour utiliser les éléments du flux.

Mise à part cela Camunda est un, voir le meilleur et plus complet, des moteurs de flux BPMN que nous avons pu tester pour le moment et cela sur plusieurs éléments :

  • La possibilité de mettre des diagrammes DMN dans le flux. A quoi peut bien servir un diagramme DMN ?

DMN

Decision Model and Notation (mieux connue sous le sigle DMN) est une norme publiée par l’Object Management Group (OMG) et de facto un langage de modélisation qui permet d’avoir une approche standard pour décrire et modéliser des décisions et règles métiers reproductibles au sein d’organisations. Source : Wikipédia

Mais encore …

Pour faire simple, un diagramme DMN dans Camunda vous permet de mettre en place un processus de décision. Cela est très pratique dans un flux pour indiquer le bon chemin suivant certaines informations.

Exemple

Prenons par exemple une facture; dans le cas où une facture à une somme comprise entre 1 000€ et 10 000€ venant du fournisseur ‘A’ doit être validée par Mr DUPOND mais si elle vient du fournisseur B elle doit être validée par Mr MARTIN.

La chaîne de décision est souvent bien plus complexe dans la réalité mais cela permet de montrer l’intérêt du DMN.

Dans notre exemple nous utiliserons un DMN pour récupérer les informations sur les personnes pour la validation d’une facture, d’un devis ou d’un avoir.

  • Camunda est un outil open source, une version entreprise est disponible avec licence mais la base est open source. Pour cet article nous utiliserons la version gratuite de cet outil.
  •  La prise charge de la norme BPMN 2.0 dans sa globalité.

D’autres points positifs peuvent être notés. Toutefois, nous allons passer à la conception du flux.

Présentation du flux

Vue générale du flux
Vue générale du flux

Ce flux permet d’affecter à tous les utilisateurs concernés une tâche d’approbation. Pour savoir à qui affecter la ou les tâches, le flux commence par appeler un flux DMN.

Vue du DMN pour la prise de décision
Vue du DMN pour la prise de décision

Comme vous pouvez remarquer dans les inputs, si le document est une facture, il sera demandé deux approbations. Si c’est un devis, une seule approbation sera demandée. Les DMN peuvent devenir bien plus complexe. Nous le détaillerons dans le prochain article.

Démarrage du flux

Au début de cet exemple le flux vous demandera le type de document.

Début du flux en utilisation
Début du flux en utilisation

Ce formulaire reste simple. Prochainement, un article sera dédié à la mise en place de formulaires plus évolués en reposant sur les derniers concepts de développement web.

DMN récupération des approbateurs

Activité de récupération des informations dans le DMN
Activité de récupération des informations dans le DMN

Cette activité demande plusieurs paramètres afin de pouvoir fonctionner. En premier, lieu il est nécessaire d’indiquer le type d’implémentation. Dans notre cas, ce type est DMN puis indiquer la référence de ce diagramme.

Attention, ce diagramme de référence doit aussi être déployé sur le serveur.  

Ensuite, indiquer le nom de la variable de sortie. Cette variable contiendra toutes les informations qui seront retournées par le DMN et sur lesquelles nous pourrons effectuer le multi-tâches (l’itération d’affectation des tâches utilisateurs).  

Dans la partie « Map Decision Result » indiquer le type de retour, dans cet exemple de flux nous attendons plusieurs lignes, donc nous récupérons une liste.

Paramétrage

Paramétrage de la récupération des sortie du DMN
Paramétrage de la récupération des sortie du DMN

Afin que le DMN puisse nous renvoyer les bonnes informations il est nécessaire de lui passer les inputs adéquats. Dans cet exemple, il est seulement demandé le type du document. Ce type provient du choix fait lors du démarrage du flux :

Choix du type du document
Choix du type du document

Ce choix est stocké dans la variable « Type_Doc ». Donc, nous passons la valeur de cette variable en entrée de notre DMN.

Envois des données en entrées pour le DMN
Envois des données en entrées pour le DMN

Itérer sur la liste des approbateurs 

Multi-instance du sous-processus
Multi-instance du sous-processus

Pour effectuer cette itération nous passons par un sous-processus. Si nous souhaitions uniquement affecter les tâches à plusieurs personnes, nous aurions pu rendre l’activité « Task » parallèle en multi-instance. Cependant le fait de devoir envoyer un mail à l’approbateur, de gérer les relances et de vérifier que l’utilisateur à bien une adresse mail configurée, il est plus simple de passer par un sous processus configuré en multi-instance parallèles. Le sigle des trois barres verticales et parallèles permet d’effectuer du multi instance. Le fait qu’elles soient verticales signifie que toutes les instances seront déclenchées en même temps. Dans l’hypothèse où vous souhaitez qu’elles soient déclenchées l’une après l’autre, vous pouvez sélectionner les trois barres horizontales.

Paramétrage des données pour l'itération
Paramétrage des données pour l’itération

Le paramétrage du sous processus pour le multi-instance demande au minimum 2 choses :

  • La collection d’objet contenant les données sur lesquelles itérer.
  • La variable dans laquelle sera stockée la donnée durant l’itération.
Itération…

Chaque itération aura sa propre instance de cette variable.   Dans notre exemple de flux, nous rajoutons une condition permettant de finir toutes les instances de ce sous-processus (si cette condition est remplie).

Dans ce contexte, nous arrêtons le sous processus si plus de 60% des tâches sont réalisées. Pour ce faire, nous utilisons 2 variables « système » qui sont gérées par Camunda.  

Détail du sous processus

Passons maintenant au détail du sous processus qui est, pour notre exemple, l’élément principal du flux.

Sous-processus d'approbation
Sous-processus d’approbation

Condition de bordure

Quoi qu’il se passe dans ce sous-processus, un élément de bordure permet de terminer toutes les tâches en cours si la condition est remplie. Dans ce cas si un approbateur n’approuve pas la tâche qui lui a été affectée, le processus stop toutes les instances du sous-processus.

Paramétrage de la condition de sortie du sous-processus
Paramétrage de la condition de sortie du sous-processus

La condition qui permet de mettre fin aux instances est qu’un approbateur n’approuve pas la tâche. Pour cela, la condition va surveiller la réponse du formulaire de la tâche et plus particulièrement le champ booléen nommé « FormField_Approuve ».   Si ce champ prend la valeur « false » donc négative, l’évènement de bordure se déclenche.   Si cette condition se déclenche, le flux affecte une tâche à un utilisateur puis termine le processus.

La porte Exclusive

La porte exclusive présente dans le sous processus permet de vérifier si l’utilisateur à bien une adresse mail ou non. Pour rappel que ce flux n’est qu’un flux de démonstration. Dans un cas réel nous formaliserions cela autrement afin d’affecter la tâche au responsable de la personne ou à la personne directement sans lui envoyer de mail.

BPMN et les signaux…

Afin de vous montrer l’utilisation des signaux dans un processus BPMN, si la personne n’a pas d’adresse mail, nous déclenchons un signal d’erreur qui sera capté par un processus que nous expliquerons plus loin dans ce document.

En soi il n’y a pas de paramétrage dans cet élément. Ce qu’il faut configurer ce sont les sorties et les flèches qui partent de la porte vers les autres activités. Une porte exclusive permet de partir sur une et une seule sortie qui correspond à la bonne condition.

Activité d'envoi de mail
Activité d’envoi de mail

La première flèche qui part de la porte exclusive est légèrement barrée. Cela signifie tout simplement que c’est le chemin par défaut si l’informations qui transite dans la porte ne remplit aucune des autres conditions de sorties.   La deuxième sortie envoie le flux sur le déclenchement du signal représenté par le triangle noir entouré d’un cercle double. Le fait que le triangle soit noir indique l’émission du signal.

Paramétrage de la condition "Si pas de mail"
Paramétrage de la condition « Si pas de mail »

La sortie vers le signal se configure simplement. Pour cela, nous utilisons une expression. Souvenez-vous, le sous-processus est en multi-instance. Il fait ses itérations sur le contenu de la variable « DMN_OUTPUT » et pour chaque itération il met la valeur dans la variable « information ».

Que contient « Information » ?

Cette variable contient le nom et le mail de l’approbateur en cours dans l’itération. Pour récupérer l’information ‘user’ et ‘mail’ de cette variable de type « java.util.HashMap », il suffit de faire information.get(‘mail’) pour avoir le mail et information.get(‘user’) pour avoir le nom de l’approbateur (voir la présentation du flux pour le descriptif du contenu du DMN) .

Puis, dans la partie « Condition type » de la configuration de la flèche de sortie, il suffit de sélectionner dans condition type « Expression » et dans le champ  » Expression « , mettre la condition « ${information.get(‘user’)  == null} ». Dans le cas où l’utilisateur n’a pas d’adresse mail configurée, le flux (ou jeton) passe par ce chemin de sortie de la porte exclusive.

Envoi d’un mail dans Camunda

Par défaut, Camunda ne permet pas d’envoyer directement un mail depuis une activité du flux. Il est nécessaire de passer par un service externe. Étant donné que la base de Camunda est un outil open source, il bénéficie d’une communauté et de nombreux outils complémentaires.

Un article sera prochainement dédié à cette partie ainsi que sur les outils complémentaires pour la modélisation des flux dans Camunda.

Le complément pour l’envoi de mail

Dans notre exemple, nous avons intégré le complément « camunda-bpm-mail-core » dans sa version 1.2.0.

Activité d'envois de mail
Activité d’envoi de mail

L’envoi de mail se fait avec une activité de type « Service Task» en BPMN, il n’y a pas de représentation  » envoi de mail « . Il ne faut pas confondre avec l’activité BPMN d’envoi de message.  

Les « service task » permettent d’appeler des services extérieurs, d’exécuter des expressions et d’autres éléments. La sortie de cette activité donne lieu à l’affectation de la tâche.

Paramétrage du connecteur
Paramétrage du connecteur

Pour utiliser le connecteur « camunda-bpm-mail-core », sélectionner « Connector » dans la partie « Implementation ». Un nouvel onglet est disponible « Connector » permettant de paramétrer l’utilisation de « camunda-bpm-mail-core »

Configuration du connecteur pour le mail de destination BPMN CAMUNDA
Configuration du connecteur pour le mail de destination

En premier lieu, il est nécessaire d’indiquer « mail-send » dans « Connector Id » permettant ainsi d’indiquer au connecteur que nous allons envoyer un mail.  

Pour configurer le mail, trois éléments sont nécessaires.

  • To : Destinataire du mail
  • Subject : Sujet du mail
  • Html : Permet de construire le corps du mail

Dans notre flux, nous allons récupérer le mail depuis la variable d’instance du sous-processus nommé information.

Nous l’avons vu lors de la porte exclusive, il suffit de faire : ${information.get(‘mail’)} .   Il est possible d’ajouter plusieurs inputs, toute la liste est disponible sur la page du connecteur.  

Configuration du connecteur pour le sujet BPMN CAMUNDA
Configuration du connecteur pour le sujet

L’input « subject » de type « text » vous permet de paramétrer le sujet. Vous pouvez concaténer du texte libre avec la valeur d’une ou plusieurs variables.  

Configuration du connecteur pour le contenu BPMN CAMUNDA
Configuration du connecteur pour le contenu

Dans la configuration du corps du message nous ajoutons un texte avec les balises HTML. Cela fait partie des petits inconvénients de Camunda.

Ace jour, il n’y a pas de plugins dans le modeler pour éditer le HTML. Vous pouvez remarquer dans cet exemple qu’il est tout à fait possible d’intégrer des variables d’instance pour insérer des valeurs comme le nom de l’utilisateur.  

Affectation de la tâche

Une tâche utilisateur est une activité dans le BPMN qui permet de faire interagir un utilisateur avec le flux afin, de demander par exemple une approbation (comme dans notre exemple). A ne pas confondre avec la tâche manuelle.

Une tâche manuelle permet d’indiquer qu’une action est requise mais ne nécessite aucun interaction avec une application. Il n’y a pas de pause dans le flux.

Par exemple le transport d’un colis : dans un flux de commande d’article sur un site de e-commerce avec la livraison et la réception du colis.

Activité d'assignation d'une tâche BPMN camunda
Activité d’assignation d’une tâche

Notre tâche d’approbation permet d’assigner une tâche à l’utilisateur en cours dans l’instance du sous processus. Cette tâche est disponible dans l’application web de Camunda. Voir la capture écran suivant.  

Liste des tâche dans camunda BPMN dans camunda
Liste des tâche dans camunda

Un évènement de bordure de type ‘timer’ permet d’effectuer une action au bout d’un certain temps, voir le paragraphe suivant.

Paramètres

Paramétrage pour assigner la tâche BPMN dans camunda
Paramétrage pour assigner la tâche

Une tâche se paramètre de plusieurs manières. La philosophie de Camunda est légèrement différente des autres outils de BPM que nous proposons chez AirK2. Il respecte complètement la norme BPMN 2.0.  

« …Assigner à un utilisateur… à un groupe … ou à plusieurs utilisateurs ? … »

Dans Camunda il est possible d’assigner la tâche à un utilisateur (comme fait dans notre exemple). Il est également possible d’affecter une tâche à un ou plusieurs groupes. Dans ce cas, la tâche n’est pas assignée à une personne, seul les membres des groupes peuvent s’attribuer la tâche.

Vous pouvez indiquer un ou plusieurs utilisateurs mais sans leur assigner directement de tâche, comme pour les groupes, seuls les utilisateurs désignés pourront se l’attribuer.

Configuration du formulaire de la tâche user BPMN dans camunda
Configuration du formulaire de la tâche user

Afin de permettre à l’utilisateur d’interagir, il faut lui permettre de renseigner des informations. De base, Camunda propose de créer des champs mais sans plus. Vous avez la possibilité de créer des formulaires HTML et de les rendre disponibles dans l’outil, ou tout simplement d’appeler des formulaires extérieurs. Nous verrons ces différentes parties dans un prochain article.  

« …formulaire simple… »

Pour notre exemple actuel, nous passons par la conception d’un formulaire simple dans les paramètres de l’activité.   Dans l’onglet « Forms » nous allons ajouter deux champs pour notre exemple. Le champ « FormField_Information » est une zone de saisie donc de type « string » avec un label. La petite spécificité est l’ajout de « Required » permettant d’indiquer que ce champ est obligatoire.

Le champ FormField_Approuve est une case à cocher permettant de savoir si l’utilisateur valide ou non la tâche.

Fin du processus BPMN dans camunda
Fin du processus

Une fois la tâche approuvée, le sous processus s’arrête. Dès que 60% des tâches sont approuvées (paramétrer dans le multi-instance), le processus entier s’arrête.Le processus entier s’arrête.

Événement de bordure « Timer » et envoi d’un mail de relance

Les événements de bordure permettent soit d’arrêter l’activité sur laquelle ils sont placés, soit d’effectuer un ensemble d’actions sans arrêter l’activité, quand la bordure est en pointillé.

« La norme ISO 8601 »

Pour notre exemple, nous utilisons un événement de bordure de type « Timer ». Il fait partie de la norme BPMN 2.0. Cet élément permet de déclencher une action au bout d’un certain temps. Il se paramètre en tenant compte de la norme « ISO 8601 ».

Pour définir (comme dans notre exemple) un déclenchement au bout de 10 min la notation est PT10M.

Détail du paramétrage

Période

P est l’indicateur de durée (pour la période), placé au début de la représentation de la durée.

  • Y est l’indicateur d’année qui suit la valeur du nombre d’années.
  • M est l’indicateur de mois qui suit la valeur du nombre de mois.
  • W est l’indicateur de semaine qui suit la valeur du nombre de semaines.
  • D est l’indicateur de jour qui suit la valeur du nombre de jours.
Temps

T est l’indicateur temporel qui précède les composantes temporelles de la représentation.

  • H est l’indicateur d’heure qui suit la valeur du nombre d’heures.
  • M est l’indicateur de minutes qui suit la valeur du nombre de minutes.
  • S est le deuxième indicateur qui suit la valeur du nombre de secondes.

Par exemple, pour déclencher le timer dans 3 ans, 2 mois, 5 jours et 10 h on notera cela comme : P3Y2M5DT10H.

En pratique, vous pouvez aussi indiquer le déclenchement avec une date et une heure : 2020-04-06T13:30

Evènement de bordure BPMN dans camunda
Evènement de bordure
Cercle plein ou en pointillé…

L’événement de bordure à deux cercles à bordure plein. Cela signifie que le « timer » se déclenche, la tache s’annule et le flux réassigne une nouvelle tâche après l’envoi du mail. Nous aurions pu mettre un événement de bordure en pointillés qui auraient permis de ne pas arrêter la tâche.

Paramètres

Paramétrage du timer BPMN dans camunda
Paramétrage du timer

Indiquer « Duration » dans la zone « Timer Definition Type », afin d’indiquer que notre timer se déclenche après un certain temps et non pas à une date prédéfinie.  

Paramétrer à 10 min

Dans « Timer Definition » nous indiquons PT10M pour indiquer que nous souhaitons déclencher la relance après 10 minutes.

Envois du mail pour la relance BPMN dans camunda
Envoi du mail pour la relance

Pour donner suite au déclenchement du « Timer » nous renvoyons un mail de relance à l’utilisateur. Le paramétrage reste identique à la première activité d’envoi de mail. Nous avons simplement adapté le message pour informer que c’est une relance.

Gestion des erreurs

Dans cet exemple de flux d’approbation, nous avons mis un petit flux pour gérer à part tous les signaux émis dans le flux portant le nom « Erreur ». Ce flux est très simple, mais il est présent pour montrer la manière qu’offre le BPMN, et donc Camunda, dans la gestion des erreurs.

Portes ou signaux ? ….

Bien sûr il peut y avoir plusieurs flux gérant plusieurs signaux. Nous aurions pu utiliser une porte « Event Based » pour gérer le déclenchement d’actions à la réception d’un signal.

Processus en cas d'erreur BPMN dans camunda
Processus en cas d’erreur
Déclenchement par signal BPMN dans camunda
Déclenchement par signal

Le point de départ de ce flux est un « Signal Start » permettant de démarrer automatiquement le flux lors du déclenchement du signal. Dans notre cas, le signal est « Erreur ».

Paramètres

Paramétrage de la réception du signal
Paramétrage de la réception du signal

Pour se faire, il suffit de sélectionner le signal dans la liste déroulante.

Envois d'un mail pour signaler l'erreur
Envois d’un mail

Par la suite ce flux envoie un mail (toujours en utilisant le connecteur « camunda-bpm-mail-core »)

Affectation d'une tâche pour la gestion des erreurs
Activité d’une tâche

Et nous finissons en assignant une tâche à un utilisateur.

Conclusion

Même si cet exemple de flux reste simple dans sa fonctionnalité, il n’en est pas moins important. Au lieu de refaire X fois une approbation dans vos flux, vous pouvez appeler ce flux à la demande. Améliorer le DMN pour permettre d’avoir les bonnes personnes pour les approbations.

Validation par une signature

Vous pouvez mettre en place la signature numérique, avec un tiers de confiance par l’intermédiaire d’un appel à un service web.

Pour tout complément d’informations vous pouvez nous contacter sur :

Nos services : http://bpmn.lu/bpmn-service/

Notre page LinkedIn : https://www.linkedin.com/company/airk2/

Par mail : contact@airk2.lu

Laisser un commentaire

Translate »