Validatie
De twee verdedigingslinies van de gegevens — wat het model garandeert en de regels die de formulieren van de schermen controleren voordat er wordt opgeslagen.
Verkeerde gegevens komen binnen door onoplettendheid, niet door kwade wil: een btw-nummer met acht cijfers, een e-mailadres zonder apenstaartje, een korting van 300 %, een record dat opgeslagen wordt zonder het veld dat de rest van het proces nodig heeft. Valideren is die deuren sluiten — en in Keplin sluiten ze in twee lagen, die u beter niet door elkaar haalt.
| Laag | Waar u die instelt | Wanneer die werkt | Wat die vangt |
|---|---|---|---|
| Het model | In de editor van de tabel (zie Tabellen en velden) | Bij elke schrijfactie, waar die ook vandaan komt | Wat er nooit met de gegevens mag gebeuren. |
| De regels van de velden | In de inspector van elk formulierveld, categorie Validatie | Wanneer de gebruiker een formulier opslaat | Wat de persoon aan het typen is, met de juiste boodschap naast het veld. |
De vuistregel: wat waar is over de gegevens hoort in het model; wat hulp is voor de gebruiker hoort in het formulier. Een verplicht veld is beide — u schakelt NULL toegestaan uit in het model en zet Verplicht aan op het veld van het scherm.
Wat het model garandeert
Dit heten geen "validatieregels", maar het is de enige verdediging die niet te omzeilen is: zij geldt voor de schermen, voor de API's, voor de scripts en voor wie rechtstreeks in de database schrijft.
| Onderdeel | Wat het verhindert |
|---|---|
| NULL toegestaan uitgeschakeld | Een record zonder waarde in die kolom. |
| Type van de kolom | Tekst in een datumveld, letters in een getal. |
| Lengte / Precisie · Schaal | Tekst die langer is dan de kolom, of geld met te veel decimalen. |
| Primaire sleutel (PK) | Dubbele records en records die niet te identificeren zijn. |
| Index unique | Twee klanten met hetzelfde btw-nummer, twee gebruikers met hetzelfde e-mailadres. |
| Kolom van het type enum | Een status die niet in de lijst staat. |
| Fysieke relatie + Bij het verwijderen van de parent | Verweesde kinderen, of verwijderingen die meenemen wat ze niet mogen. |

Dica
Vraag uzelf af, voordat u een regel in een formulier schrijft: kan dit ooit, in enig record, waar zijn? Is het antwoord nee, dan hoort het in het model — want het formulier is maar één van de deuren waardoor de gegevens binnenkomen.
De regels van de formuliervelden
Alle formuliervelden — Tekstvak, Tekstgebied, Getal, Ja/Nee, Keuzelijst, Datum, Kleur, Bestand — hebben in de inspector de categorie Validatie. Daar declareert u wat dat veld aanvaardt.
Om er te komen:
- Open het scherm in de designer.
- Selecteer het veld — in het canvas, of via het tabblad Structuur van de inspector.
- Open op het tabblad Eigenschappen de categorie Validatie.

Verplicht
De schakelaar Verplicht is de eerste en meest gebruikte regel: het veld moet ingevuld zijn. Het is ook de enige die over het lege gaat — alle andere laten een leeg veld door, omdat het lege de zaak van Verplicht is.

