KEPLIN Docs

Triggers

Regels die binnen de database draaien bij elke invoeging, wijziging of verwijdering — getekend in een visuele flow en toegepast op de engine.

Een trigger is een regel die binnen de database leeft en vanzelf afgaat telkens wanneer een rij van een tabel wordt ingevoegd, gewijzigd of verwijderd. Zij hangt niet af van wie er schreef: of de schrijfactie nu van een scherm, van een API, van een script of van een andere applicatie op dezelfde database komt, de trigger draait.

Dat is het argument vóór triggers, en meteen de voorzichtigheid die zij vragen — logica die draait zonder dat iemand haar aanroept, is logica die niemand ziet gebeuren.

Waar de triggers leven

In de boom van de datasource, binnen de groep Programmering, naast de Functies / Procedures:

De groep Programmering van de boom: Functies / Procedures en Triggers, met het aantal van elk.
De groep Programmering van de boom: Functies / Procedures en Triggers, met het aantal van elk.

Op een trigger klikken opent hem in een tabblad van de werkruimte, met zijn flow getekend.

Nota

Niet alle database-engines ondersteunen triggers die zo getekend worden. Het platform biedt alleen wat de gekoppelde engine kan: verschijnt Nieuwe trigger niet in het menu van de datasource, dan is dat omdat die engine het niet ondersteunt. Triggers die buiten het platform zijn aangemaakt, blijven in de lijst staan, gemarkeerd als Externe trigger — ondersteunt het canvas niet (alleen SQL-bewerking).

Het actiemenu van de datasource — wat het platform aanbiedt om aan te maken, hangt af van de engine van de gekoppelde database.
Het actiemenu van de datasource — wat het platform aanbiedt om aan te maken, hangt af van de engine van de gekoppelde database.

Een trigger aanmaken

  1. Ga met de muis over de datasource en open het menu .
  2. Kies Nieuwe trigger. Het venster gaat open met de beginwaarden van de trigger — de flow bouwt u daarna in het canvas.
  3. Vul in:
Veld Wat het is
Naam De naam van de trigger in de database. De voorgestelde conventie is trg_mijn_tabel.
Tabel De bewaakte tabel.
Moment BEFORE (voordat de rij wordt geschreven) of AFTER (daarna).
Gebeurtenissen INSERT, UPDATE, DELETE — ten minste één. Sommige engines aanvaarden er meerdere in dezelfde trigger, andere maar één.
  1. Bevestig met Aanmaken en canvas openen.

De trigger ontstaat als concept: hij bestaat al op het platform, maar is nog niet op de database toegepast. Zolang hij concept is, herkent de boom hem als zodanig.

Moment en gebeurtenissen, in de praktijk

Keuze Waarvoor
BEFORE INSERT/UPDATE Waarden normaliseren of aanvullen voordat ze worden opgeslagen — een code in hoofdletters zetten, een afgeleid veld invullen.
AFTER INSERT/UPDATE/DELETE Reageren op wat al gebeurd is — een historiek wegschrijven, een totaal in een andere tabel bijwerken.

De waarden van de rij zijn beschikbaar afhankelijk van de gebeurtenis: de Nieuwe waarden (NEW) bestaan bij INSERT en bij UPDATE; de Oude waarden (OLD) verschijnen alleen wanneer de trigger naar UPDATE of DELETE luistert — bij een INSERT is er geen oude rij om te tonen.

Het canvas van de trigger

De flow tekent u in een canvas, en de tip bovenaan vat het gebaar samen: sleep functies/procedures uit de boom naar het canvas; dubbelklik op een blok om de outputs/inputs ervan in te stellen.

Op de balk boven het canvas staan, van links naar rechts:

Knop Wat die doet
Instellingen Opent opnieuw naam, tabel, Moment en Gebeurtenissen van de trigger.
(de samenvatting) De naam, de tabel, het moment en de gebeurtenissen, altijd in beeld.
Expressie Voegt een expressieknooppunt toe aan de flow.
SQL bekijken Toont de gecompileerde trigger, zonder iets uit te voeren.
Opslaan en toepassen op de database Slaat de trigger op en past hem toe op de engine.

Het blok van de tabel — wat de flow binnenkomt

Het eerste blok van het canvas is de tabel: daaruit komen de waarden van de rij die de trigger heeft afgevuurd. Dubbelklik erop om de Outputs van de trigger te openen en te kiezen wat deze trigger aan de flow beschikbaar stelt: afzonderlijke kolommen, de hele rij (JSON), of beide.

  • Nieuwe waarden (NEW) — de rij zoals zij wordt.
  • Oude waarden (OLD) — de rij zoals zij was.
  • In beide gevallen kunt u, naast de losse kolommen, de hele rij (JSON) beschikbaar stellen — handig om alles in één keer aan een historiekfunctie door te geven.

Elke gekozen uitvoer wordt een poort op het blok, klaar om gekoppeld te worden.

De functies en de procedures

Het werk wordt in een trigger gedaan door functies en procedures die al in de database bestaan. Sleep ze uit de boom (Programmering ▸ Functies / Procedures) naar het canvas: elk wordt een blok met één parameter per invoer.

  1. Koppel een poort van de tabel aan de parameter die zij voedt — de parameter toont zich daarna als verbonden.
  2. Een parameter zonder koppeling houdt zijn standaardwaarde.
  3. Functies geven ook een waarde terug: de retourpoort kan een ander blok voeden en zo stappen aan elkaar rijgen.
  4. Het menu van het blok zelf heeft Uit de flow verwijderen.

