Comment créer le cycle de vie d'un SmartElement
Recommandation
Le cycle de vie (workflow) permet de gérer la vie d'un Smart Element en lui imposant un ensemble d'étapes pour aller de sa création jusqu'à sa fin (moment à partir duquel le Smart Element n'évolue plus).
Si vous n'êtes pas familier avec les Workflows
et leur fonctionnement, il est fortement recommandé de lire la
documentation associée
diponible ici
Génération des fichiers de configuration
Afin de créer ces Workflow, nous utiliserons ici la commande createWorkflow. Cette dernière accepte plusieurs arguments comme indiqué sur la documentation ou en exécutant la commande
npx @anakeen/anakeen-cli createWorkflow --h
Il existe, ici aussi, deux modes d'utilisation de cette commande. J'utiliserai ici la manière "classique" mais libre à vous d'utiliser le mode interactif. Nous allons donc créer un Workflow pour les Plats.
npx @anakeen/anakeen-cli createWorkflow --sourcePath . --smartStructureName WFAM_PLAT --smartElementName WDOC_PLAT --associatedSmartStructure PLAT
Voilà les fichiers générés pour notre Workflow.
Paramétrage des fichiers de configuration
Le paramétrage de ces fichiers de configuration se déroule en plusieurs étapes que voici :
- Déclarer le graphe : Définit les différentes
étapes
ettransitions
du cycle de vie, - Déclarer le modèle du workflow : Permet de définir que réaliser lors des transitions,
- Paramétrer le workflow : Crée un SmartElement suivant le modèle de workflow précédemment réalisé.
Déclarer le graphe du workflow
Recommandation
Si vous n'êtes pas familier avec les Graphes de workflow
et leur fonctionnement, il est fortement recommandé de lire
la documentation associée diponible ici
Un menu a quatre états possibles différents et suivra donc le modèle suivant : Rédaction
=> En test
<=> À la carte
<=> Retiré
.
Nos fichiers de configurations étant générés. Pour définir le graphe, rendons-nous dans le fichier
src/vendor/<vendorName>/<moduleName>/SmartStructures/Plat/PlatWorkflows/WfamPlatWorkflow/WfamPlatGraph.xml
.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0" xmlns:workflow="https://platform.anakeen.com/4/schemas/workflow/1.0">
<workflow:graph ns="GDC" name="WFAM_PLAT">
<workflow:steps>
<workflow:step name="plat_e0" state-label="Création" activity-label="Rédaction" initial="true"/>
<workflow:step name="plat_e1" state-label="Créé" activity-label="En test"/>
<workflow:step name="plat_e2" state-label="Testé" activity-label="À la carte"/>
<workflow:step name="plat_e3" state-label="Retiré" activity-label="Retiré"/>
</workflow:steps>
<workflow:transitions>
<workflow:transition name="t_plat_e0_e1" from="plat_e0" to="plat_e1" label="Rédigé"/>
<workflow:transition name="t_plat_e1_e2" from="plat_e1" to="plat_e2" label="Valider"/>
<workflow:transition name="t_plat_e2_e1" from="plat_e2" to="plat_e1" label="Retester"/>
<workflow:transition name="t_plat_e2_e3" from="plat_e2" to="plat_e3" label="Retirer"/>
<workflow:transition name="t_plat_e3_e2" from="plat_e3" to="plat_e2" label="Réhabiliter"/>
<workflow:transition name="t_plat_e1_e3" from="plat_e1" to="plat_e3" label="Test échoué/abandonné"/>
<workflow:transition name="t_plat_e3_e1" from="plat_e3" to="plat_e1" label="Remise en test"/>
</workflow:transitions>
</workflow:graph>
</smart:config>
Déclarer le modèle du workflow
Recommandation
Si vous n'êtes pas familier avec les Modèles de Workflow
et leur fonctionnement, il est fortement recommandé de lire
la documentation associée diponible ici
Le modèle d'un workflow n'est en réalité rien de plus qu'une SmartStructure référençant le graphe et la définition des
paramètres qui lui sont associés. Lors de l'utilisation de la commande createWorkflow
, le paramètre WFAM_PLAT
associé à l'argument --smartStructureName
était donc le nom de modèle du workflow créé.
Dans notre cas, le fichier .xml
associé est le suivant,
src/vendor/<vendorName>/<moduleName>/SmartStructures/Plat/PlatWorkflows/WfamPlatWorkflow/100-WfamPlatStructure.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0">
<smart:structure-configuration name="WFAM_PLAT">
<smart:extends ref="WDOC"/>
<smart:icon file="wfam_plat.png"/>
<smart:class>Cogip\Restauratec\SmartStructures\Plat\PlatWorkflows\WfamPlatWorkflow\Wfam_platBehavior</smart:class>
<smart:fields/>
<smart:hooks/>
<smart:defaults/>
</smart:structure-configuration>
</smart:config>
Lors de la génération des fichiers de configuration, le fichier WfamPlatGraph.xml
permettant de décrire le graphe du
workflow a déjà été associé au modèle de ce dernier dans la classe de comportement associée; ici dans le fichier
Wfam_platBehavior.php
. C'est aussi et surtout ici que peuvent se configurer par la programmation, des actions
supplémentaires à effectuer lors des transitions :
Recommandation
Pour cela, il est conseillé de vous renseigner sur le fonctionnement de la Classe de comportement d'un modèle de workflow
<?php
namespace Cogip\Restauratec\SmartStructures\Plat\PlatWorkflows\WfamPlatWorkflow;
/**
* Workflow Behavior of WFAM_PLAT elements
*/
class Wfam_platBehavior extends \SmartStructure\Wdoc
{
public function __construct($dbaccess = '', $id = '', $res = '', $dbid = 0)
{
parent::__construct($dbaccess, $id, $res, $dbid);
$this->useWorkflowGraph(__DIR__ . "/WfamPlatGraph.xml");
// @FIXME Insert Here transition configuration
}
}
Paramétrer le Workflow
Recommandation
Pour ce qui est de la déclaration d'une instance de Workflow, je vous invite aussi à lire la documentation associée diponible ici
Ce qui représente notre instance de workflow a aussi été généré lors de l'exécution de la commande createWorkflow
.
Nous avions nommé cette instance, qui est un SmartElement, WDOC_PLAT
. Allons de ce pas la configurer dans notre
fichier
src/vendor/<vendorName>/<moduleName>/SmartStructures/Plat/PlatWorkflows/WdocPlatWorkflow/510-WdocPlatWorkflowSettings.xml
.
Dans un premier temps nous allons uniquement modifier les références de chacune des étapes (steps) afin qu'elles fassent référence aux étapes définient dans le graphe. Pourquoi ne pas en profiter pour donner un peu de couleurs à tout ça ?
<?xml version="1.0" encoding="UTF-8"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0" xmlns:workflow="https://platform.anakeen.com/4/schemas/workflow/1.0">
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<!--Timer and Mail templates workflow references-->
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<workflow:config xmlns:workflow="https://platform.anakeen.com/4/schemas/workflow/1.0" name="WDOC_PLAT" structure="PLAT" model="WFAM_PLAT">
<workflow:steps/>
<workflow:transitions/>
</workflow:config>
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<!--Elements (color, cvdoc, masks) user interface referenced in workflow-->
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<workflow:config xmlns:workflow="https://platform.anakeen.com/4/schemas/workflow/1.0" name="WDOC_PLAT" structure="PLAT" model="WFAM_PLAT">
<workflow:steps>
<workflow:step ref="plat_e1">
<workflow:color>#FFAA00</workflow:color>
</workflow:step>
<workflow:step ref="plat_e2">
<workflow:color>#55FF00</workflow:color>
</workflow:step>
<workflow:step ref="plat_e3">
<workflow:color>#FF4249</workflow:color>
</workflow:step>
</workflow:steps>
</workflow:config>
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<!--Default workflow for the structure-->
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<smart:structure-configuration name="PLAT">
<smart:default-workflow ref="WDOC_PLAT"/>
</smart:structure-configuration>
</smart:config>
Attention
Pensez à effectuer une réinstallation afin que l'application prenne en compte les modifications effectuées :
npx @anakeen/anakeen-cli deploy -c http://localhost:8080/control -s . -u admin -p anakeen --reinstall
Résultat / Vérification
Voici la représentation des étapes
et des transitions
du cycle de vie des Plats
généré par AP4 :
Ce schéma est consultable dans le Development Center, partie Workflow
et en sélectionnant celui que nous venons de
créer, ou via l'url suivante :
http://localhost:8080/devel/wfl/WDOC_PLAT/infos
Et ensuite ?
Comment créer et associer une aide à la saisie à un Smart Field