Condizioni di notifica
Questo evento viene notificato al documento più volte durante la fase di salvataggio sul database. Il parametro FASE indica a quale stato è arrivata la procedura di salvataggio e può valere da 0 a 3, come indicato nel seguente elenco:
- Fase = 0 - PRE SAVE: in questa fase tutti i documenti in fase di salvataggio vengono notificati che la procedura di salvataggio è iniziata. E' possibile usare questa fase per sistemare lo stato reciproco dei sotto-documenti.
- Fase = 1 - INSERTING: in questa fase vengono inseriti i documenti in stato Inserted. L'evento viene notificato a tutti i documenti in fase di salvataggio sia che siano in stato Inserted o meno, subito prima dell'esecuzione dell'operazione sul DB.
- Fase = 2 - UPDATING: in questa fase vengono aggiornati i documenti in stato Updated. L'evento viene notificato a tutti i documenti in fase di salvataggio sia che siano in stato Updated o meno, subito prima dell'esecuzione dell'operazione sul DB.
- Fase = 3 - DELETING: in questa fase vengono cancellati i documenti in stato Deleted. L'evento viene notificato a tutti i documenti in fase di salvataggio sia che siano in stato Deleted o meno, subito prima dell'esecuzione dell'operazione sul DB. La notifica per questa fase avviene in ordine inverso, ossia prima i documenti figli e poi i padri.
Utilizzo consigliato
L'evento di Before Save è utile per rendere coerenti i documenti ed i sotto-documenti prima del salvataggio sul database, oppure per gestire in autonomia il salvataggio nel caso in cui, ad esempio, il documento non sia memorizzato sul DB ma salvato tramite un web service o in un semplice file XML.
Non deve essere utilizzato invece per effettuare validazioni o segnalare errori: per questo occorre utilizzare l'evento OnValidate.
Argomenti
Skip | Parametro di output booleano. Se impostato a True segnala al framework di non effettuare le operazioni sul database perchè saranno gestite in autonomia. |
Cancel | Parametro di output booleano. Se impostato a True segnala al framework di annullare la procedura di salvataggio a causa di errori occorsi. Siccome tutto il documento viene salvato nella stessa transazione, l'intero salvataggio verrà annullato. |
Phase | E' un numero intero da 0 a 3 che indica lo stato di avanzamento del salvataggio come indicato all'inizio dell'articolo. |
Esempio di codice
// *****************************************
// Fired before this document is saved to DB
// *****************************************
event Ordine.BeforeSave(
inout boolean Skip // Set to TRUE to skip normal processing
inout boolean Cancel // Set to TRUE to cancel document saving
int Phase // Identifies the saving phase: 1= inserting; 2 = updating; 3= deleting
)
{
// Dopo tutta la fase di PRE-SAVE è un buon momento per aggiornare il totale
if Phase = ONE
{
this.AggiornaTotale()
}
}
// Fired before this document is saved to DB
// *****************************************
event Ordine.BeforeSave(
inout boolean Skip // Set to TRUE to skip normal processing
inout boolean Cancel // Set to TRUE to cancel document saving
int Phase // Identifies the saving phase: 1= inserting; 2 = updating; 3= deleting
)
{
// Dopo tutta la fase di PRE-SAVE è un buon momento per aggiornare il totale
if Phase = ONE
{
this.AggiornaTotale()
}
}
- Durante la notifica di questo evento il documento è ancora in stato modificato. E' quindi possibile sapere quali modifiche sono state fatte e qual è il valore originale delle proprietà.
- Questo evento viene notificato in ogni fase a tutti i documenti in fase di salvataggio. Ad esempio il BeforeSave Fase 1 viene notificato sia ai documenti in stato Inserted che agli altri. Dopo aver notificato l'evento, l'operazione di inserimento sul database viene effettuata solo per quelli in stato Inserted.
- Si consiglia di aprire il sistema di debug per rendersi conto dell'effettivo ciclo di notifica degli eventi BeforeSave e AfterSave, anche in congiunzione con i corrispettivi eventi BeforeCommit ed AfterCommit del pannello DO.
Ultima modifica: 22/09/2021 / Validità: da 6.5.2680