6.1 Structure du cycle de vie

Ce chapitre va vous permettre d'initialiser vos cycles de vie, en créer la structure et les associer à une famille.

6.1.1 Objectifs

  • Créer un cycle de vie,
  • Initialiser la forme du cycle de vie (étapes et transitions),
  • Traduire le cycle de vie,
  • Ajouter le cycle au webinst.

6.1.2 Cadre

L'analyse des besoins à mis en évidence le besoin de deux cycles de vie dans votre application.

Deux cycles ont été identifiés :

  • les audits
    Cycle : audit

    Figure 102. Cycle : audit

  • les FNC
    Cycle : FNC

    Figure 103. Cycle : FNC

6.1.3 Théorie

La structure d'un cycle de vie fait appel aux concepts suivants :

Étape

Elles marquent un moment clef dans la vie du document. Une étape est constituée de :

État
c'est le statut du document à un moment donné (par exemple : brouillon, rédigé, validé, historique),
Activité
c'est la tâche en cours de réalisation sur un document donné (par exemple : en rédaction, en validation).
Transition
Elles indiquent la possibilité de passage entre une étape et une autre.

Les cycles de vie sont représentés par deux objets systèmes :

  • une famille : elle décrit la structure et contient le code métier,
  • un document : il décrit le paramétrage (mails envoyés, couleurs, etc.).

6.1.4 Initialisation des fichiers

6.1.4.1 Cycle des audits

Ouvrez une console et rendez vous dans le répertoire de votre application et lancez la commande suivante :

<devtool> createWorkflow -s . -n COGIP_AUDIT_AUDIT -m COGIP -a COGIP_AUDIT

Deux fichiers sont générés :

./COGIP_AUDIT
...
├── COGIP_AUDIT_AUDIT__WFL.php
├── COGIP_AUDIT_AUDIT__WFL.csv

Le fichier .php contient le code métier et la structure du cycle de vie, le fichier .csv contiendra quelques éléments de paramétrage.

Le fichier est initialisé avec les éléments suivants :

namespace COGIP;
 
class COGIP_AUDIT_AUDIT__WFL extends \Dcp\Family\WDoc
{
    public $attrPrefix = 'FIXME'; //FIXME: set attrPrefix
    public $firstState = 'FIXME'; //FIXME: set FirstState
    public $viewlist = "none";
 
    //region States
    const e_E1 = 'FIXME'; //FIXME: set E1
    //endregion
 
    //region Transitions
    const t_E1__E2 = 'FIXME'; //FIXME: set T1
    //endregion
 
    public $stateactivity = array(
        //FIXME: set stateactivity
    );
 
    public $transitions = array(
        //FIXME: set transitions
    );
 
    public $cycle = array(
        //FIXME: set cycle
    );
 
}

6.1.4.2 Préfixe

L' $attrPrefix est utilisé lors de la génération de la table de stockage du cycle de vie pour éviter des collisions de noms.

Complétez la valeur de $attrPrefix à caaw.

6.1.4.3 États

6.1.4.3.1 Constantes

Vous allez ensuite définir la liste des constantes représentant les états. Pour chaque état, vous allez indiquer un nom logique qui porte sa référence.

//region States
const e_brouillon = 'coa_audit_e1';
const e_annule = 'coa_audit_e2';
const e_redaction = 'coa_audit_e3';
const e_certifie = 'coa_audit_e4';
const e_refus_certif = 'coa_audit_e5';
//endregion

Il est conseillé de mettre les noms des états sous la forme d'un identifiant neutre (id, uuid) pour pouvoir plus simplement gérer le changement de forme du cycle de vie et de paramétrage de celui-ci.

Les commentaires //region States et //endregion sont une convention de certains éditeurs (PhpStorm, etc.) qui permet de replier et retrouver plus facilement cette zone.

6.1.4.4 Activités

L'activité est un deuxième libellé qui est apposé à l'étape. Il décrit l'activité qui doit avoir lieu lors de cette étape.

public $stateactivity = array(
    self::e_brouillon => "coa_planning",
    self::e_redaction => "coa_writing"
);

En théorie, les étapes finales d'un cycle n'ont pas d'activité. Par exemple, une fois l'audit Certifié, Annulé ou Refusé, il n'y a plus de travail à effectuer sur cet audit, et donc pas d'activité.

6.1.4.5 Transitions

6.1.4.5.1 Constantes

