Condizioni di notifica
Questo evento viene notificato a tutti i documenti coinvolti nella procedura di salvataggio al termine della stessa. Durante la gestione di questo evento, il documento è ancora in stato modificato e la transazione di database usata per salvare i dati è ancora aperta. Si consiglia di leggere l'articolo relativo all'evento di BeforeSave per maggiori dettagli sulla procedura di salvataggio dei documenti.
Utilizzo consigliato
Lo scopo primario di questo evento è quello di consentire il salvataggio di altri documenti che devono essere modificati in base alle modifiche subite dal documento in fase di salvataggio. Nei paragrafi seguenti, come esempio di questo faremo in modo che se varia il prezzo unitario di un prodotto, allora verranno aggiornate le righe d'ordine relative a ordini non ancora consegnati.
Argomenti
Cancel | Parametro booleano di output che permette di cancellare l'intero salvataggio. E' equivalente al parametro Cancel dell'evento di BeforeSave. |
Esempio di codice
// Fired after this document is saved to DB
// ****************************************
event Prodotto.AfterSave()
{
// Se ho cambiato il prezzo, allora aggiorno le righe ordine relative al prodotto
if PrezzoUnitario <> GetOriginalValue(ToPropertyIndex(PrezzoUnitario)) AND NOT(Deleted)
{
IDCollection roc = new() // Righe ordine da aggiornare
Recordset rs = new() // This variable contains the recordset returned by the linked ...
RigaOrdine ro = new() // L'oggetto riga per caricare la collection
//
// Seleziono le righe di ordini non ancora evasi per questo prodotto
select into recordset (rs)
DettagliOrdini.IdOrdine as IdOrdine(IDORDINE)
DettagliOrdini.IdProdotto as IdProdotto(IDPRODOTTO)
DettagliOrdini.PrezzoUnitario as PrezzoUnitario(PREZZOUNITAR)
DettagliOrdini.Quantita as Quantita(QUANTITA)
DettagliOrdini.Sconto as Sconto(SCONTO)
from
DettagliOrdini // Master Table
Ordini // Joined with Dettagli Ordini using FK OrdineDettagli_ordini
where
DettagliOrdini.IdProdotto = Id
IsNull(Ordini.DataSpedizione)
//
// Ecco la collection di righe, ora la aggiorno
ro.LoadCollectionFromRecordset(
Collection := roc
Recordset := rs
ChildrenLevel := ZERO
)
//
// Ciclo sulle righe e aggiorno il prezzo. Tutti i calcoli seguenti verranno fatti dalla
// classe Riga Ordine
for each row (roc)
{
record rig
RigaOrdine rig // Righe ordine da aggiornare
//
rig.PrezzoUnitario := PrezzoUnitario
}
//
// Salvo tutte le righe modificate usando la SaveToDB della collection
roc.SaveToDB(
ChildrenLevel := ??
Revalidate := ??
)
}
}
- All'interno di questo evento il documento è ancora in stato modificato. Possiamo sapere quindi quali modifiche ha subito.
- Dalla versione 7.1 è presente il parametro Cancel che, se impostato a True, consente di annullare l'intera procedura di salvataggio, effettuando anche il rollback dell'intera transazione se era stata aperta dalla procedura SaveToDB.
- Il parametro Cancel è stato inserito in versione 7.1.3300.
Ultima modifica: 22/09/2021 / Validità: da 6.5.2680