Decodifica con campi opzionali
copia link
Normalmente quando si usano delle lookup il campo del codice è obbligatorio, perciò il framework controlla automaticamente la presenza della decodifica e se non presente viene mostrato un errore.
Se il campo è opzionale il framework non dà in automatico errori se la decodifica è mancante, ma questo può portare ad errori: ad esempio un codice può essere valido per il database ma non valido applicativamente (si pensi ad una profilazione per aziende, il codice potrebbe essere sul database ma appartenere ad un altra azienda: per il database è valido, ma non lo è per l'applicazione) e dato che il campo è opzionale il salvataggio andrebbe a buon fine (perchè non è obbligatoria la decodifica).
Questo problema può essere risolto utilizzando il metodo SetOptional del campo di pannello. Infatti se si imposta il campo di pannello come non opzionale il comportamento che si ottiene è il seguente: il campo è nullabile, perciò è valido anche se non ha nessun valore, ma nel momento che viene inserito il valore allora viene fatto il controllo dell'esistenza della decodifica.
In questo modo perciò è possibile avere un campo opzionale ma che contemporaneamente faccia il controllo della validità della decodifica nel caso venga valorizzato e se la decodifica non esiste blocchi il salvataggio mostrando un errore.
Il codice da inserire nell'evento di Load della videata è il seguente:
// *********************************************************************
// Evento notificato alla videata al momento del caricamento in memoria.
// *********************************************************************
event Videata.Load()
{
// Rendo obbligatorio il campo di pannello, ma non la colonna del database..
Pannello.Campo.SetOptional(False)
}
Se il campo è opzionale il framework non dà in automatico errori se la decodifica è mancante, ma questo può portare ad errori: ad esempio un codice può essere valido per il database ma non valido applicativamente (si pensi ad una profilazione per aziende, il codice potrebbe essere sul database ma appartenere ad un altra azienda: per il database è valido, ma non lo è per l'applicazione) e dato che il campo è opzionale il salvataggio andrebbe a buon fine (perchè non è obbligatoria la decodifica).
Questo problema può essere risolto utilizzando il metodo SetOptional del campo di pannello. Infatti se si imposta il campo di pannello come non opzionale il comportamento che si ottiene è il seguente: il campo è nullabile, perciò è valido anche se non ha nessun valore, ma nel momento che viene inserito il valore allora viene fatto il controllo dell'esistenza della decodifica.
In questo modo perciò è possibile avere un campo opzionale ma che contemporaneamente faccia il controllo della validità della decodifica nel caso venga valorizzato e se la decodifica non esiste blocchi il salvataggio mostrando un errore.
Il codice da inserire nell'evento di Load della videata è il seguente:
// *********************************************************************
// Evento notificato alla videata al momento del caricamento in memoria.
// *********************************************************************
event Videata.Load()
{
// Rendo obbligatorio il campo di pannello, ma non la colonna del database..
Pannello.Campo.SetOptional(False)
}
Attenzione, questo articolo è stato dichiarato obsoleto! Ultima modifica: 22/11/2013 / Validità: da 8.5.3800