Condizioni di notifica
Questo evento viene notificato al documento quando lui stesso o uno dei suoi documenti cambia, ed in particolare:
- Quando il documento o uno dei suoi sottodocumenti conclude una transazione documentale (vedi EndTransaction) e almeno una proprietà era stata modificata.
- Quando il documento o uno dei suoi sottodocumenti cambia stato in relazione alle proprietà Updated, Deleted, Inserted.
- In tutti i casi in cui viene effettuato un caricamento successivo del documento o delle sue collection lungo tutta la gerarchia dello stesso.
- Quando il documento viene aggiunto ad una collection.
- Quando viene rimosso un sotto-documento da un collection del documento.
Utilizzo consigliato
L'evento OnChange può essere utilizzato per aggiornare il documento in conseguenza a variazioni dei suoi sotto-documenti. Ad esempio se si desidera memorizzare il totale di un ordine in una proprietà pubblica dello stesso, è possibile tenere aggiornato il valore in funzione delle variazioni avvenute nelle righe tramite questo evento.
Argomenti
Questo evento non ha argomenti.Esempio di codice
// ******************************************************************************************************************
// Evento notificato al documento se marcato come modificato. Un documento viene marcato se esso o uno dei suoi sotto
// documenti subisce una transazione, un cambiamento di stato o un caricamento successivo
// ******************************************************************************************************************
event Ordine.OnChange()
{
currency s := 0 // Quali dati memorizzerai qui?
//
// Aggiorno il totale
for each row (RigheOrdine)
{
record RigaOrdine
RigaOrdine RigaOrdine //
//
s := s + RigaOrdine.Quantità * RigaOrdine.PrezzoUnitario
}
Totale := s
}
// Evento notificato al documento se marcato come modificato. Un documento viene marcato se esso o uno dei suoi sotto
// documenti subisce una transazione, un cambiamento di stato o un caricamento successivo
// ******************************************************************************************************************
event Ordine.OnChange()
{
currency s := 0 // Quali dati memorizzerai qui?
//
// Aggiorno il totale
for each row (RigheOrdine)
{
record RigaOrdine
RigaOrdine RigaOrdine //
//
s := s + RigaOrdine.Quantità * RigaOrdine.PrezzoUnitario
}
Totale := s
}
- Nelle applicazioni web e nei servizi batch, l'evento viene notificato in maniera "ritardata", cioè dopo che tutte le modifiche sono avvenute. In questo modo si evitano problemi di prestazioni legati al fatto che l'evento possa essere notificato moltissime volte, in funzione delle variazioni dei sotto-documenti.
- Nei web service invece l'evento viene notificato subito dopo che la variazione è avvenuta, quindi può essere notificato molte più volte che negli altri tipi di applicazione.
- Se il documento è marcato come modificato, l'evento viene comunque notificato prima della validazione dello stesso. In questo modo se il documento viene salvato sul database, si è sicuri che l'eventuale notifica dell'evento di OnChange avvenga prima del salvataggio e anche prima dell'evento di OnValidate.
Ultima modifica: 25/10/2016 / Validità: da 8.5.3800