Vous allez ensuite définir la liste des constantes représentant les transitions. Pour chaque transition, vous allez indiquer un nom logique qui porte sa référence.

//region Transitions
const t_brouillon__redaction = 'coa_audit_t1';
const t_brouillon__annule = 'coa_audit_t2';
const t_redaction__brouillon = 'coa_audit_t3';
const t_redaction__certif = 'coa_audit_t4';
const t_redaction__refus_certif = 'coa_audit_t5';
//endregion

Il est conseillé de mettre les noms des états sous la forme d'un identifiant neutre (id, uuid) pour pouvoir plus simplement gérer le changement de forme du cycle de vie et de paramétrage de celui-ci.

Il est possible d'utiliser la même transition pour relier deux étapes mais ce fonctionnement est déconseillé car tout le paramétrage de la transition est alors partagé, notamment les droits d'accès ce qui rend le cycle moins facilement paramétrable.

Il est conseillé de nommer les transitions sous la forme t_<etat1>__<etat2> pour en faciliter le paramétrage.

6.1.4.5.2 Paramétrage

Vous allez maintenant enregistrer les constantes dans le tableau des transitions.

public $transitions = array(
    self::t_brouillon__redaction => array("nr" => true),
    self::t_brouillon__annule => array("nr" => true),
    self::t_redaction__brouillon => array("nr" => true),
    self::t_redaction__certif => array("nr" => true),
    self::t_redaction__refus_certif => array("nr" => true),
);

Ce tableau est le seul élément obligatoire, il répertorie l'ensemble des transitions existantes et leur paramétrage.

6.1.4.6 Cycle

Pour terminer, vous allez enregistrer la forme du cycle en utilisant $cycle.

public $cycle = array(
    array("t" => self::t_brouillon__redaction, "e1" => self::e_brouillon, "e2" => self::e_redaction),
    array("t" => self::t_brouillon__annule, "e1" => self::e_brouillon, "e2" => self::e_annule),
    array("t" => self::t_redaction__brouillon, "e1" => self::e_redaction, "e2" => self::e_brouillon),
    array("t" => self::t_redaction__certif, "e1" => self::e_redaction, "e2" => self::e_certifie),
    array("t" => self::t_redaction__refus_certif, "e1" => self::e_redaction, "e2" => self::e_refus_certif),
);

Le tableau de cycle est composé de tableau, chacun de ces tableaux a trois entrées :

  • t : porte la référence vers une transition,
  • e1 : porte la référence vers l'état de départ,
  • e2 : porte la référence vers l'état d'arrivée.

6.1.4.7 Premier état

Vous allez maintenant définir le premier état de votre cycle. Passez $firstState = self::e_brouillon.

6.1.4.8 Résultat

Vous avez terminé la déclaration de la structure. Le fichier doit donc contenir :

namespace COGIP;
 
class COGIP_AUDIT_AUDIT__WFL extends \Dcp\Family\WDoc
{
    public $attrPrefix = 'caaw';
    public $firstState = self::e_brouillon;
    public $viewlist = "none";
 
    //region MyAttributes-constants
    //endregion
 
    //region States
    const e_brouillon = 'coa_e1';
    const e_annule = 'coa_e2';
    const e_redaction = 'coa_e3';
    const e_certifie = 'coa_e4';
    const e_refus_certif = 'coa_e5';
    //endregion
 
    //region Transitions
    const t_brouillon__redaction = 'coa_t1';
    const t_brouillon__annule = 'coa_t2';
    const t_redaction__brouillon = 'coa_t3';
    const t_redaction__certif = 'coa_t4';
    const t_redaction__refus_certif = 'coa_t5';
    //endregion
 
    public $stateactivity = array(
        self::e_brouillon => "coa_planning",
        self::e_redaction => "coa_writing"
    );
 
    public $transitions = array(
        self::t_brouillon__redaction => array("nr" => true),
        self::t_brouillon__annule => array("nr" => true),
        self::t_redaction__brouillon => array("nr" => true),
        self::t_redaction__certif => array("nr" => true),
        self::t_redaction__refus_certif => array("nr" => true),
    );
 
