Archives du mot-clé State machine worklow

Création d’un workflow de type State Machine (machine à état) SharePoint 2013


Cet article fait partie d’une série concernant la mise en oeuvre de liste externes et de workflows avec SharePoint. Les étapes suivantes seront passées en revue :

_______________________________________________________________________________________________

Besoin fonctionnel

Je veux pouvoir gérer toutes les tâches liées à l’arrivée d’un nouveau salarié dans mon entreprise, comme par exemple :

  • l’attribution de son bureau
  • l’attribution de son numéro de téléphone fixe et mobile (s’il doit avoir un mobile professionnel)
  • la création de son compte AD et de son adresse email Exchange (avec possibilité d’automatisation)
  • l’attribution de droits sur les applications de l’entreprise
  • etc.

Les information concernant ce nouveau collaborateur étant renseignées en premier lieu dans une application RH dotée d’une base de donnée SQL Serveur.

Chaque équipe concernée devra pouvoir valider chacune des étapes afin de tracer et finaliser le processus avant la date d’entrée du nouveau collaborateur.

Conception générale

Considérant ce besoin fonctionnel, il pourra être traduit dans SharePoint de la manière suivante :

  • un type de contenu externe « Personne » issu d’une base de la données RH (cf. articles précédents) ainsi que sa liste externe associée
  • une liste « Fiche accueil nouveau collaborateur » qui référence le type de contenu externe « Personne » et qui vient ajouter des colonnes telles que :
    • attribution téléphone portable
    • véhicule de fonction
    • emplacement bureau
    • etc.
  • un workflow SharePoint 2013 associé à cette liste
  • des groupes SharePoint correspondants à chaque service impliqué dans le processus (RH, moyens généraux, support IT)
  • éventuellement des types de contenu spécifiques pour les tâches de workflow afin que l’on puisse saisir le numéro de téléphone ou la plaque d’immatriculation attribuée lorsque celle-ci est terminée
  • un event handler permettant de récupérer les informations saisies lors de la validation de la tâche et venir compléter la fiche d’accueil
  • une webpart affichant les tâches affectées à l’utilisateur courant (même si ceci est déterminé via un groupe SharePoint)
  • un event handler permettant de rende la tâche visible uniquement par le groupe d’utilisateur auquel elle est affectée

Création du workflow machine à état avec Visual Studio 2012

Considérons qu’une nouvelle instance de liste « FicheAccueil » a déjà été créée avec les champs suivants :

  • Titre : une ligne de texte
  • Personne  : BusinessData
  • Téléphone mobile : booléen
  • Véhicule de fonction : booléen
  • Numéro de mobile : une ligne de texte
  • emplacement bureau : liste de choix

Se conférer aux posts précédents afin de voir comment référencer une colonne de données externe dans une liste / un type de contenu.

Ajouter un nouvel élément de type « Flux de travail » de liste au projet SharePoint. L’associer à la liste « FicheAccueil » créée au préalable.

workflow sharepoint 2013

list workflow sharepoint 2013

workflow sharepoint 2013paramètrage workflow sharepoint 2013

Identifier le workflow, les listes créées (historique et tâches) ainsi que ses propriétés. Les modifier si nécessaire.

workflow properties sharepoint 2013

Dans le designer qui vient de s’ouvrir (workflow.xaml) renommer la séquence par défaut en « Séquence racine ».

root sequence workflow sharepoint

Créer la machine à état avec ses étapes et ses transitions

Y ajouter une séquence « machine à état » (StateMachine ») depuis la boîte à outils et double cliquer sur le logo en haut à gauche de cette séquence comme indiqué dans le screenshot ci-dessous.

state machine workflow sharepoint 2013

statemachine workflow

Insérer les états de la fiche d’accueil tout au long de son cycle de vie. Ceci se fait en sélectionnant l’item « state » dans la boîte à outils.

états workflow sharepoint 2013

Ajouter un état final. Glisser déposer l’élément « FinalState » depuis la boîte à outils.

finalstate workflow sharepoint 2013

Ajouter des transitions entre chacune des étapes (elles se créent manuellement et très simplement avec votre souris en traçant un lien entre chaque étape)

transition machine à états workflow sharepoint

Modifier la première étape et ajouter des logs au workflow

