English
Instant Developer Foundation Documentazione
  • Reference Librerie
  • Document Orientation
  • ID Document
  • Data Base

After Save

evento copia link

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

Vedi Anche

  • Before Save (evento)
  • To Property Index (funzione)

Hai trovato utile l'articolo?

Grazie per il feedback!

Ti serve altro aiuto?

Consulta il Forum