KEPLIN Docs

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 :

Le groupe Programmation de l'arborescence : Fonctions / Procédures et Triggers, avec le décompte de chacun.
Le groupe Programmation de l'arborescence : Fonctions / Procédures et Triggers, avec le décompte de chacun.

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).

Le menu d'actions du datasource — ce que la plateforme propose de créer dépend du moteur de la base de données reliée.
Le menu d'actions du datasource — ce que la plateforme propose de créer dépend du moteur de la base de données reliée.

Créer un trigger

  1. Passez la souris sur le datasource et ouvrez le menu .
  2. 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.
  3. 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.
  1. 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.

  1. Connectez un port de la table au paramètre qu'il alimente — le paramètre s'affiche alors comme connecté.
  2. Un paramètre sans connexion garde sa valeur par défaut.
  3. Les fonctions renvoient aussi une valeur : le port de retour peut alimenter une autre boîte, en enchaînant les étapes.
  4. 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.

La console SQL, sous le modèle : on écrit à gauche, Exécuter lance, et le résultat apparaît à droite.
La console SQL, sous le modèle : on écrit à gauche, Exécuter lance, et le résultat apparaît à droite.

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 UPDATE ni DELETE. Dans un INSERT, 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 BEFORE et un AFTER ne 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é.