Dans nos applications K2, nous avons parfois besoin d’utiliser une Custom WorkList. Il y’a différente façon de créer une custom WorkList. Dans cette article, nous allons vous montrer comment le faire en utilisant l’API REST de K2. Cependant, nous n’allons pas nous attarder sur la présentation de l’API et la création des ses méthodes. Par contre, si Vous voulez savoir cela en détails, nous vous invitons à suivre l’article suivant À la découverte des API K2
Activer l’API REST du Workflow
Activiver l’API REST du Workflow en allant dans K2 Management : Integration -> APIs -> Workflow REST
Switcher le contrôle pour activer l’API Workflow, ensuite cliquer sur le bouton “Apply Changes”. l’API est ainsi activé
Création des SmartObjects de L’API
La création des SmartObjects se fait depuis le Services Tester ou depuis K2 management. Là, nous allons d’abord créer un Service Instance nommé Workflow API à partir du Service Type REST.
Clique sur Register ServiceInstance
Choisir le Service Type, renseigner le lien vers le descripteur de l’API (ce champs est obligatoire) dans notre cas, il s’agit du lien https://k2.denallix.com/api/Workflow/preview/swagger/docs. Ensuite, cliquer sur Next.
Renseigner le nom du service ainsi que le nom d’affichage et cliquer sur Add. Vous pouvez voir les différents Objets crées
Création de la Custom WorkList
Dans cette partie, nous allons mettre en place notre Custom WorkList. Pour le faire, nous allons d’abord créer notre SmartObject Task sur lequel sera designé notre futur custom WorkList. En effet, ce SmartObject va utiliser la méthode GetTasks de l’API qui retourne une chaine sérialisée qu’on va par la suite Désérialiser.
Après cela, on fera la jointure entre le SmartObject Task et le SmartObject Request (qui est le SmartObject Principal où se trouve les colonnes à afficher sur la Custom WorkList), en utilisant le Worklow ID.
1- Création du SmartObject Task
Aller dans le Designer, ensuite créer un nouveau SmartObject comme indiqué dans la figure
Glisser et déposer la méthode GetTasks de l’API
Cliquer sur Next, ensuite faire un Create All
On se rend compte qu’en sortie, la méthode GetTasks ne retourne pas les informations sur la tache sous forme de colonnes comme on aurai pensé mais plutôt un tableau de chaine sérialisé de type TaskLite[ ]. C’est pourquoi, on va ajouté notre seconde méthode Deserialize Typed Array qu’on prendra dans le SmartObject TaskLite de notre service instance Workflow API.
Cliquer sur Next,
Ajouter cette méthode en cliquant sur Add, naviguer pour choisir la méthode comme indiqué dans la figure et clique sur OK
Ensuite, cliquer sur Create All. On peut déjà constater au niveau de Return Property Name, les différentes colonnes affichant les informations sur la tâche
La méthode Deserialize Typed Array prend en entré un Serialzed Array. On va modifier son mapping, pour mettre la chaine serialisé que retourne la méthode GetTasks. Pour cela, double cliquer dessus et au niveau de Map to, choisir SmartObject Property, puis choisissez la propriété Tasks(TaskLite[]).
Cliquer sur Ok puis sur Ok pour terminer le mapping
On peut voir la méthode GetTasks et Deserialize Typed Array sont réunis. Ils constituent ce qu’on appelle une méthode chainé,
2- Configuration au niveau du SmartObject contenant les colonnes à afficher sur la Custom WorkList
Dans notre cas, il s’agit du SmartObject Request: il contient toutes les informations relatives à une demande lorsque son processus a démarré. Nous allons d’abord enregistrer le Workflow ID de chaque instance lorsqu’elle démarre dans ce SmartObject, ensuite nous allons créer une association avec le SmartObject Task.
Premièrement, dans le WorkFlow au tout début, sauvegarder le WorkFlow ID. Pour cela, il faudrait avoir une colonne dans la table Request pour l’enregistrer.
Déployer ensuite le Workflow.
Allez dans le Designer et édditez le SmartObject Request:
Cliquer sur l’onglet Associations -> Add
Naviguer pour sélectionner le SmartObject Task ->Next
Choisir l’association de type One to One comme indiqué dans la figure, et cliquer sur Next -> Selectionner le champs Req_WF_ID -> Assign
Rechercher le champs WorkflowInstanceID du SmartObject Task
NB: Il faudrait toujours se rassurer que ce champs contient effectivement le WorkflowInstance ID (vous pourrez faire une comparaison entre les valeurs de ce champs et celles du champs Req_WF_ID du SmartObject Request). Car si ce champs ne retourne pas le WorkflowInstance ID, le mapping ne marcherait pas.
Ok -> Finish -> Finish
3- Design de la Custom Worklist
Le moment est venu de designer la Custom WorkList. Pour cela, allez dans le Designer->Clique Droit sur le SmartObject Task -> Entrer le nom de vue -> Cochez List View -> Call this method when the form loads -> CREATE
Create Labels and Controls -> Cochez tous les champs que vous voulez afficher sur votre WorkList -> Ok
A présent, Nous allons ajouter les colonnes supplémentaires (celles du SmartObject Request): Porter et ajouter sur la vue comme une nouvelle colonne, le champs WorkflowInstanceID.
Cliquer à droite, au niveau de SmartObject pour configurer
Au niveau de Display, choisir la colonne que vous voulez afficher -> Ok -> Ok
Aller sous l’onglet Header et renommer la colonne, puis valider
Refaire de même pour toutes les colonnes du SmartObject Request que vous voulez afficher sur la Custom WorkList. Cependant, dans les configurations au niveau du Display Field vous choisissez la colonne en question.
Il reste une dernière chose à faire, il s’agit de filtrer la WorkList en fonction du nom de votre Workflow. Pour le faire, aller dans l’onglet Rules et ouvrer la rule “When the View executed initialize”
Cliquer sur configure de la methode GetTasks
Dans l’onglet Filter -> Add -> choisir le champs WorflowName -> entrer le nom complet de votre Workflow (Chemin d’accès\Nom Workflow)
Remarque: Pour avoir le WorkflowName, vous pouvez ajouter la colonne WorkflowName sur votre WorkList et l’exécuter
Finish -> Ok -> Finish ->Check-in
Votre Custom WorkList est déjà opérationnel.
A présent, lancez des nouvelles instances et exécutez la Vue. Vous Obtiendrez quelques chose comme ceci
Nous avons encadrez en rouge les champs provenant de notre SmartObject Request.
C’est tout pour c’est article nous espérons que ça vous a plu 🙂 et à la prochaine 😉