Condizioni di notifica
Durante il ciclo di salvataggio dei dati, per ogni nuova riga inserita dall'utente viene notificato l'evento di BeforeInsert prima che i dati vengano inseriti nel database. Dopo l'inserimento viene notificato l'evento di AfterInsert.
Utilizzo consigliato
L'evento di BeforeInsert può essere utilizzato per:
- Modificare i dati che verranno inseriti nel database, impostando i valori nella tabella IMDB sottesa al pannello.
- Utilizzare una propria procedura di salvataggio al posto di quella standard impostando il parametro Cancel a True.
- Saltare l'inserimento di una determinata riga impostando il parametro Cancel a True.
- Preparare l'inserimento della riga eseguendo delle operazioni preliminari. E' possibile leggere la tabella IMDB sottesa al pannello per sapere quali sono i dati in fase di aggiornamento.
Argomenti
Cancel | Se impostato a True non effettua l'inserimento dei dati di questa riga. La fase di salvataggio delle altre righe prosegue normalmente. |
Esempio di codice
// *************************************************
// Fired before an INSERT operation is performed.
// You can change the IMDB panel fields to modify
// the values that will be inserted in the database.
// *************************************************
event DettagliOrdini.DettagliOrdini.BeforeInsert(
inout boolean Cancel // When set to TRUE, abort operation
)
{
// Se il prezzo unitario è zero...
if NullValue(DettagliOrdini.PrezzoUnitarioDettagliOrdini, ZERO) = ZERO
{
currency PrezzoUnitarioProdotto = 0 //
//
// Lo leggo dal database dei prodotti...
select into variables
set PrezzoUnitarioProdotto := PrezzoUnitario
from
Prodotti // Master Table
where
Id = DettagliOrdini.IdProdottoProdotto
//
// E poi lo uso come dato da salvare.
DettagliOrdini.PrezzoUnitarioDettagliOrdini := PrezzoUnitarioProdotto
}
}
// Fired before an INSERT operation is performed.
// You can change the IMDB panel fields to modify
// the values that will be inserted in the database.
// *************************************************
event DettagliOrdini.DettagliOrdini.BeforeInsert(
inout boolean Cancel // When set to TRUE, abort operation
)
{
// Se il prezzo unitario è zero...
if NullValue(DettagliOrdini.PrezzoUnitarioDettagliOrdini, ZERO) = ZERO
{
currency PrezzoUnitarioProdotto = 0 //
//
// Lo leggo dal database dei prodotti...
select into variables
set PrezzoUnitarioProdotto := PrezzoUnitario
from
Prodotti // Master Table
where
Id = DettagliOrdini.IdProdottoProdotto
//
// E poi lo uso come dato da salvare.
DettagliOrdini.PrezzoUnitarioDettagliOrdini := PrezzoUnitarioProdotto
}
}
- Normalmente questo evento non deve essere utilizzato per effettuare le validazioni: è meglio usare gli eventi OnUpdatingRow e BeforeCommit per questo.
- Nei pannelli basati su documenti, la gestione del ciclo di salvataggio deve essere eseguita tramite gli eventi del documento e non del pannello.
- Attenzione: Non utilizzare all'interno di questo evento funzioni che modificano il set di dati come RefreshQuery o UpdateData perchè possono creare malfunzionamenti o cicli infiniti. >
- Questo evento scatta anche se il pannello registra i dati su una tabella in memoria o su un documento.
Ultima modifica: 23/03/2021 / Validità: da 6.5.2680