Line 17:
Line 17:
Notez que les Triggers sont une fonctionnalité pour les développeurs, qui est limitée:
Notez que les Triggers sont une fonctionnalité pour les développeurs, qui est limitée:
* aux événements métiers CRUD (Créer | Mettre à jour (Update) | Supprimer (Delete)).
* aux événements métiers CRUD (Créer | Mettre à jour (Update) | Supprimer (Delete)).
−
* ou au changement du status principal d'un object.
+
* ou au changement du statut principal d'un objet.
Pour les autres cas, il existe une autre fonctionnalité permettant aux développeurs d'injecter du code personnalisé dans une application appelée le [[Système de Hooks]]. Note: Historiquement, l'envoi d'un email génère aussi un appel trigger bien que ne rentrant pas dans le cadre des 2 cas précédents autorisés.
Pour les autres cas, il existe une autre fonctionnalité permettant aux développeurs d'injecter du code personnalisé dans une application appelée le [[Système de Hooks]]. Note: Historiquement, l'envoi d'un email génère aussi un appel trigger bien que ne rentrant pas dans le cadre des 2 cas précédents autorisés.
Line 25:
Line 25:
1) Copier le fichier modèle '''htdocs/modulebuilder/template/core/triggers/interface_99_modMyModule_MyModuleTriggers.class.php''' sous le nom:
1) Copier le fichier modèle '''htdocs/modulebuilder/template/core/triggers/interface_99_modMyModule_MyModuleTriggers.class.php''' sous le nom:
−
*'''interface_99_all_''Xxx''.class.php'''
+
*'''interface_99_''all_Xxx''.class.php'''
ou bien
ou bien
−
*'''interface_99_mod''MonModule_Xxx''.class.php'''
+
*'''interface_99_''modMonModule_Xxx''.class.php'''
−
où ''Xxx'' est une chaine de votre choix commençant par une majuscule, ''99'' est le numéro de priorité du trigger (''01'' étant le plus prioritaire), ''MonModule'' est le nom du module si votre trigger ne doit être activé que si le module MonModule est actif. Si on désire que le trigger soit toujours actif, on mettra ''all'' à la place de modMonModule.
+
où ''Xxx'' est une chaîne de votre choix commençant par une majuscule, ''99'' est le numéro de priorité du trigger (''01'' étant le plus prioritaire), ''MonModule'' est le nom du module si votre trigger ne doit être activé que si le module MonModule est actif. Si on désire que le trigger soit toujours actif, on mettra ''all'' à la place de modMonModule.
Il faut laisser ce nouveau fichier dans le même répertoire.
Il faut laisser ce nouveau fichier dans le même répertoire.
Rem: Les valeurs utilisables pour modMonModule sont visibles dans le répertoire
Rem: Les valeurs utilisables pour modMonModule sont visibles dans le répertoire
Line 40:
Line 40:
''htdocs/core/triggers/interface_99_modFacture_Monworkflow.class.php''
''htdocs/core/triggers/interface_99_modFacture_Monworkflow.class.php''
−
En créant un fichier nommé comme dans cet exemple, notre nouveau trigger sera déclenché à chaque évènement métier Dolibarr et à condition que le module Facture soit actif.
+
En créant un fichier nommé comme dans cet exemple, notre nouveau trigger sera déclenché à chaque événement métier Dolibarr et à condition que le module Facture soit actif.
'''Note''': Il est aussi possible de placer les fichiers triggers dans un sous-dossier d'un module externe. Ex: si le module réside dans htdocs/custom/mymodule/, alors il est possible de placer les triggers dans htdocs/custom/mymodule/core/triggers/.
'''Note''': Il est aussi possible de placer les fichiers triggers dans un sous-dossier d'un module externe. Ex: si le module réside dans htdocs/custom/mymodule/, alors il est possible de placer les triggers dans htdocs/custom/mymodule/core/triggers/.
Line 55:
Line 55:
−
2) Editer ce fichier ''interface_99_modMonModule_Monworkflow.class.php'' afin de renommer la classe ''InterfaceDemo'' par ''InterfaceMonworkflow''
+
2) Editer ce fichier ''interface_99_modMyModule_MyModuleTriggers.class.php'' afin de renommer la classe ''InterfaceMyModuleTriggers'' par ''InterfaceMonworkflow''
Ensuite, accéder à la page Accueil-> Infos Systèmes -> Dolibarr -> Triggers.
Ensuite, accéder à la page Accueil-> Infos Systèmes -> Dolibarr -> Triggers.
−
Votre fichier trigger doit apparaitre dans la liste sans erreur indiquant que les opérations précédentes ont été réalisées avec succès.
+
Votre fichier trigger doit apparaître dans la liste sans erreur indiquant que les opérations précédentes ont été réalisées avec succès.
3) Revenez maintenant à l'édition du fichier trigger afin d'ajouter votre code dans la fonction ''runTrigger''.
3) Revenez maintenant à l'édition du fichier trigger afin d'ajouter votre code dans la fonction ''runTrigger''.
−
Cette fonction est appelée à chaque évènement Dolibarr. Placer votre code en fonction du ou des évènements sur lesquels vous voulez réagir, chaque évènement étant identifié par un code (voir chapitres suivant pour la liste des codes), on peut réagir ou non à un évènement donné par un test sur la variable '''$action''':
+
Cette fonction est appelée à chaque événement Dolibarr. Placer votre code en fonction du ou des événements sur lesquels vous voulez réagir, chaque événement étant identifié par un code (voir chapitres suivant pour la liste des codes), on peut réagir ou non à un événement donné par un test sur la variable '''$action''':
<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
Line 96:
Line 96:
−
4) Une fois le code réalisé, il n'y a plus qu'à tester, en provoquant l'évènement déclencheur dans Dolibarr. Attention, l'appel au '''runTrigger''' et encapsuler dans un transaction. Si votre trigger renvoie un code ko, la fonction appelante peut annuler la transaction (ceci dépend de la fonction appelante).
+
4) Une fois le code réalisé, il n'y a plus qu'à tester, en provoquant l’événement déclencheur dans Dolibarr. Attention, l'appel au '''runTrigger''' et encapsuler dans un transaction. Si votre trigger renvoie un code ko, la fonction appelante peut annuler la transaction (ceci dépend de la fonction appelante).
Ajouter des traces dans un fichier dans la fonction '''runTrigger''' afin de vous assurer que le code s'exécute bien. Vous pouvez pour cela si vous le désirer, utiliser la fonction
Ajouter des traces dans un fichier dans la fonction '''runTrigger''' afin de vous assurer que le code s'exécute bien. Vous pouvez pour cela si vous le désirer, utiliser la fonction
dol_syslog("mon texte de trace", LOG_DEBUG);
dol_syslog("mon texte de trace", LOG_DEBUG);