Double cliquer sur l’étape d’INIT sur le logo en haut à gauche. Insérer un événement de log dans l’historique avec le texte « Début du workflow Accueil Nouveau collaborateur ». Noter que le texte doit être entre guillemet et qu’il est possible d’accéder à de nombreuses fonctions et autre variables depuis l’éditeur d’expressions (accessible dans la fenêtre propriétés).

workflow writetohistory sharepoint

S’il y a une erreur quelconque de validation de workflow celle-ci est visible via une petit icone bleue qui apparaît dans le coin supérieur droit de chacun des éléments parents concernés. Le survol de cette icône affiche la source de l’erreur.

erreur workflow sharepoint 2013

Ajouter un élément « WriteLine » ou un élément de « DEBUG » en phase d’output de l’INIT. Ceci permet juste de valider cette première étape et le fait que le workflow soit bien lancé. Il est possible d’instancier des variables ainsi que de logguer des informations beaucoup plus riches à cette étape.

writeline sharepoint 2013

Modifier la séquence de l’état « approbation manager » afin d’assigner une tâche d’approbation de cette fiche d’accueil au manager de ce futur collaborateur.  Le groupe auquel est affecté cette tâche est sélectionné dynamiquement en fonction du service. La transition entre les 2 états reste inchangée.

Récupérer une valeur dynamique depuis les éléments SharePoint

Ajouter un élément de type « LookupSPListItem » et modifier ses propriétés afin de le faire pointer vers l‘élément courant et la liste courante (celle sur laquelle est branchée le workflow). Créer une variable de type « DynamicValue » et de portée « séquence » afin de stocker l’élément récupéré en sortie.

lookupsplistitem workflow sharepoint

Ajouter une activité « GetDynamicValueProperties » à la séquence via la boîte à outil en glisser déposer. Cette activité permet d’aller récupérer des valeurs de champs en OData depuis n’importe quel élément SharePoint passé en INPUT.

getdynamicvalueproperties workflow sharepoint

Lui passer votre SPListItem récupéré au préalable en INPUT.

getdynamicvalueproperties source sharepoint

Sélectionner ensuite les colonnes dont vous voulez récupérer la valeur dans les propriétés. Pour cela sélectionner « Elément de liste FicheAccueil » en tant que type d’entité, sélectionner ensuite la ou les colonne(s) dont vous voulez la valeur (ici le service et l’auteur) et cliquer sur « remplir les variables » afin d’ajouter des noms de variable automatiquement.

getdynamicvalueproperties entity sharepoint workflow

Changer la portée d’une variable de workflow

Le nom des variables créées peut alors être modifié si nécessaire. Une nouvelle variable de portée « séquence » est apparue. Changer son scope si celle-ci doit être réutilisée hors de cette séquence.

variable workflow sharepoint 2013

Ajouter une activité permettant de tracer le nom du service récupéré dans les la liste d’historique de workflow

LogToHistory workflow sharepoint

Ajouter une conditionnelle dans le workflow

Puis en fonction du nombre de conditions ajouter une conditionnelle ou un switch. Dans notre cas un « if » suffit. Celui-ci va comparer la valeur du champs « service » récupéré avec notre variable inscrite ici en dur mais qui peut être récupérée depuis votre futur environnement via configuration ou n’importe quelle liste.

condition if workflow sharepoint

Assigner une tâche de workflow et modifier sa date d’échéance

Assigner une tâche au groupe « Manager du service 1 ». Pour cela glisser déposer une « singleTask » depuis la boîte à outils dans la clause la partie « then ».

singletaks workflow sharepoint 2013

Modifier les propriétés de cette tâche afin qu’elles conviennent à votre processus. Dans mon cas le groupe à qui elle est affectée est « Manager Service 1 », celui-ci correspond à un groupe SharePoint créé au préalable ou via une feature déployée par votre projet de workflow.

singletask properties workflow sharepoint

La « Date d’échéance » est créée à date de création de la tâche + 3 jours. Ceci ne correspond pas à 3 jours ouvrés, pour cela un algo spécifique devrait être mis en place pour calculer la date par rapport à un calendrier de travail annuel passé en INPUT.

Le corps du message a également été modifié.  D’autres propriétés non visibles sur l’écran ci dessus peuvent être modifiées via la fenêtre de propriétés de la tâche.