    public $cycle = array(
        array("t" => self::t_brouillon__redaction, "e1" => self::e_brouillon, "e2" => self::e_redaction),
        array("t" => self::t_brouillon__annule, "e1" => self::e_brouillon, "e2" => self::e_annule),
        array("t" => self::t_redaction__brouillon, "e1" => self::e_redaction, "e2" => self::e_brouillon),
        array("t" => self::t_redaction__certif, "e1" => self::e_redaction, "e2" => self::e_certifie),
        array("t" => self::t_redaction__refus_certif, "e1" => self::e_redaction, "e2" => self::e_refus_certif),
    );
 
}

6.1.5 Traduction

Vous allez maintenant extraire les clefs permettant de traduire votre cycle de vie.

6.1.5.1 Ajout des clefs

Les clefs s'ajoutent à l'aide de commentaires dans le code. Pour ajouter une clef sur état, il faut ajouter le commentaire :

/* @transitionLabel _("state_name")/

Les annotations ainsi ajoutée permettent à l'outil d'extraction d'identifier les clefs.

En reprenant le fichier ci-dessus on obtient :

namespace COGIP;
 
class COGIP_AUDIT_AUDIT__WFL extends \Dcp\Family\WDoc
{
    public $attrPrefix = 'caaw';
    public $firstState = self::e_brouillon;
    public $viewlist = "none";
 
    //region MyAttributes-constants
    //endregion
 
    //region States
    /* @stateLabel _("coa_e1") */
    const e_brouillon = 'coa_e1';
    /* @stateLabel _("coa_e2") */
    const e_annule = 'coa_e2';
    /* @stateLabel _("coa_e3") */
    const e_redaction = 'coa_e3';
    /* @stateLabel _("coa_e4") */
    const e_certifie = 'coa_e4';
    /* @stateLabel _("coa_e5") */
    const e_refus_certif = 'coa_e5';
    //endregion
 
    //region Transitions
    /* @stateLabel _("coa_t1") */
    const t_brouillon__redaction = 'coa_t1';
    /* @stateLabel _("coa_t2") */
    const t_brouillon__annule = 'coa_t2';
    /* @stateLabel _("coa_t3") */
    const t_redaction__brouillon = 'coa_t3';
    /* @stateLabel _("coa_t4") */
    const t_redaction__certif = 'coa_t4';
    /* @stateLabel _("coa_t5") */
    const t_redaction__refus_certif = 'coa_t5';
    //endregion
 
    public $stateactivity = array(
        /* @stateLabel _("coa_planning") */
        self::e_brouillon => "coa_planning",
        /* @stateLabel _("coa_writing") */
        self::e_redaction => "coa_writing"
    );
 
    public $transitions = array(
        self::t_brouillon__redaction => array("nr" => true),
        self::t_brouillon__annule => array("nr" => true),
        self::t_redaction__brouillon => array("nr" => true),
        self::t_redaction__certif => array("nr" => true),
        self::t_redaction__refus_certif => array("nr" => true),
    );
 
    public $cycle = array(
        array("t" => self::t_brouillon__redaction, "e1" => self::e_brouillon, "e2" => self::e_redaction),
        array("t" => self::t_brouillon__annule, "e1" => self::e_brouillon, "e2" => self::e_annule),
        array("t" => self::t_redaction__brouillon, "e1" => self::e_redaction, "e2" => self::e_brouillon),
        array("t" => self::t_redaction__certif, "e1" => self::e_redaction, "e2" => self::e_certifie),
        array("t" => self::t_redaction__refus_certif, "e1" => self::e_redaction, "e2" => self::e_refus_certif),
    );
 
}

Vous pouvez trouver les fichiers complets dans les sources.

Ouvrez la console dans le répertoire contenant les sources et :

<devtool> extractPo -s .

Les clefs suivantes sont ajoutées dans le fichier locale/fr/LC_MESSAGES/src/COGIP_AUDIT_fr.po

msgid "coa_e1"
msgstr "Brouillon"
 
msgid "coa_e2"
msgstr "Annulé"
 
msgid "coa_e3"
msgstr "Planifié"
 
msgid "coa_e4"
msgstr "Certifié"
 
msgid "coa_e5"
msgstr "Refusé"
 
msgid "coa_planning"
msgstr "En planification"
 
msgid "coa_t1"
msgstr "Démarrer"
 
msgid "coa_t2"
msgstr "Annuler l'audit"
 
msgid "coa_t3"
msgstr "Renvoyer en planification"
 
msgid "coa_t4"
msgstr "Accorder la certification"
 
msgid "coa_t5"
msgstr "Refuser la certification"
 
