[SharePoint] Développer son premier workflow sous Workflow Manager
Développer un workflow, c’était difficile… avant ! En effet, nous avons désormais la possibilité d’utiliser Workflow Manager 1.0 conjointement à SharePoint. Attention cependant, celui-ci n’est pas automatiquement installé par défaut, il vous faudra donc le faire vous même. Heureusement, cela n’est pas difficile, il vous suffira de suivre la procédure de TechNet : http://technet.microsoft.com/fr-fr/library/jj658588.aspx.
Nous allons donc créer notre premier workflow, en commençant simple. Ce sera un workflow d’approbation qui va assigner une tâche de validation à une personne, puis nous enverrons un mail à l’initiateur du workflow pour l’informer du résultat.
Etape 1 : Initialisation du projet
Commencez par créer un projet SharePoint 2013 vide :
Et sélectionnez un déploiement en mode sandbox. Et oui, vous le verrez ensuite, mais un des gros changements c’est que l’on ne code plus dans son workflow : ce n’est que du déclaratif !
Puis ajoutez un élément de type workflow :
Ce sera un workflow de liste :
Nous sélectionnons dès maintenant la bibliothèque d’où partira le workflow (il faudra le faire sinon depuis SharePoint) et laissons le workflow créer les listes pour l’historique et les tâches :
Enfin, nous choisissons le mode de démarrage :
Et voici pour la partie ultra facile, et finalement très classique des workflows dans SharePoint.
Votre projet comporte maintenant 2 fonctionnalités de scope Web: l’une contenant votre définition de workflow, l’autre les instances de liste.
Etape 2 : Construction du workflow
Nous disposons maintenant d’une surface d’édition de notre workflow, ainsi que d’une boite à outils contenant les diverses activités disponibles (activités génériques + activités spécifiques à SharePoint).
Nous pouvons déclarer des variables dans la zone en dessous de l’éditeur : ajoutons une variable “Approver” de type chaine avec comme valeur le login de l’approbateur au format Claims (un très article sur le sujet : http://www.wictorwilen.se/Post/How-Claims-encoding-works-in-SharePoint-2010.aspx), dans mon cas ce sera “i:0#.w|spdev\manager”. A noter que les variables sont à déclarer en C#.
Remarque: les variables sont créées pour un scope particulier: par exemple la séquence générale, mais potentiellement disponible uniquement dans une activité de plus petit niveau. Attention donc à les déclarer au bon endroit selon son utilisation.
Ajoutons une activité de type “SingleTask” (dans “SP – Task”) puis les activités “WriteToHistory” et “Email” (dans “SP - Utilities”) ensuite :
Cliquons sur “Configure” pour configurer la tâche : nous atterrissons sur un assistant qui nous permet facilement de personnaliser la tâche. Nous pouvons ainsi spécifier le nom de l’approbateur, modifier le texte de la tâche qui sera assignée ainsi que sa description et sa date d’échéance comme suit :
Dans les options vous pourrez déterminer si la tâche est bloquante ou non, si une (ou plusieurs) notification sera envoyée si la tâche arrive à échéance (si une date a été définie), et les options de sortie (type de contenu de la tâche, le champ contenant la valeur et son statut par défaut) :
Nous laissons tout par défaut. Cependant, cet assistant ne vous propose qu’une partie de la configuration. En effet, si vous accédez aux propriétés de l’activité, vous pouvez voir qu’il est possible de changer beaucoup de paramètres, comme le titre et le contenu des emails d’assignation ou de relance :
Il nous reste maintenant à écrire dans l’historique un petit message indiquant l’état de l’approbation, puis envoyer un mail à l’initiateur du workflow. Pour connaitre l’état de la tâche, il suffit de regarder la valeur de la variable “outcome_0” (cette variable est automatiquement créée pour chaque tâche). Si sa valeur est à 0 c’est qu’elle a été approuvée, à 1 si elle a été rejetée.
Ce qui nous donne ceci pour le message :
Concernant l’email en revanche, il nous manque quelque chose : l’information sur l’initiateur du workflow.
Pour cela, ajoutons l’activité “LookupWorkflowContextProperty” (dans “SP – Current Context”) au début du workflow, déclarons une variable de type string “InitiatorWf” et utilisons la pour stocker la valeur de la propriété Initiator (j’ai pris choisi un nom de variable ne prêtant pas à confusion ) :
L’activité “Email” demande une variable de type System.Collection.ObjectModel.Collection. Déclarons en une qui s’appellera “EmailTo” et choisissons cette fois-ci un autre type que ceux proposés directement :
Et en sélectionnant le bon (il est possible de faire une recherche, nettement plus simple !) :
Maintenant que nous avons la variable qui va bien, il faut lui ajouter la valeur récupérer depuis le contexte. Il faut pour cela utiliser l’activité “BuildCollection<T>” dans la catégorie “Collection” et la placer juste avant la tâche. Sélectionnez le type “string” :
Dans ses propriétés, assignez “EmailTo” en tant que résultat et dans les valeurs ajoutons notre variable InitiatorWf :
Il nous reste à mettre un sujet et un petit message pour l’email, définir le “TO” avec EmailTo et le workflow est terminé !
Etape 3 : Test du workflow
Nous pouvons maintenant tester le workflow. Vous pouvez ajouter un point d’arrêt sur la tâche et lancer le workflow en debug via F5.
En démarrant le workflow, nous arrivons sur le point d’arrêt :
Et nous pouvons inspecter les variables locales, voire faire du pas à pas :
Conclusion
Voici donc un aperçu du développement de workflow pour SharePoint 2013 à l’aide de Workflow Manager. Le plus compliqué est surtout de se faire à la déclaration et assignation des variables à utiliser, et tout spécifiquement aux variables plus complexes (tout est relatif ) comme les collections. Nous verrons dans un prochain billet la manipulation d’une machine à état car les workflows séquentiels c’est bien, les machines à état, c’est mieux !
Commentaires