Validazione
Le due linee di difesa dei dati — ciò che il modello garantisce e le regole che i moduli delle schermate verificano prima di salvare.
I dati sbagliati entrano per distrazione, non per cattiveria: una partita IVA con otto cifre, un'email senza chiocciola, uno sconto del 300 %, un record salvato senza il campo di cui il resto del processo ha bisogno. Validare significa chiudere quelle porte — e in Keplin si chiudono su due livelli, che conviene non confondere.
| Livello | Dove si definisce | Quando agisce | Che cosa intercetta |
|---|---|---|---|
| Il modello | Nell'editor della tabella (vedi Tabelle e campi) | In qualsiasi scrittura, da dovunque arrivi | Ciò che non può mai accadere ai dati. |
| Le regole dei campi | Nell'inspector di ogni campo di modulo, categoria Validazione | Quando l'utente salva un modulo | Ciò che la persona sta scrivendo, con il messaggio giusto accanto al campo. |
La regola pratica: ciò che è vero riguardo ai dati vive nel modello; ciò che è aiuto all'utente vive nel modulo. Un campo obbligatorio è entrambe le cose — si disattiva Consente NULL nel modello e si attiva Obbligatorio nel campo della schermata.
Che cosa garantisce il modello
Queste non sono "regole di validazione" con quel nome, ma sono l'unica difesa che non si aggira: valgono per le schermate, per le API, per gli script e per chi scrive direttamente nel database.
| Elemento | Che cosa impedisce |
|---|---|
| Consente NULL disattivato | Un record senza valore in quella colonna. |
| Tipo della colonna | Testo in un campo data, lettere in un numero. |
| Lunghezza / Precisione · Scala | Testo più lungo della colonna, o denaro con troppi decimali. |
| Chiave primaria (PK) | Record duplicati e record che non si riescono a identificare. |
| Indice unique | Due clienti con la stessa partita IVA, due utenti con la stessa email. |
| Colonna di tipo enum | Uno stato che non esiste nell'elenco. |
| Relazione fisica + Quando si elimina il padre | Figli orfani, o eliminazioni che si portano via ciò che non dovrebbero. |

Dica
Prima di scrivere una regola in un modulo, chiediti: questo può essere vero in qualche record, qualche volta? Se la risposta è no, il posto è il modello — perché il modulo è solo una delle porte da cui i dati entrano.
Le regole dei campi di modulo
Tutti i campi di modulo — Casella di testo, Area di testo, Numero, Sì/No, Dropdown, Data, Colore, File — hanno nell'inspector la categoria Validazione. È lì che si dichiara che cosa quel campo accetta.
Per arrivarci:
- Apri la schermata nel designer.
- Seleziona il campo — nel canvas, o dalla scheda Struttura dell' inspector.
- Nella scheda Proprietà, apri la categoria Validazione.

Obbligatorio
L'interruttore Obbligatorio è la prima e la più usata delle regole: il campo deve arrivare compilato. È anche l'unica che parla del vuoto — tutte le altre lasciano passare un campo vuoto, perché il vuoto è affare dell'Obbligatorio.

