Remplacer un trigger du core

Bonjour à tous,

Je cherche à comprendre le fonctionnement des triggers et pour cela j’aurais besoin d’un petit éclaircissement…

(Dolibarr 16.0.2 - Objectif de mon trigger, modifier le message stocké dans la table _actioncomm colonne note)

D’après mes premiers tests, le trigger créé depuis mon module est exécuté après (priorité 99) le trigger lancé par Dolibarr. Il ne remplace donc pas le trigger de Dolibarr.

Existe-t-il une possibilité de ne pas exécuter le trigger de Dolibarr ?

Peut être en exécutant le trigger de mon module avant celui de Dolibarr et en forçant la fin de l’action ?

Pourriez-vous m’indiquer quelles sont les bonnes pratiques pour overrider un trigger Dolibarr ?

Je vous remercie pour votre aide :slight_smile:

Bonjour,

Yes !

Merci Altatof,

Il n’y a donc aucune façon intégrée à Dolibarr pour faire proprement un override des fichiers sources ?

Car avec cette technique je risque de bloquer l’exécution de triggers liés à cette action qui pourraient être ajoutés par la suite par des modules externes (voir même par Dolibarr lui-même).

Merci encore :slight_smile:

Bonjour,
Avez-vous été voir du côté des hook ?
plus d’info sur le wiki → Système de Hooks - Dolibarr ERP CRM Wiki
bonne journée,

Merci Akene,

Oui, j’ai déjà regardé les hooks, ils ne permettent pas de remplacer des fonctions existantes mais seulement d’ajouter des fonctions à des moments précis de l’exécution du code.

J’ai testé de forcer la fin d’une action en vidant la variable $action $action = ""; mais ça ne marche pas, les autres triggers liés à cette action, même appelés plus tard, s’exécutent quand même.

Je ne vois donc qu’une solution, c’est de faire une requête sql pour récupérer la dernière entrée de la table et de la modifier postérieurement à sa création… Ce n’est pas du tout optimisé mais ça devrait faire le job.

Je reste à l’écoute de vos idées pour optimiser l’override d’un trigger :slight_smile:

Merci encore pour votre aide !

Salut !
Je déterre volontairement car en faisant des recherches je suis tombé sur ce sujet sans solution.
J’ai eu le même soucis que toi, et on m’a répondu avec une solution qui me dépanne pas mal alors peut-être que je vais pouvoir aider, dans ton trigger commence par copier coller le code du trigger existant que tu veux conserver puis ajoute ton code en dessous / dedans.
Ensuite, place dans un autre dossier / renomme / supprime le trigger original.
L’original reviendra avec les mises à jour donc utilises les hook doAction pour faire la même action que tu as fait au dessus, mets bien une condition if file_exists().
Voilà, ça dépanne bien, je trouve pas ça optimal mais ça fonctionne de mon côté.

Merci pour l’astuce @c3do