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
disponible 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
anakeen-cli createWorkflow
Create a workflow
Options:
--version Show version number [boolean]
--sourcePath, -s path to the info.xml directory [Mandatory]
[string] [default: "."]
--vendorName, -v vendor name of the module [Mandatory]
[string] [default: (default)]
--moduleName, -m name of the module [Mandatory]
[string] [default: (default)]
--smartStructureName, -n workflow smart structure name [Mandatory]
[string]
--parentName, -p parent name of the workflow model
[string] [default: ""]
--smartElementName, -e workflow smart element name [Mandatory]
[string]
--associatedSmartStructure, -S name of the associated smart structure
[Mandatory] [string]
--workflowPath path where the workflow will be added
[string] [default: (default)]
--inSelfDirectory add a directory for the new workflow (not
compatible with workflowPath)
[boolean] [default: true]
--withParameters add parameters [boolean] [default: true]
--withBehavior add a class behavior [boolean] [default: true]
--noCreateSmartStructure disable the creation of the SS
[boolean] [default: false]
-h, --help Show help [boolean]
Il existe, ici aussi, deux modes d’utilisation de cette commande. Nous utiliserons ici la ligne de commande ,mais il est également possible d’utiliser le mode interactif. Créons le cycle de vie des plats :
npx @anakeen/anakeen-cli createWorkflow --sourcePath . --smartStructureName WFAM_PLAT --smartElementName WDOC_PLAT --associatedSmartStructure PLAT
Information
L’invite de commande renvoit alors le message :
✔ success createWorkflow done
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 :
Déclarer le graphe : Définir les différentes
étapes
ettransitions
du cycle de vieDéclarer le modèle du cycle de vie : Permet de définir les actions sur les transitions
Paramétrer le workflow : Créer un SmartElement suivant le modèle de workflow précédemment réalisé
Déclarer le graphe du cycle de vie
Recommandation
Si vous n’êtes pas familier avec les Graphes de cycle de vie
et leur fonctionnement, il est fortement recommandé de
lire la documentation associée disponible ici
Un menu a quatre états possibles différents et suivra 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 cycle de vie
Recommandation
Si vous n’êtes pas familier avec les Modèles de Cycle de vie
et leur fonctionnement, il est fortement recommandé de
lire la documentation associée disponible ici
Le modèle d’un cycle de vie est 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 cycle de vie 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">
<!-- Ce fichier permet d’ajouter des smart fields, des paramètres, des actions(hooks), de l’autocompletion et des valeurs par défaults pour le cycle de vie -->
<!-- Lien vers le guide How To : https://documentation.ap4.anakeen.com/anakeen-platform-howto/CreateWorkflow/#howToCreateWorkflow -->
<!-- Lien vers le manuel de référence : https://documentation.ap4.anakeen.com/anakeen-platform/workflow/#workflow-cycle-de-vie -->
<smart:structure-configuration name="WFAM_PLAT" label="WfamPlat">
<smart:extends ref="WDOC"/>
<smart:icon file="wfam_plat.png"/>
<smart:class>Cogip\Restauratec\SmartStructures\Plat\PlatWorkflows\WfamPlatWorkflow\WfamPlatBehavior</smart:class>
<smart:fields/>
<smart:hooks/>
<smart:autocompletion/>
<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
cycle de vie a déjà été associé au modèle de ce dernier dans la classe de comportement associée, dans le fichier
WfamPlatBehavior.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 cycle de vie
<?php
namespace Cogip\Restauratec\SmartStructures\Plat\PlatWorkflows\WfamPlatWorkflow;
/**
* Workflow Behavior of WFAM_PLAT elements
*/
class WfamPlatBehavior 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 Cycle de vie
Recommandation
Pour ce qui est de la déclaration d’une instance de Cycle de vie, je vous invite aussi à lire la documentation associée disponible ici
Ce qui représente notre instance de cycle de vie 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
. On peut la configurer depuis le 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éfinies dans le graphe. Pourquoi ne pas en profiter pour donner un peu de couleurs à tout ça ?
src/vendor/<vendorName>/<moduleName>/SmartStructures/Plat/PlatWorkflows/WdocPlatWorkflow/510-WdocPlatWorkflowSettings.xml
<?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 :
Créons un plat et vérifions que celui-ci est automatiquement à l'état Rédaction
à sa création et qu'il peut ensuite
passer à l'état suivant, En test
localhost:8080/api/v2/smart-elements/PLAT/views/!defaultCreation.html
Et ensuite ?
Comment créer et associer une aide à la saisie à un Smart Field