Le regole standard
A seconda del tipo di campo, la categoria mostra le regole che hanno senso:
| Regola | Dove appare | Che cosa verifica |
|---|---|---|
| Maschera | Casella di testo | Il formato mentre si scrive: # cifra, A lettera, N alfanumerico, * qualsiasi — il resto è testo fisso. Es.: +39 ### ### ###. |
| Min caratteri | Casella di testo, Area di testo | Lunghezza minima del testo. |
| Max caratteri | Casella di testo, Area di testo | Lunghezza massima del testo. |
| Pattern (regex) | Casella di testo, Area di testo | Un'espressione regolare che il valore deve rispettare. Es.: ^[A-Z]{2}\d{4}$. |
| Formato | Casella di testo | Nessuno, È email, È telefono o È numero. Sono esclusivi: un valore non può essere email e telefono allo stesso tempo. |
| Valore min. | Numero | Il valore più basso accettato. |
| Valore max. | Numero | Il valore più alto accettato. |
| Uguale al campo | Tutti i campi | Il valore deve essere uguale a quello di un altro campo della schermata — la conferma della password, l'email ripetuta. |
Nota
La Maschera è un aiuto alla scrittura, non è validazione: guida ciò che la persona scrive, ma chi garantisce il formato è il Pattern (regex) o il Formato. Un telefono con maschera può restare a metà.
Validazione tramite codice
Sotto le regole standard c'è la riga Convalida, che dice Nessuna convalida — definisci oppure Definita — modifica. Il pulsante … apre un editor di codice per le regole che i campi non coprono: una partita IVA con cifra di controllo, un IBAN, una data che deve essere successiva a un'altra, una regola di business che ha solo la tua azienda.
Il codice riceve value — il valore attuale del campo — e restituisce:
true(o niente) se il valore è valido;- una string con il messaggio di errore da mostrare, se non lo è.
const s = String(value ?? "").replace(/\D/g, "");
if (s.length !== 9) return "La partita IVA deve avere 9 cifre";
return true;
Dentro questo codice hai a disposizione anche keplin — puoi confrontare con
un altro campo, con un valore della sessione o con dati già caricati nella schermata. È
TypeScript, con suggerimenti mentre scrivi (Ctrl+Spazio); l'editor rifiuta
di salvare codice che non sia eseguibile.

Quando gira la validazione
La validazione di un modulo gira al salvataggio — quando il pulsante di salvataggio manda a salvare il datastore del record. L'ordine è sempre lo stesso, per campo:
- Obbligatorio — il campo è compilato?
- Le regole standard — lunghezza, formato, minimo, massimo, pattern, uguaglianza.
- La validazione tramite codice — la tua regola.
Il primo errore vince: appena una regola fallisce, è il messaggio di quella regola ad apparire sotto il campo e le successive non arrivano nemmeno a girare. Se un campo fallisce, non viene salvato nulla — il record resta com'era e la persona rimane nel modulo, con gli errori in vista.
Si può anche validare un campo a mano, dal codice di un evento — per esempio, per verificare un campo appena cambia invece di aspettare la fine. Questo è argomento di Eventi e SDK.
I messaggi
I messaggi delle regole standard sono quelli della piattaforma, scritti nella lingua dell'app: Campo obbligatorio., Email non valida., Minimo {min} caratteri., Valore massimo: {max}., I valori non coincidono., Formato non valido. Non si modificano uno a uno — se hai bisogno di dire le cose in un altro modo, il posto è la validazione tramite codice, dove il messaggio è la string che restituisci.
La lingua esce dalle impostazioni dell'app (Impostazioni dell'app ▸ Traduzioni): la stessa app in portoghese e in inglese mostra gli errori nella lingua di chi la sta usando.
Che cosa NON è la validazione
Atenção
La validazione di un modulo è comodità, non sicurezza. Gira nel browser di chi sta usando l'app e serve a evitare errori onesti. Chi vuole davvero scrivere un valore non valido non passa dal modulo — passa dall'API. La difesa vera è quella del modello (tipi, obbligatorietà, chiavi, indici univoci, enum) e quella dei permessi su chi può scrivere che cosa.
Perché no…?
- Perché non vedo la categoria Validazione in questo widget? Solo i campi di modulo validano. Un Pulsante, un'Etichetta o una Tabella non hanno un valore da validare.
- Perché la regola non scatta con il campo vuoto? È voluto: le regole standard ignorano il vuoto, che è il territorio dell'Obbligatorio. Attivalo.
- Perché ha salvato lo stesso un record non valido? O il campo non era collegato al datastore (senza collegamento, non entra nella validazione), oppure il valore è stato scritto per un'altra via — un'API, uno script, un'importazione. Guarda che cosa il modello garantisce, più in alto in questa pagina.
- Perché il Pattern (regex) non corrisponde? È un'espressione regolare nella
sintassi consueta, e ogni carattere conta:
^[A-Z]{2}\d{4}$accettaPT1234e rifiutapt1234. Prova l'espressione prima di incollarla. - Perché non ha salvato la mia validazione tramite codice? L'editor rifiuta codice che non sia eseguibile — correggi l'errore segnalato e salva di nuovo.
- Perché il messaggio appare in inglese? La lingua dell'app è in inglese. Cambiala in Impostazioni dell'app ▸ Traduzioni.