Line 1:
Line 1:
−
== Ajouter son code sur un évênement ==
+
<!-- BEGIN interlang links -->
+
<!-- Do NOT edit this section
+
Links below are automatically managed by PolyglotBot
+
You can edit links on the English source page : Interfaces_Dolibarr_toward_foreign_systems -->
+
[[en:Interfaces_Dolibarr_toward_foreign_systems]]
+
[[es:Interfaces_Dolibarr_hacia_el_exterior]]
+
[[zh:Dolibarr到外部系统的接口]]
+
<!-- END interlang links -->
−
Pour permettre de déclencher du code personalisé en réaction à un évenement Dolibarr (création/modification/suppression d'une société/facture/produit), Dolibarr propose un mécanisme de triggers. Ce mécanisme vous permet de personnaliser un workflow afin que les évèenements de gestion Dolibarr soit repercutés dans une autre application. Rien n'empèche également de l'utiliser pour modifier le comportement de Dolibarr même: par exemple, pour que la validation d'une facture provoque la création d'un contrat automatiquement.
+
{{TemplateDocDev}}
+
Dolibarr fournit deux mécanismes simples pour permettre d'interfacer Dolibarr avec une application tierce:
+
* Le [[Système_de_Triggers|système de Triggers]] - active votre code suite à un événement-action métier interne (par exemple, création d'une facture, modification d'un utilisateur, suppression d'une commande...)
+
* Le [[système de Hooks]] - active votre code dans un point d'entrée de Dolibarr (un point d'entrée peut être n'importe où contrairement aux actions-triggers).
+
* Le [[Module Webhook FR|Module Webhook]] - un module (s'appuyant sur le système de Hooks, voir ligne ci-dessus) pour envoyer un message JSON suite à un événement trigger de Dolibarr.
−
Donc, pour ajouter son propre code à déclencher par trigger, la procédure est la suivante:
+
Pour des informations sur l'autre sens et permettre à un système extérieur de faire agir Dolibarr, voir plutôt la page [[Interfaces Exterieur vers Dolibarr]].
−
# Copier le fichier ''includes/triggers/interface_demo.class.php'' sous le nom ''interface_xxx.class.php'' (ou xxx est une chaine de votre choix), en laissant ce nouveau fchier dans le meme répertoire. Par exemple ''includes/triggers/interface_monworkflow.class.php''
−
# Editer ce fichier ''interface_monworkflow.class.php'' afin de renommer la classe ''InterfaceDemo'' par ''InterfaceMonWorkflow'' et ajouter votre code dans la fonction ''run_trigger''. Cette fonction est appelée à chaque évennement Dolibarr. Placer votre code en fonction du ou des évenements sur lesquels vous voulez réagir, chaque évenement étant identifié par un test sur la variable $action:
−
−
function run_trigger($action,$object,$user,$lang,$conf)
−
{
−
// Mettre ici le code à exécuter en réaction de l'action
−
// Le type de l'évenement Dolibarr est stocké dans $action
−
// Les données de l'action sont stockées dans $object
−
// La configuration, utilisateur et langage sont dans $conf,$user et $lang
−
if ($action == 'COMPANY_CREATE')
−
{
−
dolibarr_syslog("Trigger for action '$action' launched. id=".$object->id);
−
}
−
elseif ($action == 'COMPANY_MODIFY')
−
{
−
dolibarr_syslog("Trigger for action '$action' launched. id=".$object->id);
−
}
−
elseif ($action == 'COMPANY_DELETE')
−
...
−
}
−
−
Il n'y a plus qu'à tester, en provoquant l'évènement déclencheur dans Dolibarr.
−
−
== Gérer de nouveaux évènements ==
−
−
Les évenements Dolibarr qui provoquent un appel de triggers sont, pour l'instant, identifiés par les codes évenements suivants:
−
* COMPANY_CREATE
−
* COMPANY_MODIFY
−
* COMPANY_DELETE
−
* BILL_VALIDATE
−
−
Pour gérer d'autre évenements que ceux ci-dessus, il faut modifier le code Dolibarr pour y ajouter la séquence suivante dans les méthodes métiers des classes utilisées pour gérer les évenements:
−
−
// Appel des triggers
−
include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php");
−
$interface=new Interfaces($this->db);
−
$interface->run_triggers('XXXXX_YYYYYY',$this,$user,$lang,$conf);
−
// Fin appel triggers
−
−
Ici, $this doit etre l'objet de la classe metier qui contient toutes les informations à passer au trigger. Remplacer, de plus, le 'XXXXX_YYYYYY' par un code évenement non déjà utilisé.
−
Il sera alors possible d'ajouter dans la methode run_trigger, un if qui permet de gérer ce code. La methode run_trigger serait alors de la forme :
−
−
function run_trigger($action,$object,$user,$lang,$conf)
−
{
−
// Mettre ici le code à exécuter en réaction de l'action
−
// Le type de l'évenement Dolibarr est stocké dans $action
−
// Les données de l'action sont stockées dans $object
−
// La configuration, utilisateur et langage sont dans $conf,$user et $lang
−
<b>
−
if ($action == 'XXXXX_YYYYY')
−
{
−
dolibarr_syslog("Trigger for action '$action' launched. id=".$object->id);
−
}
−
</b>
−
elseif ($action == 'COMPANY_CREATE')
−
{
−
dolibarr_syslog("Trigger for action '$action' launched. id=".$object->id);
−
}
−
elseif ($action == 'COMPANY_MODIFY')
−
{
−
dolibarr_syslog("Trigger for action '$action' launched. id=".$object->id);
−
}
−
elseif ($action == 'COMPANY_DELETE')
−
...
−
}