msgid "coa_writing"
msgstr "En rédaction"

6.1.6 Inscription dans le paquet

Vous allez maintenant inscrire votre cycle de vie dans le paquet pour qu'il soit importé à l'installation et à la mise à jour.

Ajoutez la ligne suivante dans le info.xml à l'installation et à la mise à jour entre les lignes <process command="./wsh.php --api=importDocuments --file=./COGIP_AUDIT/COGIP_AUDIT_AUDIT__STRUCT.csv"/> et <process command="./wsh.php --api=importDocuments --file=./COGIP_AUDIT/COGIP_AUDIT_AUDIT__PARAM.csv"/>:

<process command='./wsh.php --api=importDocuments --file=./COGIP_AUDIT/COGIP_AUDIT_AUDIT__STRUCT.csv --csv-separator=&apos;;&apos; '/>
<process command='./wsh.php --api=importDocuments --file=./COGIP_AUDIT/COGIP_AUDIT_AUDIT__WFL.csv --csv-separator=&apos;;&apos; '/>
<process command='./wsh.php --api=importDocuments --file=./COGIP_AUDIT/COGIP_AUDIT_AUDIT__PARAM.csv --csv-separator=&apos;;&apos; '/>

6.1.7 Génération du document

6.1.7.1 Création

Vous allez maintenant générer le document de cycle de vie.

Pour cela générez le webinst et importez le.

Connectez vous à l'interface d'administration : http://<nomDeDomaine>/dynacase/admin.php.

Cliquez sur Gestion des documents > Explorateurs de documents et cliquez sur Création > Documents système en haut dans la partie de droite, l'interface de création de documents s'ouvre sur la partie droite.

Création workflow

Figure 104. Création workflow

Sélectionnez ensuite la famille COGIP_AUDIT_AUDIT__WFL à la place de "Masque de saisie".

Complétez le formulaire présenté avec les éléments suivants :

  • Titre : Audit,
  • Famille (Basique et Profil Dynamique) : Audit.
Création workflow

Figure 105. Création workflow

Cliquez ensuite sur Créer.

Si vous cliquez sur Voir le graphe, vous pouvez consulter une représentation graphique du cycle de vie :

Graphe cycle audit

Figure 106. Graphe cycle audit

6.1.7.2 Paquet webinst

6.1.7.2.1 Nom logique

Ajoutez un nom logique au cycle de vie, cliquez sur Autres > Propriétés et ajoutez le nom WDOC_COGIP_AUDIT_AUDIT__WFL.

6.1.7.2.2 Export

Ajoutez le cycle au porte-documents Autres > Ajouter au porte-documents (pensez à supprimer les éventuels autres documents au porte-documents), cliquez ensuite sur Outils > Exportation du dossier. La fenêtre d'exportation s'ouvre, cliquez sur Exporter.

Un fichier CSV vous est envoyé.

6.1.7.2.3 Enregistrement

Vous allez ajouter ce document dans le fichier de paramétrage de la famille Audit. Ouvrez le fichier ./COGIP_AUDIT/COGIP_AUDIT_AUDIT__PARAM.csv ajoutez au début du fichier les trois lignes contenues dans le fichier d'exportation.

Pour finir, vous allez ajouter l'instruction qui associe le cycle de vie des audits à la famille audit.

Ajoutez une ligne juste avant le END les éléments suivant :

  • colonne A : WID,
  • colonne B : WDOC_COGIP_AUDIT_AUDIT__WFL.

L'instruction WID est détaillée dans la documentation.

Le fichier COGIP_AUDIT_AUDIT__PARAM complété est accessible dans les sources.

6.1.8 Mise en place des modifications

Vous allez maintenant déployer vos modifications :

<devtool> deploy -s . --url http://admin:anakeen@<nomDeDomaine>/dynacase-control/ --port <port> --context dynacase

Vous pouvez ensuite consulter les modifications apportées via l'application http://<nomDeDomaine>/dynacase/.

6.1.9 Conclusion

Vous avez initié la structure d'un des cycles de vie et associé celui-ci à sa famille. Dans les prochains chapitres, vous verrez comment paramétrer, ajouter du code métier et profiler vos cycles de vie.

La réalisation de la structure du cycle des non-conformités n'est pas décrite dans ce chapitre, mais vous pouvez trouver les fichiers complet dans la solution du chapitre.

6.1.10 Voir aussi

×