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
Figure 102. Cycle : audit
- les 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=';' '/> <process command='./wsh.php --api=importDocuments --file=./COGIP_AUDIT/COGIP_AUDIT_AUDIT__WFL.csv --csv-separator=';' '/> <process command='./wsh.php --api=importDocuments --file=./COGIP_AUDIT/COGIP_AUDIT_AUDIT__PARAM.csv --csv-separator=';' '/>
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.

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
.

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 :

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.