Comment paramétrer le cycle de vie - Gérer le comportement du modèle

Prérequis

Afin de pouvoir suivre ce guide, il faut préalablement avoir vu :

Comment procéder ?

Recommandation

Si vous n’êtes pas familier la façon dont se déroules les transitions, il est fortement recommandé de lire la documentation associée disponible ici

Il en est de même pour la classe de comportement d’un modèle de workflow, il est fortement recommandé de lire la documentation associée disponible ici

Nous allons faire en sorte de n’autoriser la transition que pour les utilisateurs de la direction

Afin de gérer le comportement de ce cycle de vie, rendons-nous dans le fichier suivant src/vendor/<vendorName>/<moduleName>/SmartStructures/Plat/PlatWorkflows/WfamPlatWorkflow/WfamPlatBehavior.php

Astuce

Pensez à générer les stubs. Cela a pour but d’extraire les constantes des différents fichiers de configuration .xml des SmartStructures que vous possédez. Cela apportera ici une complétion sur les Smart Fields, paramètres de Smart Structure, étapes et transitions des cycles de vie, aussi bien dans le PHP que dans le JavaScript. Pour cela :

npx @anakeen/anakeen-cli generateStubs
<?php

namespace Cogip\Restauratec\SmartStructures\Plat\PlatWorkflows\WfamPlatWorkflow;

use Anakeen\Core\ContextManager;
use DocHisto;

/**
 * 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");

        $this->getTransition(WfamPlatGraphConstant::transition_t_plat_e1_e2)
            ->setM0(function () {
                $err = "";
                // Récupère la liste des rôles que l’utilisateur connecté possède
                $userRoles = ContextManager::getCurrentUser()->getRoleList();
                $isAuthorized = false;

                foreach ($userRoles as $role) {
                    // Si l’utilisateur possède le rôle ci-dessous, il est autorisé à effectuer la transition ...
                    if ($role->login == "role_direction") {
                        $isAuthorized = true;
                    }
                }

                // ... sinon cette dernière lui est bloquée
                if (!$isAuthorized) {
                    $err = "Vous n’êtes pas autorisé à effectuer cette transition";
                }

                return $err;
            })
            ->setM2(function () {
                // Ajoute un message à l’historique du Smart Element ayant subit cette transition
                return $this->doc->addHistoryEntry("Mon message personnalisé", DocHisto::MESSAGE);
            });
    }
}

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

Informations

Si l’on veut vérifier cela, il faut que notre interface utilisateur soit initialisée. Ça tombe bien, un guide traitant ce sujet est disponible ici.

Accédons à notre application afin de vérifier si nos restrictions/modifications ont bien été prises en compte

Précondition - m0

Dans le cas où l’utilisateur n’a pas le rôle requis, il ne pourra pas effectuer la transition comme vous pouvez le voir ci-dessous :

m0

Post-traitement - m2

Si l’utilisateur passe la transition, nous ajoutons une entrée à l’historique du Smart Element en cours de modification.
Cela est consultable en tant qu’administrateur via le menu du Smart Element, bouton Système puis Historique.

Historique

Une fois la fenêtre ouverte, lorsque l’on clique sur le bouton Montrer les messages, nous pouvons retrouver ce qui est présent dans notre méthode associée à notre m2 :

m2 résultat

Et ensuite ?

Comment paramétrer le cycle de vie - Droits d’accès aux différentes transition