Triggers
Des règles qui s'exécutent dans la base de données à chaque insertion, modification ou suppression — dessinées dans un flux visuel et appliquées au moteur.
Un trigger est une règle qui vit dans la base de données et se déclenche toute seule chaque fois qu'une ligne d'une table est insérée, modifiée ou supprimée. Elle ne dépend pas de celui qui a écrit : que l'écriture vienne d'un écran, d'une API, d'un script ou d'une autre application reliée à la même base de données, le trigger s'exécute.
C'est l'argument en faveur des triggers, et aussi la prudence qu'ils exigent — de la logique qui s'exécute sans que personne l'appelle est de la logique que personne ne voit se produire.
Où vivent les triggers
Dans l'arborescence du datasource, à l'intérieur du groupe Programmation, à côté des Fonctions / Procédures :

Cliquer sur un trigger l'ouvre dans un onglet de l'espace de travail, avec son flux dessiné.
Nota
Tous les moteurs de base de données ne prennent pas en charge les triggers dessinés ainsi. La plateforme n'offre que ce que le moteur relié sait faire : si Nouveau trigger n'apparaît pas dans le menu du datasource, c'est que ce moteur ne le prend pas en charge. Les triggers créés en dehors de la plateforme restent listés, marqués Trigger externe — ne prend pas en charge le canvas (édition SQL uniquement).