De standaardregels
Afhankelijk van het type veld toont de categorie de regels die zin hebben:
| Regel | Waar die verschijnt | Wat die controleert |
|---|---|---|
| Masker | Tekstvak | De notatie tijdens het typen: # cijfer, A letter, N alfanumeriek, * willekeurig — de rest is vaste tekst. Bijv.: +351 ### ### ###. |
| Min. tekens | Tekstvak, Tekstgebied | Minimale lengte van de tekst. |
| Max. tekens | Tekstvak, Tekstgebied | Maximale lengte van de tekst. |
| Patroon (regex) | Tekstvak, Tekstgebied | Een reguliere expressie waaraan de waarde moet voldoen. Bijv.: ^[A-Z]{2}\d{4}$. |
| Notatie | Tekstvak | Geen, Is e-mail, Is een telefoonnummer of Is een getal. Ze sluiten elkaar uit: een waarde kan niet tegelijk een e-mailadres en een telefoonnummer zijn. |
| Min. waarde | Getal | De kleinste aanvaarde waarde. |
| Max. waarde | Getal | De grootste aanvaarde waarde. |
| Gelijk aan veld | Alle velden | De waarde moet gelijk zijn aan die van een ander veld op het scherm — de bevestiging van een wachtwoord, het herhaalde e-mailadres. |
Nota
Het Masker is typhulp, geen validatie: het stuurt wat de persoon schrijft, maar wie de notatie garandeert is het Patroon (regex) of de Notatie. Een telefoonnummer met masker kan halverwege blijven steken.
Validatie in code
Onder de standaardregels staat de regel Validatie, die Geen validatie — instellen of Ingesteld — bewerken zegt. De knop … opent een code-editor voor de regels die de velden niet dekken: een btw-nummer met controlecijfer, een IBAN, een datum die na een andere moet liggen, een bedrijfsregel die alleen uw onderneming heeft.
De code ontvangt value — de huidige waarde van het veld — en geeft terug:
true(of niets) als de waarde geldig is;- een string met de foutmelding die getoond moet worden, als dat niet zo is.
const s = String(value ?? "").replace(/\D/g, "");
if (s.length !== 9) return "Het btw-nummer moet 9 cijfers hebben";
return true;
Binnen deze code hebt u ook keplin tot uw beschikking — u kunt vergelijken met
een ander veld, met een waarde uit de sessie of met gegevens die al op het
scherm geladen zijn. Het is TypeScript, met suggesties tijdens het typen
(Ctrl+Spatie); de editor weigert code op te slaan die niet uitvoerbaar is.

Wanneer de validatie draait
De validatie van een formulier draait bij het opslaan — wanneer de opslaanknop de datastore van het record laat opslaan. De volgorde is altijd dezelfde, per veld:
- Verplicht — is het veld ingevuld?
- De standaardregels — lengte, notatie, minimum, maximum, patroon, gelijkheid.
- De validatie in code — uw eigen regel.
De eerste fout wint: zodra een regel faalt, is het de boodschap van die regel die onder het veld verschijnt en de volgende komen niet meer aan bod. Faalt er een veld, dan wordt er niets opgeslagen — het record blijft zoals het was en de persoon blijft in het formulier, met de fouten in beeld.
Een veld met de hand valideren kan ook, vanuit de code van een gebeurtenis — bijvoorbeeld om een veld te controleren zodra het verandert, in plaats van tot het einde te wachten. Dat is het onderwerp van Gebeurtenissen en de SDK.
De boodschappen
De boodschappen van de standaardregels zijn die van het platform, geschreven in de taal van de app: Verplicht veld., Ongeldig e-mailadres., Minimaal {min} tekens., Maximumwaarde: {max}., De waarden komen niet overeen., Ongeldige notatie. Zij worden niet één voor één bewerkt — moet u de dingen anders zeggen, dan is de plek de validatie in code, waar de boodschap de string is die u teruggeeft.
De taal komt uit de instellingen van de app (Instellingen van de app ▸ Vertalingen): dezelfde app in het Nederlands en in het Engels toont de fouten in de taal van wie hem gebruikt.
Wat validatie NIET is
Atenção
De validatie van een formulier is gemak, geen beveiliging. Zij draait in de browser van wie de app gebruikt en dient om eerlijke fouten te voorkomen. Wie echt een ongeldige waarde wil wegschrijven, gaat niet via het formulier — die gaat via de API. De echte verdediging is die van het model (types, verplichte velden, sleutels, unieke indexen, enums) en die van de rechten over wie wat mag schrijven.
Waarom niet…?
- Waarom zie ik de categorie Validatie niet bij deze widget? Alleen formuliervelden valideren. Een Knop, een Label of een Tabel hebben geen waarde om te valideren.
- Waarom slaat de regel niet aan bij een leeg veld? Dat is met opzet: de standaardregels negeren het lege, dat het terrein van Verplicht is. Zet hem aan.
- Waarom is er toch een ongeldig record opgeslagen? Ofwel was het veld niet aan de datastore gekoppeld (zonder koppeling doet het niet mee aan de validatie), ofwel is de waarde langs een andere weg geschreven — een API, een script, een import. Kijk naar wat het model garandeert, bovenaan deze pagina.
- Waarom past het Patroon (regex) niet? Het is een reguliere expressie in de
gebruikelijke syntaxis, en elk teken telt:
^[A-Z]{2}\d{4}$aanvaardtPT1234en weigertpt1234. Test de expressie voordat u haar plakt. - Waarom is mijn validatie in code niet opgeslagen? De editor weigert code die niet uitvoerbaar is — herstel de aangegeven fout en sla opnieuw op.
- Waarom verschijnt de boodschap in het Engels? De taal van de app staat op Engels. Wijzig die bij Instellingen van de app ▸ Vertalingen.