Définition Workflow workflow \wɔʁk.flo\ masculin Représentation schématique d'un processus ou d'une série de tâches qui doivent être effectuées dans un ordre spécifique pour atteindre un résultat donné. Il peut impliquer des validations et des contrôles à chaque étape du processus. Son but est d'organiser et de rationaliser un processus, ainsi que d’en maximiser l'efficacité. 7
Qu’est ce que le composant Workflow ? Création et gestion de processus dans une application : ● Permet de décrire un modèle de processus ○ via des états (places) ○ et des transitions ● Permet de gérer et de structurer les changements d'états 8
2 types de processus State machine L’objet se trouve à un seul endroit. Pour appliquer une transition, l'objet doit se trouver au moins à l'un des emplacements. Workflow L’objet peut se trouver à plusieurs endroits en même temps. Pour appliquer une transition, l'objet doit se trouver à tous les emplacements précédents. 11
Les avantages du composant Moyen flexible et efficace de modéliser et de gérer les processus métier d’une application. On peut valider que le panier est passé par l'ensemble des états nécessaires à sa transformation en commande. Utilisation d'événements pour déclencher des actions personnalisées. Historisation possible des changements d'états. 12
Utilisation du composant Workflow dans le projet Controller Workflow Logique métier Validation des données Guard Transitions Services Transformer Call API Réponse 13
Cycle de vie d’un panier ● création du panier ● “CRUD” produits ● choix de la livraison ● ajout d’une adresse de livraison ● ajout d’une adresse de facturation ● choix du moyen de paiement ● finalisation du panier 14 AVEC PRODUIT ADRESSE DE LIVRAISON ADRESSE DE FACTURATION FINALISÉ ASSOCIÉ À UN COMPTE TOUT CRÉATION
Du théorique au code Pour définir son workflow, il suffit d’écrire un fichier de configuration (yaml, xml, php) Avec un fichier yaml, Symfony validera le fichier durant le cache warmup En utilisant les classes PHP du composant, il faudra valider manuellement avec WorkflowValidator ou StateMachineValidator 15
Nom Type L’objet à associer au workflow Liste des états possibles Statut de l’objet lors de l’initialisation Définition des transitions Configuration minimale 16
Vous pouvez utiliser des métadonnées avec les clés suivantes : Pour les états : - bg_color : une couleur (nom ou code hexadécimal : red #FF0000) - description : une chaîne qui décrit l'état Pour les transitions : - label : une chaîne qui remplace le nom de la transition - color, bg_color : une couleur - arrow_color : une couleur 18
Marking store Interface à implémenter pour stocker et récupérer l'état. La propriété configurée pour le marking_store doit être déclarée ainsi que ses getter / setter. Le typage se fait en fonction du choix de workflow. 22
Quelques unes des principales méthodes Workflow::can() pour savoir si la transition est possible Workflow::apply() pour appliquer une transition Workflow::getEnabledTransitions() voir les transitions applicables Event::isBlocked() savoir si une transition est bloqué Event::setBlocked() bloquer une ou toutes les transitions Event::addTransitionBlocker() bloquer de manière plus spécifique 24
Avec Registry Avant Sf 6.2 Lorsque vous définissez plusieurs workflows, on peut utiliser Registry, pour stocker et fournir l'accès aux différents workflows. Aide également à déterminer si un workflow prend en charge l'objet que l’on veut utiliser. 26
Gestion des transitions Il est possible d'appliquer des restrictions aux transitions. Par exemple, pour vérifier que l'utilisateur est bien authentifié ou qu'il possède les droits nécessaires. Pour cela, la définition de chaque transition supporte une option guard. 32
Guard Cette option utilise le composant expression language pour faire appel à des fonctions telles que is_fully_authenticated() ou is_granted(), et même accéder aux attributs de l'objet concerné. guard: "is_fully_authenticated() and has_role('ROLE_USER') and is_granted(SAME_USER, subject)" guard: "is_valid(subject, [orderable])" Invoqué à chaque utilisation des méthodes du workflow can(), apply() et getEnablesTransitions(). 33
Premier bilan Lisibilité du code Réduction de la complexité de la logique métier Définition des workflows dans un fichier de configuration, plutôt que dans le code Possibilité de définir des contraintes sur les transitions Facilité d'intégration avec d'autres composants Symfony 35
Problématique : mauvaise utilisation du contexte Le rôle du contexte n’est pas de modifier l’objet mais de contenir des informations supplémentaires Il peut être utilisé pour stocker des données utiles pour prendre des décisions au niveau des transitions. 36
Problème de performance ? Sur un ->apply(), le workflow charge tous les Guards des transitions possibles, pour savoir si la transition sera possible ou pas. 38
Fonctions TWIG workflow_can() Retourne si l’objet peut faire la transition workflow_transitions() Retourne toutes les transitions possibles pour l’objet workflow_transition() Retourne une transition spécifique workflow_marked_places() Retourne les états courants de l’objet workflow_has_marked_place() Retourne si l’objet a bien l’état donné workflow_transition_blockers() Retourne les transitions blockers 48
Conclusion Outil puissant pour créer et gérer des workflows dans une application Il permet une meilleure organisation et une plus grande efficacité dans la gestion des processus métier 49