Condizioni di notifica
Durante il ciclo di salvataggio dei dati, per ogni riga che è stata modificata viene notificato l'evento di BeforeUpdate prima che la modifica venga registrata nel database. Dopo la modifica viene notificato l'evento di AfterUpdate.
Utilizzo consigliato
L'evento di BeforeUpdate può essere utilizzato per:
- Modificare i dati che verranno registrati 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'aggiornamento di una determinata riga impostando il parametro Cancel a True.
- Preparare l'aggiornamento 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'aggiornamento dei dati di questa riga. La fase di salvataggio delle altre righe prosegue normalmente. |
Esempio di codice
// ************************************************
// Fired before an UPDATE operation is performed.
// You can change the IMDB panel fields to modify
// the values that will be updated in the database.
// ************************************************
event DettagliOrdini.DettagliOrdini.BeforeUpdate(
inout boolean Cancel // When set to TRUE, abort operation
)
{
// Se il prezzo unitario è zero...
if DettagliOrdini.PrezzoUnitarioDettagliOrdini = ZERO
{
currency PrezzoUnitarioProdotto = 0 //
//
// Lo leggo dal database dei prodotti...
select into variables
set PrezzoUnitarioProdotto := PrezzoUnitario
from
Prodotti // Master Table
where
Id = DettagliOrdini.IdProdotto
//
// E poi lo uso come dato da salvare.
DettagliOrdini.PrezzoUnitarioDettagliOrdini := PrezzoUnitarioProdotto
}
}
// Fired before an UPDATE operation is performed.
// You can change the IMDB panel fields to modify
// the values that will be updated in the database.
// ************************************************
event DettagliOrdini.DettagliOrdini.BeforeUpdate(
inout boolean Cancel // When set to TRUE, abort operation
)
{
// Se il prezzo unitario è zero...
if DettagliOrdini.PrezzoUnitarioDettagliOrdini = ZERO
{
currency PrezzoUnitarioProdotto = 0 //
//
// Lo leggo dal database dei prodotti...
select into variables
set PrezzoUnitarioProdotto := PrezzoUnitario
from
Prodotti // Master Table
where
Id = DettagliOrdini.IdProdotto
//
// 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: 25/10/2016 / Validità: da 6.5.2680