Line 1:
Line 1:
{{TemplateDocDev}}
{{TemplateDocDev}}
−
== Ajouter son code sur un événement Dolibarr ==
+
= Ajouter son code sur un événement Dolibarr =
Pour permettre de déclencher du code personnalisé en réaction à un évènement Dolibarr (création/modification/suppression d'une société/facture/produit/utilisateur ou autre), Dolibarr propose un mécanisme de triggers métiers. Ce mécanisme vous permet de personnaliser un workflow afin que les évènements de gestion Dolibarr soient répercutés dans une autre application par exemple.
Pour permettre de déclencher du code personnalisé en réaction à un évènement Dolibarr (création/modification/suppression d'une société/facture/produit/utilisateur ou autre), Dolibarr propose un mécanisme de triggers métiers. Ce mécanisme vous permet de personnaliser un workflow afin que les évènements de gestion Dolibarr soient répercutés dans une autre application par exemple.
Line 33:
Line 33:
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ée 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ée par un test sur la variable '''$action''':
−
<pre>
+
<source lang="php">
−
function run_trigger($action,$object,$user,$lang,$conf)
+
function run_trigger($action,$object,$user,$lang,$conf)
−
{
+
{
−
// Mettre ici le code à exécuter en réaction de l'action
+
// Mettre ici le code à exécuter en réaction de l'action
−
// Le type de l'évènement Dolibarr est stocké dans $action
+
// Le type de l'évènement Dolibarr est stocké dans $action
−
// Les données de l'action sont stockées dans $object
+
// Les données de l'action sont stockées dans $object
−
// La configuration, utilisateur et langage sont dans $conf,$user et $lang
+
// La configuration, utilisateur et langage sont dans $conf,$user et $lang
−
if ($action == 'COMPANY_CREATE')
+
if ($action == 'COMPANY_CREATE')
−
{
+
{
−
dol_syslog("Trigger for action '$action' launched. id=".$object->id);
+
dol_syslog("Trigger for action '$action' launched. id=".$object->id);
−
}
+
}
−
elseif ($action == 'COMPANY_MODIFY')
+
elseif ($action == 'COMPANY_MODIFY')
−
{
+
{
−
dol_syslog("Trigger for action '$action' launched. id=".$object->id);
+
dol_syslog("Trigger for action '$action' launched. id=".$object->id);
−
}
+
}
−
elseif ($action == 'COMPANY_DELETE')
+
elseif ($action == 'COMPANY_DELETE')
−
...
+
...
−
}
+
}
−
</pre>
+
</source>
Vous pouvez faire ce que vous voulez dans cette portion de code du moment que la fonction run_trigger renvoi un code retour sur le principe suivant:
Vous pouvez faire ce que vous voulez dans cette portion de code du moment que la fonction run_trigger renvoi un code retour sur le principe suivant:
Line 67:
Line 67:
dol_syslog("mon texte de trace", LOG_DEBUG);
dol_syslog("mon texte de trace", LOG_DEBUG);
−
== Liste des évènements connus ==
+
= Liste des évènements gérés =
Les évènements Dolibarr qui provoquent un appel de triggers sont, pour l'instant, identifiés par les codes '''$action''' évènements suivants:
Les évènements Dolibarr qui provoquent un appel de triggers sont, pour l'instant, identifiés par les codes '''$action''' évènements suivants:
Line 134:
Line 134:
Dans ces 6 cas, la variable $object contient un objet de type adherent.class.php
Dans ces 6 cas, la variable $object contient un objet de type adherent.class.php
−
== Gérer de nouveau évènements ==
+
= Gérer de nouveau évènements =
Pour gérer d'autre évènements 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:
Pour gérer d'autre évènements 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
+
<source lang="php">
−
include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php");
+
// Appel des triggers
−
$interface=new Interfaces($this->db);
+
include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php");
−
$interface->run_triggers('XXXXX_YYYYYY',$this,$user,$lang,$conf);
+
$interface=new Interfaces($this->db);
−
// Fin appel triggers
+
$interface->run_triggers('XXXXX_YYYYYY',$this,$user,$lang,$conf);
+
// Fin appel triggers
+
</source>
Ici, $this doit être l'objet de la classe métier qui contient toutes les informations à passer au trigger. Remplacer, de plus, le 'XXXXX_YYYYYY' par un code évènement non déjà utilisé.
Ici, $this doit être l'objet de la classe métier qui contient toutes les informations à passer au trigger. Remplacer, de plus, le 'XXXXX_YYYYYY' par un code évènement non déjà utilisé.
Il sera alors possible d'ajouter dans la méthode run_trigger, un if qui permet de gérer ce code. La méthode run_trigger serait alors de la forme :
Il sera alors possible d'ajouter dans la méthode run_trigger, un if qui permet de gérer ce code. La méthode run_trigger serait alors de la forme :
−
function run_trigger($action,$object,$user,$lang,$conf)
+
<source lang="php">
−
{
+
function run_trigger($action,$object,$user,$lang,$conf)
−
// Mettre ici le code à exécuter en réaction de l'action
+
{
−
// Le type de l'évènement Dolibarr est stocké dans $action
+
// Mettre ici le code à exécuter en réaction de l'action
−
// Les données de l'action sont stockées dans $object
+
// Le type de l'évènement Dolibarr est stocké dans $action
−
// La configuration, utilisateur et langage sont dans $conf,$user et $lang
+
// Les données de l'action sont stockées dans $object
−
<b>
+
// La configuration, utilisateur et langage sont dans $conf,$user et $lang
−
if ($action == 'XXXXX_YYYYY')
+
<b>
−
{
+
if ($action == 'XXXXX_YYYYY')
−
dol_syslog("Trigger for action '$action' launched. id=".$object->id);
+
{
−
}
+
dol_syslog("Trigger for action '$action' launched. id=".$object->id);
−
</b>
+
}
−
elseif ($action == 'COMPANY_CREATE')
+
</b>
−
{
+
elseif ($action == 'COMPANY_CREATE')
−
dol_syslog("Trigger for action '$action' launched. id=".$object->id);
+
{
−
}
+
dol_syslog("Trigger for action '$action' launched. id=".$object->id);
−
elseif ($action == 'COMPANY_MODIFY')
+
}
−
{
+
elseif ($action == 'COMPANY_MODIFY')
−
dol_syslog("Trigger for action '$action' launched. id=".$object->id);
+
{
−
}
+
dol_syslog("Trigger for action '$action' launched. id=".$object->id);
−
elseif ($action == 'COMPANY_DELETE')
+
}
−
...
+
elseif ($action == 'COMPANY_DELETE')
−
}
+
...
+
}
+
</source>
−
== Conclusion ==
+
= Conclusion =
Vous pouvez donc en quelques minutes, ajouter une interface Dolibarr vers exterieur sans risque puisqu'on ne touche pas au code Dolibarr, on s'est contenté de placer un nouveau fichier trigger dans le répertoire des triggers.
Vous pouvez donc en quelques minutes, ajouter une interface Dolibarr vers exterieur sans risque puisqu'on ne touche pas au code Dolibarr, on s'est contenté de placer un nouveau fichier trigger dans le répertoire des triggers.
Si cette interface peut être utile à d'autre, n'hésitez pas à la packager en tgz (voir les wiki sur la diffusion de modules) et de la soumettre dans l'espace des téléchargement-contributions sur le site de Dolibarr.
Si cette interface peut être utile à d'autre, n'hésitez pas à la packager en tgz (voir les wiki sur la diffusion de modules) et de la soumettre dans l'espace des téléchargement-contributions sur le site de Dolibarr.