Evento di validazione dati
copia linkTrascrizione
La correttezza delle informazioni inserite dall’utente è una prerogativa per avere dati congrui nella base dati; il framework documentale consente la verifica e la segnalazione di errori tramite messaggi informativi in 2 casi specifici:
Entrambi questi casi sono gestiti tramite l’evento denominato OnValidate(); nei parametri dell’evento è presente un valore intero che ne chiarisce la motivazione della validazione (la Reason): stiamo validando durante l’inserimento o prima del salvataggio? Reason = 1 è la validazione durante l’inserimento, e Reason = 0 è la validazione un attimo prima di salvare.
Normalmente, la sottoscrizione all’evento OnValidate è presente in tutti i documenti anche solo per controllare la presenza dei valori obbligatori e fornire un messaggio di errore personalizzato.
Possiamo iniziare ad implementare la validazione con Reason = 0 sul documento Prezzo, Albero di progetto, documento Prezzo -> tasto destro Eventi -> Aggiungi Evento OnValidate; il controllo : Qui vorremmo controllare in fase di salvataggio che sia stato specificato un idAppartamento, quindi:
If (Reason = 0) {
If (length(idAppartamento) = 0) {
setPropertyError(‘Indicare un appartamento’, idAppartamento)
}
}
Per segnalare al framework un errore, non usiamo nessun metodo di interfaccia, come ad esempio il metodo msgbox che mostrare una finestra messaggio, ma attacchiamo l’errore alla proprietà specificandone appunto il messaggio e la proprietà di riferimento: nel caso il documento sia presente in un pannello, la proprietà in errore verrà sottolineata ed il messaggio comparirà nell’area messaggi.
Ricordatevi: all’interno di metodi ed eventi documentali non utilizzare mai nessun riferimento all’interfaccia (pannelli, videate, metodo msgbox): un documento potrebbe nascere, modificarsi e salvarsi senza l’ausilio di interfaccia ma tutto via codice…quindi, nel caso fossero presenti istruzioni di interfaccia, l’utente vedrebbe comparire elementi ed oggetti senza un nesso logico.
Ricontrolliamo il codice: è corretto quello che abbiamo scritto nell’evento OnValidate? Quasi dico quasi perché vi ricordo che la Reason = 0 scatta un attimo prima di salvare e la validazione scatta per tutti i documenti NotOriginal quindi per i documenti Nuovi (Stato Inserted), Modificati (Stato Modified) e in Cancellazione (Stato Deleted); ed è qua il punto: ha senso controllare la presenza di una proprietà (idAppartamento) un attimo prima della cancellazione? Direi proprio di no!
Modifichiamo il codice allora: If (Reason = 0 and deleted = false) : il codice verrà eseguito solo se il documento è in stato Inserted o Modified.
Da qui si inizia a comprendere l’importanza dello stato visto nei tutorial precedenti: possiamo segnalare messaggi di errore differenti a seconda se stiamo cancellando, inserendo o modificando.
Inseriamo una validazione simile al documento Servizio per il controllo della denominazione:
If (Reason = 0 and not(deleted)) {
If (length(denominazione = 0) {
this.setPropertyError(“Indicare un servizio”, Denominazione)
}
}
Lascio a voi implementare altri eventi di OnValidate nei documenti, ma insieme ne realizziamo ancora uno: sul documento Utente: ricordate? dobbiamo trasformare la Password Input in Password Criptata un attimo prima di salvare; il metodo ce l’abbiamo dobbiamo solo richiamarlo.
If (Reason = 0 and deleted = false and not (Error)) {
If (length(PasswordInput) != 0 ) {
cryptPassword();
//Cancello la Password Input
Password Input = “”
}
}
Ogni volta che, l’utente modificherà la Password Input, prima di salvare la criptiamo e la cancelliamo così sul database non rimarrà nulla di visibile.
Con questo evento di validazione abbiamo iniziato la procedura di salvataggio in quanto questo evento cade nei 4 eventi che formano gli eventi di salvataggio; nel tutorial successivo vediamo il resto quindi vediamo cosa succede effettivamente se la validazione passa (perché vi ricordo se la validazione non passa, quindi c'è’ un errore la fase successiva di salvataggio viene interrotta e non si passa al database).
Vi aspetto nei tutorial seguenti proprio per parlare della fase di salvataggio.
- L’utente effettua l’operazione di inserimento.
- Un attimo prima di effettuare il salvataggio.
Entrambi questi casi sono gestiti tramite l’evento denominato OnValidate(); nei parametri dell’evento è presente un valore intero che ne chiarisce la motivazione della validazione (la Reason): stiamo validando durante l’inserimento o prima del salvataggio? Reason = 1 è la validazione durante l’inserimento, e Reason = 0 è la validazione un attimo prima di salvare.
Normalmente, la sottoscrizione all’evento OnValidate è presente in tutti i documenti anche solo per controllare la presenza dei valori obbligatori e fornire un messaggio di errore personalizzato.
Possiamo iniziare ad implementare la validazione con Reason = 0 sul documento Prezzo, Albero di progetto, documento Prezzo -> tasto destro Eventi -> Aggiungi Evento OnValidate; il controllo : Qui vorremmo controllare in fase di salvataggio che sia stato specificato un idAppartamento, quindi:
If (Reason = 0) {
If (length(idAppartamento) = 0) {
setPropertyError(‘Indicare un appartamento’, idAppartamento)
}
}
Per segnalare al framework un errore, non usiamo nessun metodo di interfaccia, come ad esempio il metodo msgbox che mostrare una finestra messaggio, ma attacchiamo l’errore alla proprietà specificandone appunto il messaggio e la proprietà di riferimento: nel caso il documento sia presente in un pannello, la proprietà in errore verrà sottolineata ed il messaggio comparirà nell’area messaggi.
Ricordatevi: all’interno di metodi ed eventi documentali non utilizzare mai nessun riferimento all’interfaccia (pannelli, videate, metodo msgbox): un documento potrebbe nascere, modificarsi e salvarsi senza l’ausilio di interfaccia ma tutto via codice…quindi, nel caso fossero presenti istruzioni di interfaccia, l’utente vedrebbe comparire elementi ed oggetti senza un nesso logico.
Ricontrolliamo il codice: è corretto quello che abbiamo scritto nell’evento OnValidate? Quasi dico quasi perché vi ricordo che la Reason = 0 scatta un attimo prima di salvare e la validazione scatta per tutti i documenti NotOriginal quindi per i documenti Nuovi (Stato Inserted), Modificati (Stato Modified) e in Cancellazione (Stato Deleted); ed è qua il punto: ha senso controllare la presenza di una proprietà (idAppartamento) un attimo prima della cancellazione? Direi proprio di no!
Modifichiamo il codice allora: If (Reason = 0 and deleted = false) : il codice verrà eseguito solo se il documento è in stato Inserted o Modified.
Da qui si inizia a comprendere l’importanza dello stato visto nei tutorial precedenti: possiamo segnalare messaggi di errore differenti a seconda se stiamo cancellando, inserendo o modificando.
Inseriamo una validazione simile al documento Servizio per il controllo della denominazione:
If (Reason = 0 and not(deleted)) {
If (length(denominazione = 0) {
this.setPropertyError(“Indicare un servizio”, Denominazione)
}
}
Lascio a voi implementare altri eventi di OnValidate nei documenti, ma insieme ne realizziamo ancora uno: sul documento Utente: ricordate? dobbiamo trasformare la Password Input in Password Criptata un attimo prima di salvare; il metodo ce l’abbiamo dobbiamo solo richiamarlo.
If (Reason = 0 and deleted = false and not (Error)) {
If (length(PasswordInput) != 0 ) {
cryptPassword();
//Cancello la Password Input
Password Input = “”
}
}
Ogni volta che, l’utente modificherà la Password Input, prima di salvare la criptiamo e la cancelliamo così sul database non rimarrà nulla di visibile.
Con questo evento di validazione abbiamo iniziato la procedura di salvataggio in quanto questo evento cade nei 4 eventi che formano gli eventi di salvataggio; nel tutorial successivo vediamo il resto quindi vediamo cosa succede effettivamente se la validazione passa (perché vi ricordo se la validazione non passa, quindi c'è’ un errore la fase successiva di salvataggio viene interrotta e non si passa al database).
Vi aspetto nei tutorial seguenti proprio per parlare della fase di salvataggio.
Ultima modifica: 19/03/2021 / Validità: da 20.5.8000