Difference between revisions of "Interfaces Dolibarr vers exterieur"

From Dolibarr ERP CRM Wiki
Jump to navigation Jump to search
m
Tag: 2017 source edit
 
(39 intermediate revisions by 6 users not shown)
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 personnalisé en réaction à un évènement 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énements de gestion Dolibarr soient répercuté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:  
  
Donc, pour ajouter son propre code à déclencher par trigger, la procédure est la suivante:
+
* 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.
  
 
+
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]].
1) Copier le fichier '''includes/triggers/interface_all_Demo.class.php''' sous le nom:
 
* '''interface_all_''xxx''.class.php'''
 
ou bien
 
* '''interface_mod''MonModule_xxx''.class.php'''
 
où ''xxx'' est une chaine de votre choix et ''MonModule'' est le nom du module si votre trigger ne doit etre activé que si le module MonModule est actif.
 
Il faut laisser ce nouveau fichier dans le même répertoire.
 
 
 
Par exemple:
 
''includes/triggers/interface_modFacture_Monworkflow.class.php''
 
 
 
Les triggers seront déclenchés a chaque evenement Dolibarr a condition que le module Facture soit actif.
 
 
 
 
 
2) Editer ce fichier ''interface_modMonModule_Monworkflow.class.php'' afin de renommer la classe ''InterfaceDemo'' par ''InterfaceMonworkflow''
 
 
 
 
 
3) Editer ce fichier afin de renseigner dans '''$this->name''' la valeur ''Monworkflow''.
 
 
 
Ensuite, accéder à la page Accueil-> Infos Systemes -> 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.
 
 
 
 
 
4) Revenez maintenant à l'édition du fichier trigger afin d'ajouter votre code dans la fonction ''run_trigger''.
 
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 pouvant être identifié par un test sur la variable '''$action''':
 
 
 
<pre>
 
  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
 
        // 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')
 
        ...
 
  }
 
</pre>
 
 
 
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:
 
 
 
<0 si ko, 0 si aucune action faite, >0 si ok
 
 
 
Vous pouvez de plus dans cette fonction utiliser les objets suivant:
 
* '''$object''' est l'objet sur lequel porte l'action (une facture, une propal, une commande, un utilisateur, etc...)
 
* '''$user''' est l'objet de l'utilisateur Dolibarr qui realise l'action
 
* '''$langs''' est l'objet qui contient la langue de l'utilisateur Dolibarr
 
* '''$conf''' est l'objet qui contient toute la configuration de Dolibarr.
 
 
 
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 '''run_trigger''' et encapsuler dans un transaction. Si votre trigger renvoie un code ko, la fonction appelante peut annuler la transaction (ceci depend de la fonction appelante).
 
Ajouter des traces dans la fonction '''run_trigger''' afin de vous assurer que le code s'execute bien.
 
 
 
== Gérer de nouveaux évènements ==
 
 
 
Les évènements Dolibarr qui provoquent un appel de triggers sont, pour l'instant, identifiés par les codes '''$action''' évènements suivants:
 
 
 
* USER_CREATE
 
* USER_MODIFY
 
* USER_DISABLE
 
Dans ces 3 cas, la variable $object contient un objet de type user.class.php
 
 
 
* COMPANY_CREATE
 
* COMPANY_MODIFY
 
* COMPANY_DELETE
 
Dans ces 3 cas, la variable $object contient un objet de type societe.class.php
 
 
 
* PRODUCT_CREATE
 
* PRODUCT_MODIFY
 
* PRODUCT_DELETE
 
Dans ces 3 cas, la variable $object contient un objet de type product.class.php
 
 
 
* ORDER_CREATE
 
* ORDER_VALIDATE
 
* ORDER_DELETE
 
Dans ces 3 cas, la variable $object contient un objet de type commande.class.php
 
 
 
* ORDER_SUPPLIER_CREATE
 
* ORDER_SUPPLIER_VALIDATE
 
Dans ces 3 cas, la variable $object contient un objet de type fournisseur.commande.class.php
 
 
 
* PROPAL_CREATE
 
* PROPAL_MODIFY
 
* PROPAL_VALIDATE
 
* PROPAL_CLOSE_SIGNED
 
* PROPAL_CLOSE_REFUSED
 
Dans ces 5 cas, la variable $object contient un objet de type societe.class.php
 
 
 
* CONTRACT_CREATE
 
* CONTRACT_MODIFY
 
* CONTRACT_ACTIVATE
 
* CONTRACT_CANCEL
 
* CONTRACT_CLOSE
 
* CONTRACT_DELETE
 
Dans ces 6 cas, la variable $object contient un objet de type contract.class.php
 
 
 
* BILL_CREATE
 
* BILL_MODIFY
 
* BILL_VALIDATE
 
* BILL_CANCEL
 
* BILL_DELETE
 
Dans ces 5 cas, la variable $object contient un objet de type facture.class.php
 
 
 
* PAYMENT_CUSTOMER_CREATE
 
Dans ce cas, la variable $object contient un objet de type paiement.class.php
 
 
 
* PAYMENT_SUPPLIER_CREATE
 
Dans ce cas, la variable $object contient un objet de type paiementfourn.class.php
 
 
 
* FICHEINTER_VALIDATE
 
Dans ce cas, la variable $object contient un objet de type ficheinter.class.php
 
 
 
* MEMBER_CREATE
 
* MEMBER_VALIDATE
 
* MEMBER_SUBSCRIPTION
 
* MEMBER_MODIFY
 
* MEMBER_RESILIATE
 
* MEMBER_DELETE
 
Dans ces cas, la variable $object contient un objet de type adherent.class.php
 
 
 
 
 
 
 
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
 
  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 ê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 :
 
 
 
  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
 
        // 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')
 
        ...
 
  }
 

Latest revision as of 15:14, 14 August 2024


Dolibarr fournit deux mécanismes simples pour permettre d'interfacer Dolibarr avec une application tierce:

  • Le 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 - 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.

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.