Récupérer le résultat d’une tâche de workflow

Il faut noter l’apparition d’une nouvelle variable nommée « outcome_0 » qui correspond à la valeur de sortie de cette activité. Si celle-ci est égale à 0, cela signifie que la tâche a été approuvée, une autre valeur signifie qu’elle a été rejetée si nous n’avons que ces deux possibilités.

outcome_0 workflow task sharepoint

La renommer en « tacheManager » et changer sa portée au niveau « state machine », le reporter dans les propriétés de la tâche.

task outcome workflow sharepoint

Ajouter ensuite une activité « WriteToHistory » afin de logguer qu’une tâche a bien été affectée au manager du service. Noter que la portée de la variable « service1 » a été modifiée afin que je puisse y accéder au niveau mon état « approbation manager » et non plus de ma séquence.

writetohistory workflow sharepoint 2013

Modifier une transition

Modifier la transition pour le passage au 2e état en fonction de l’approbation de la tâche.

transition workflow SharePoint 2013

Ouvrir la transition en cliquant sur T2 afin de définir la séquence suivante pour envoyer un email à l’initiateur du workflow une fois la tâche approuvée :

Si la tâche a été approuvée, alors :

workflows transition sharepoint 2013

Envoyer un email à l’initiateur du Workflow

Dans la zone d’action ajouter un élément de type « LookupWorkflowContextProperty » afin de récupérer l’initiateur du workflow.

lookupworkflowcontextproperty sharepoint 2013

Créer une nouvelle variable nommée « initiateur » afin d’y stocker le résultat de cette requête.

workflow SharePoint 2013 variable

Sélectionner cette variable comme élément de sortie de l’action précédente

workflow sharepoint 2013

Créer une nouvelle variable de nommée « destinataire » de type System.Collections.ObjectModel.Collection<T> choisir ensuite le type « String » afin de ne pas laisser le type Générique.

send email sharepoint 2013 workfow visual studio

 

send email workflows sharepoint 2013

 

System.ObjectModel.Collection

Ensuite ajouter l’initiateur à la liste des destinataires de l’email. Pour cela utiliser l’activité « BuildCollection<T> » typée en « String ».

BuildCollection sharepoint 2013 workflow

 

Dans les propriété de cette activité, ajouter des valeurs en cliquant sur les « … »

sharepoint 2013 email workflow

 

Créer une argumenter avec la variable « Initiateur »

sharepoint 2013 worfklow visual studio

 

Définir la variable « Destinataire » en tant que résultat (output) dans le fenêtre de propriété également.

send email workflow sharepoint visual studio

 

Ajouter une activité de type « Courrier électronique » et définir le destinataire avec la variable nouvellement créée.

email workflow visual studio 2012

 

Ajouter un log dans l’historique pour signifier l’envoi de cet email.

sequence envoi email worfklow sharepoint 2013

 

Pour les 2 étapes suivantes les principes sont les mêmes concernant la récupération dynamique d’élément et l’affectation de tâches.

Même opération et même logique pour les étapes suivantes

Pour le téléphone mobile il faudra enchaîner les opération suivantes : 

  • Récupérer la valeur du champs « téléphone mobile »
  • Poser une condition afin d’assigner une tâche à l’équipe en charge de l’attribution si la valeur est à « true »
  • Assigner une tâche au groupe « Telephonie mobile »
  • Si tâche OK alors passer à l’étape suivante

workfows sharepoint 2013 visual studio 2012

NB  : afin de récupérer le numéro de téléphone attribué au nouveau collaborateur, il est possible de créer un  type de contenu spécifique pour la tâche à destination de l’équipe téléphonie mobile. Celui-ci contiendra un champs « No De tel » qui devra obligatoirement être saisie pour que la tâche soit complétée. Il pourra ensuite être récupéré par le Workflow (GetDynamicValueProperty) et inséré dans la fiche d’accueil elle-même.

Le workflow une fois déployé 

Le formulaire de fiche d’accueil : 

workflow visual studio 2012

 

le workflow une fois déclenché avec sa liste de tâche et son historique (traces) : 

Sharepoint 2013 custom Workflow with visual studio 2012

CA DESIGN DONC MAIS CA NE DEVELOPPE PAS … ENCORE !

ENJOY !!

Sources :