Vous pouvez également accéder à ce tutoriel en anglais et en allemand.

 

Ceci est le dernier des tutoriels sur la flexibilité dans YAWL. Au centre se trouvent les exlets et leur définition dans l'éditeur YAWL. Le fichier zip ci-dessous contient les fichiers nécessaires au début et à la fin du didacticiel.

 

Bonjour et bienvenue dans un autre tutoriel sur la flexibilité dans YAWL. Nous allons maintenant parler d'exlets. Vous connaissez peut-être les concepts de gestion des exceptions dans les langages de programmation, par exemple en Java: catch and throw, etc. En YAWL, les exlets sont le mécanisme qui, en combinaison avec des worklets, gère les exceptions. Nous allons continuer sur un exemple du tutoriel 17 où nous n'avons pas correctement réagi si le responsable rejetait la demande. Ce que nous voulons faire, c'est informer le demandeur du rejet, puis mettre fin au cas prématurément. Alors que va-t- on faire en YAWL, il va falloir d'abord définir un worklet qui informe le demandeur puis on va définir une règle de post-contrainte pour invoquer un exlet. Et nous écrirons un exlet qui suspend d'abord le cas, puis effectue l'action de compensation consistant à appeler le worklet, puis met fin au cas. Alors, que devons-nous faire? Nous devons définir un worklet qui est utilisé comme une action compensatoire pour informer le demandeur du fait que la demande a été rejetée. Et puis nous devons arrêter l'affaire là. Commençons donc par la définition du worklet. Un worklet est une spécification YAWL normale. J'ai donc ouvert l'éditeur YAWL ici avec une spécification vide. Et la première chose que je ferai est de copier les définitions de type de données de la spécification parente dans la spécification afin de pouvoir utiliser les mêmes types complexes que nous avons définis. J'ouvre donc les définitions de type de données ici et je copie simplement ces définitions ici. Et vous pouvez extraire cela de la spécification parent dans le matériel supplémentaire. Ensuite, la chose suivante est: je veux informer le demandeur, sous forme de rejet, et maintenant je dois définir les variables. Et ce dont j'ai besoin, c'est la demande d'achat et aussi le fait qu'elle n'a pas été approuvée. Et je définirai ici deux variables: au niveau net d'abord. Je vais donc aux variables de données ici et je vais définir la demande d'achat variable de type type de demande d'achat. Et cela n'a pas de portée locale mais il a maintenant une entrée / sortie de portée. Et aussi je définirai une variable approuvée, une variable booléenne; et encore une fois l'entrée / sortie de l'oscilloscope. Ensuite, je peux transmettre ces variables ici à notre tâche et je les transmettrai en tant que variables d'entrée car elles ne sont là que pour information. Ils n'ont donc pas besoin d'être modifiés. Et puis je vais enregistrer ceci comme spécification et je vais l'utiliser. J'appellerai celui-ci un worklet inform. Je devrais également offrir ceci à un demandeur. Alors, où sont mes ressources? D'accord! La prochaine chose est: je dois le télécharger sur le moteur YAWL en tant que worklet. Voici donc ce bouton ici: workflow... worklet ajouté avec succès. La prochaine chose est que je vais fermer ceci et maintenant je vais passer à la spécification parente. Et je vais simplement passer à la commande de flux de travail secondaire ici et j'irai approuver l'achat. Et maintenant, définissez une règle et la règle que je vais définir est une violation de post-contrainte d'élément de travail pour approuver l'achat et l'approbation... la valeur de approuvé doit être fausse. Et si cette valeur est fausse, nous ferons une action et nous invoquerons l'éditeur ici. La première étape consiste donc à suspendre l'élément de travail ici. L'étape suivante consiste à effectuer une action de compensation et maintenant on me demande lequel des worklets je veux utiliser. Et celui-ci est le worklet inform. Et puis je ne veux pas continuer l'affaire mais je veux juste arrêter l'affaire. Et le dernier mais non le moindre, je dois connecter tous ces éléments. Ensuite, il y a un bouton d'alignement ici. Et puis c'est fait. Nous avons donc défini un exlet maintenant. Oh, il y a toujours un problème: action non valide pour l'exception de contrainte de publication d'élément. Peut-être devons-nous suspendre l'affaire ici. Le cas cible est laissé à l' état suspendu. Maintenant ça va. Nous devons donc trouver la bonne combinaison de suspension et de suppression des choses. Alignez bien, puis ajoutez et fermez. Alors maintenant, la règle est ajoutée avec succès et nous avons cet exlet et maintenant nous devons voir si cela fonctionne comme prévu. C'est donc notre flux de travail principal. Donc, ce que nous pouvons faire, c'est simplement lancer un nouveau cas: case id 6. Et puis voir ce qui se passe. D'accord, le premier est "Préparer la demande d'achat" et il est attribué à deux Robbie Rays. C'est donc le premier. Nous allons donc nous connecter avec cet utilisateur. Complété! Ensuite, nous avons "Approuver l'achat". Ceci est attribué à notre utilisateur mam et nous l'acceptons et le démarrons. Et maintenant, nous voulons voir ce qui se passe si nous n'approuvons pas. Et maintenant, nous pouvons voir que «Préparer la commande d'achat» est suspendu et «Informer du rejet» est un élément de travail attribué à Robbie Rays. Nous pouvons donc voir que cela n'a pas été approuvé ici. Nous complétons cela. Maintenant, nous regardons notre liste de travail. Il est vide et la liste de cas est vide également. Donc, tout fonctionne comme prévu. Vous vous êtes peut-être demandé, lorsque nous informons le demandeur du rejet, comment nous avons identifié le bon utilisateur qui a initialement fait la demande? Eh bien, la réponse est que nous ne l'avons pas fait. Le problème est que conserver familier, le modèle conserver familier qui est intégré dans YAWL ne peut être utilisé que dans une seule spécification. Et comme le worklet qui informe le demandeur est une spécification différente, nous ne pouvons pas l'utiliser ici. La solution consiste à stocker le complément de la tâche dans une variable, puis à transmettre cette variable en tant que paramètre au worklet, puis dans le worklet, à l'affecter à la valeur de cette variable. Cela peut être fait dans YAWL mais cela nécessite l'utilisation de codelets. Et nous aborderons les codelets dans un prochain tutoriel. Ceci conclut nos tutoriels sur la flexibilité dans YAWL. Merci d'avoir regardé!