Om een koppeling ongedaan te maken, klikt u op de lijn: Deze verbinding verwijderen? De parameter ontvangt deze waarde niet meer.

De expressieknooppunten

Tussen een poort en een parameter voldoet de waarde niet altijd zoals zij is. De knop Expressie voegt een knooppunt toe dat waarden verfijnt/transformeert: u declareert Inputs (met + input), koppelt er poorten aan, en schrijft de SQL-expressie met {a}, {b}… voor de verbonden inputs — bijvoorbeeld upper({a}) || '-' || {b}. Het resultaat komt uit de poort van het knooppunt en gaat verder waarheen u wilt.

Dubbelklik op het knooppunt om het in te stellen (het blok zegt zelf dubbelklik om te bewerken… zolang het leeg is).

De SQL bekijken vóór het toepassen

SQL bekijken opent het voorbeeld — SQL van de trigger (voorbeeld) — met de waarschuwing die ertoe doet: Gecompileerd met uw huidige wijzigingen — er is niets uitgevoerd. Beoordeel en pas toe wanneer u wilt.

Het is de veiligheidsstap: u ziet precies wat er in de database aangemaakt gaat worden, u kunt het kopiëren, het laten zien aan wie de engine beheert, en pas daarna toepassen. Datzelfde venster heeft de knop Opslaan en toepassen op de database bij de hand.

De trigger toepassen

Opslaan en toepassen op de database doet beide dingen: het slaat de tekening op en maakt de trigger in de engine aan. Gaat het goed, dan bevestigt het platform: Trigger toegepast op de database.

Vóór het toepassen wordt de tekening gecontroleerd. De weigeringen zijn expliciet:

Boodschap Wat er ontbreekt
Geef de trigger een naam (Instellingen). De naam.
Kies de tabel (Instellingen). De bewaakte tabel.
Kies ten minste één gebeurtenis (Instellingen). Ten minste een van INSERT/UPDATE/DELETE.
Het canvas heeft geen enkele functie/procedure. Een lege flow doet niets — sleep er ten minste één functie in.
Er is een expressieknooppunt zonder ingestelde expressie. Een leeg expressieknooppunt.

Atenção

Een trigger toepassen is een schrijfactie op de gekoppelde database, met onmiddellijk effect op alle schrijfacties van die tabel — ook die welke al aan de gang waren. In een productiesysteem: bekijk eerst de SQL en pas toe op een afgesproken tijdstip.

Een trigger verwijderen

Het menu van de trigger in de boom heeft Verwijderen, met bevestiging — De trigger "…" verwijderen? — en het is definitief: de trigger verdwijnt uit de database.

Zien wat er in de database staat

De SQL-console, onder het modeldiagram, is de plek om het effect van een trigger te bevestigen: schrijf een query, Uitvoeren, en bekijk de echte rijen. Het is ook hier dat u onderzoekt wat er al stond voordat u kwam.

De SQL-console, onder het model: u schrijft links, Uitvoeren draait, en het resultaat verschijnt rechts.
De SQL-console, onder het model: u schrijft links, Uitvoeren draait, en het resultaat verschijnt rechts.

Trigger, script of workflow?

Alle drie automatiseren, en de juiste keuze bespaart u maanden verwarring:

Gereedschap Draait… Goed voor
Trigger Binnen de database, bij elke schrijfactie op de tabel. Regels die voor alle schrijfacties moeten gelden: historiek, afgeleide velden, totalen.
Script Buiten de database, met de hand, gepland of als stap van een API. Zwaar werk, integraties, bestanden, verzendingen — alles wat lang duurt of met de buitenwereld praat.
Workflow Als een proces met stappen, beslissingen en menselijke taken. Goedkeuringen, circuits met mensen ertussen, wachttijden.

Dica

Gaat de logica over de gegevens en mag zij niet falen, dan is het een trigger. Gaat de logica over het bedrijf en moet iemand haar zien gebeuren, dan niet: een script of een workflow laten sporen na, draaien met een geschiedenis en leggen zichzelf uit in Radar.

Waarom niet…?

  • Waarom verschijnt Nieuwe trigger niet in het menu van de datasource? De gekoppelde engine ondersteunt geen triggers die in het canvas getekend worden. U kunt ze nog steeds in SQL aanmaken, en ze verschijnen in de boom als externe triggers.
  • Waarom blijft de trigger zeggen dat hij een concept is? Hij is aangemaakt maar nog niet toegepast. Open hem en gebruik Opslaan en toepassen op de database.
  • Waarom zie ik de Oude waarden (OLD) niet? De trigger luistert niet naar UPDATE en niet naar DELETE. Bij een INSERT bestaat er geen oude rij.
  • Waarom lukt het niet een poort aan een parameter te koppelen? Niet alle koppelingen hebben zin — controleer of u een uitgang (rechts van het blok) aan een ingang (links van het andere) koppelt.
  • Waarom doet de trigger niets? Een flow zonder functies levert geen enkel werk op: het compileren weigert hem. En controleer het Moment — een BEFORE en een AFTER zien niet hetzelfde.
  • Waarom zijn de schrijfacties traag geworden nadat ik de trigger heb aangemaakt? De trigger draait bij elke geschreven rij. Roept hij zwaar werk aan, dan gebeurt dat werk voortaan bij elke invoeging — in die gevallen is de plek een gepland script.