Créer un trigger
- Passez la souris sur le datasource et ouvrez le menu ⋯.
- Choisissez Nouveau trigger. La boîte de dialogue s'ouvre avec les données initiales du trigger — le flux se construit ensuite dans le canvas.
- Remplissez :
| Champ | Ce que c'est |
|---|---|
| Nom | Le nom du trigger dans la base de données. La convention suggérée est trg_ma_table. |
| Table | La table surveillée. |
| Moment | BEFORE (avant que la ligne soit écrite) ou AFTER (après). |
| Événements | INSERT, UPDATE, DELETE — au moins un. Certains moteurs en acceptent plusieurs dans le même trigger, d'autres un seul. |
- Confirmez avec Créer et ouvrir le canvas.
Le trigger naît comme brouillon : il existe déjà dans la plateforme, mais il n'a pas encore été appliqué à la base de données. Tant qu'il est brouillon, l'arborescence l'identifie comme tel.
Moment et événements, en pratique
| Choix | Pour quoi |
|---|---|
| BEFORE INSERT/UPDATE | Normaliser ou compléter des valeurs avant qu'elles soient enregistrées — mettre un code en majuscules, remplir un champ dérivé. |
| AFTER INSERT/UPDATE/DELETE | Réagir à ce qui s'est déjà passé — écrire un historique, mettre à jour un total dans une autre table. |
Les valeurs de la ligne sont disponibles selon l'événement : les Nouvelles
valeurs (NEW) existent dans l'INSERT et dans l'UPDATE ; les Anciennes
valeurs (OLD) n'apparaissent que lorsque le trigger écoute UPDATE ou
DELETE — dans un INSERT, il n'y a pas d'ancienne ligne à montrer.
Le canvas du trigger
Le flux se dessine dans un canvas, et l'aide en haut résume le geste : faites glisser des fonctions/procédures de l'arborescence sur le canvas ; un double clic sur une boîte configure ses outputs/inputs.
Dans la barre au-dessus du canvas se trouvent, de gauche à droite :
| Bouton | Ce qu'il fait |
|---|---|
| Paramètres | Rouvre le nom, la table, le Moment et les Événements du trigger. |
| (le résumé) | Le nom, la table, le moment et les événements, toujours sous les yeux. |
| Expression | Ajoute un nœud d'expression au flux. |
| Voir le SQL | Affiche le trigger compilé, sans rien exécuter. |
| Enregistrer et appliquer dans la BD | Enregistre et applique le trigger au moteur. |
La boîte de la table — ce qui entre dans le flux
La première boîte du canvas est la table : c'est d'elle que sortent les valeurs de la ligne qui a déclenché le trigger. Faites-lui un double clic pour ouvrir les Outputs du trigger et choisir ce que ce trigger expose au flux : colonnes individuelles, la ligne entière (JSON), ou les deux.
- Nouvelles valeurs (NEW) — la ligne telle qu'elle devient.
- Anciennes valeurs (OLD) — la ligne telle qu'elle était.
- Dans les deux cas, en plus des colonnes séparées, vous pouvez exposer la ligne entière (JSON) — utile pour livrer tout d'un coup à une fonction d'historique.
Chaque sortie choisie devient un port sur la boîte, prêt à être connecté.
Les fonctions et les procédures
Le travail, dans un trigger, est fait par des fonctions et des procédures qui existent déjà dans la base de données. Faites-les glisser de l'arborescence (Programmation ▸ Fonctions / Procédures) sur le canvas : chacune devient une boîte avec un paramètre par entrée.
- Connectez un port de la table au paramètre qu'il alimente — le paramètre s'affiche alors comme connecté.
- Un paramètre sans connexion garde sa valeur par défaut.
- Les fonctions renvoient aussi une valeur : le port de retour peut alimenter une autre boîte, en enchaînant les étapes.
- Le menu de la boîte elle-même contient Retirer du flux.
Pour défaire une connexion, cliquez sur la ligne : Retirer cette connexion ? Le paramètre cesse de recevoir cette valeur.
Les nœuds d'expression
Entre un port et un paramètre, la valeur ne convient pas toujours telle quelle.
Le bouton Expression ajoute un nœud qui affine/transforme les valeurs :
vous déclarez des Inputs (avec + input), vous leur connectez des ports,
et vous écrivez l'Expression SQL en utilisant {a}, {b}… pour les inputs
connectés — par exemple upper({a}) || '-' || {b}. Le résultat sort par le port
du nœud et poursuit vers où vous voulez.
Faites un double clic sur le nœud pour le configurer (la boîte elle-même dit double clic pour modifier… tant qu'elle est vide).
Voir le SQL avant d'appliquer
Voir le SQL ouvre l'aperçu — SQL du trigger (aperçu) — avec l'avertissement qui compte : Compilé avec vos modifications actuelles — rien n'a été exécuté. Vérifiez et appliquez quand vous le souhaitez.
C'est l'étape de sécurité : vous voyez exactement ce qui va être créé dans la base de données, vous pouvez le copier, le montrer à qui administre le moteur, et n'appliquer qu'ensuite. La même boîte de dialogue a le bouton Enregistrer et appliquer dans la BD sous la main.
Appliquer le trigger
Enregistrer et appliquer dans la BD fait les deux choses : il enregistre le dessin et crée le trigger dans le moteur. Quand cela se passe bien, la plateforme confirme : Trigger appliqué dans la base de données.
Avant d'appliquer, le dessin est vérifié. Les refus sont explicites :
| Message | Ce qui manque |
|---|---|
| Donnez un nom au trigger (Paramètres). | Le nom. |
| Choisissez la table (Paramètres). | La table surveillée. |
| Choisissez au moins un événement (Paramètres). | Au moins un parmi INSERT/UPDATE/DELETE. |
| Le canvas n'a aucune fonction/procédure. | Un flux vide ne fait rien — faites glisser au moins une fonction. |
| Il y a un nœud d'expression sans expression définie. | Un nœud d'expression vide. |
Atenção
Appliquer un trigger est une écriture dans la base de données reliée, avec un effet immédiat sur toutes les écritures de cette table — y compris celles qui étaient déjà en cours. Sur un système en production, regardez le SQL d'abord et appliquez à une heure convenue.
Supprimer un trigger
Le menu ⋯ du trigger dans l'arborescence contient Supprimer, avec confirmation — Supprimer le trigger « … » ? — et c'est définitif : le trigger sort de la base de données.
Voir ce qui est dans la base de données
La console SQL, sous le diagramme du modèle, est l'endroit pour confirmer l'effet d'un trigger : écrivez une requête, Exécuter, et regardez les vraies lignes. C'est aussi par là qu'on inspecte ce qui s'y trouvait avant votre arrivée.

Trigger, script ou workflow ?
Les trois automatisent, et le bon choix évite des mois de confusion :
| Outil | S'exécute… | Bon pour |
|---|---|---|
| Trigger | Dans la base de données, à chaque écriture de la table. | Des règles qui doivent valoir pour toutes les écritures : historique, champs dérivés, totaux. |
| Script | Hors de la base de données, à la main, planifié ou comme étape d'une API. | Le travail lourd, les intégrations, les fichiers, les envois — tout ce qui prend du temps ou parle avec l'extérieur. |
| Workflow | Comme un processus avec des étapes, des décisions et des tâches humaines. | Les approbations, les circuits avec des personnes au milieu, les attentes. |
Dica
Si la logique porte sur les données et ne peut pas échouer, c'est un trigger. Si la logique porte sur le métier et que quelqu'un doit la voir se produire, non : un script ou un workflow laissent une trace, s'exécutent avec un historique et s'expliquent tout seuls dans le Radar.
Pourquoi ne… ?
- Pourquoi Nouveau trigger n'apparaît-il pas dans le menu du datasource ? Le moteur relié ne prend pas en charge les triggers dessinés dans le canvas. Vous pouvez toujours les créer en SQL, et ils apparaissent dans l'arborescence comme triggers externes.
- Pourquoi le trigger dit-il toujours qu'il est un brouillon ? Il a été créé mais pas encore appliqué. Ouvrez-le et utilisez Enregistrer et appliquer dans la BD.
- Pourquoi je ne vois pas les Anciennes valeurs (OLD) ? Le trigger n'écoute ni
UPDATEniDELETE. Dans unINSERT, il n'existe pas d'ancienne ligne. - Pourquoi n'arrivé-je pas à connecter un port à un paramètre ? Toutes les connexions n'ont pas de sens — vérifiez que vous reliez une sortie (à droite de la boîte) à une entrée (à gauche de l'autre).
- Pourquoi le trigger ne fait-il rien ? Un flux sans fonctions ne génère aucun
travail : la compilation le refuse. Et vérifiez le Moment — un
BEFOREet unAFTERne voient pas la même chose. - Pourquoi les écritures sont-elles devenues lentes après la création du trigger ? Le trigger s'exécute sur chaque ligne écrite. S'il appelle du travail lourd, ce travail se produit désormais à chaque insertion — dans ces cas-là, l'endroit est un script planifié.