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.

CreateWorkflowResult

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 et transitions 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 :

WorkflowGraph

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