Condizioni di notifica
Questo evento viene notificato dal pannello prima di eseguire una operazione di recupero dati. Questo può avvenire nelle seguenti condizioni:
- L'utente usa il bottone Find Data (F3) della toolbar del pannello.
- Il programma invia il comando FindData al pannello.
- Cambiano i valori del database IMDB da cui dipende la master query del pannello. Ad esempio, in una struttura Master Detail viene selezionato un diverso record master e il pannello Detail si deve aggiornare.
- Se il pannello ha come stato iniziale DATA oppure SET VALUES AND FIND, all'apertura della videata viene eseguita la query e notificato l'evento.
- L'utente usa il comando Insert (+, F7), mentre il pannello è in stato QBE (inserimento criteri di ricerca).
- Il programma esegue il comando InsertRow ed il pannello si trova in stato QBE (inserimento criteri di ricerca).
- Il programma attacca al pannello un nuovo documento (utilizzando la proprietà Document).
- Il programma attacca al pannello un nuova collection (utilizzando la proprietà Collection).
- In una struttura master detail document oriented, il pannello detail deve mostrare una diversa collection perchè è cambiato il documento master a cui esso è collegato.
Utilizzo consigliato
L'evento BeforeFind può essere usato per:
- Impostare le prorietà QBEFilter dei campi del pannello, modificando così i criteri di filtro dei dati.
- Verificare che ci siano le condizioni per eseguire la query di recupero dati ed eventualmente cancellare l'operazione impostando il parametro Cancel a True.
- Eseguire in autonomia il recupero dei dati, impostando il parametro Cancel a True e poi comunicando al pannello i dati tramite la proprietà Recordset o Collection.
- Recuperare i criteri di ricerca impostati dall'utente leggendo le proprietà QBEFilter dei campi del pannello.
Argomenti
Cancel | Se impostato a TRUE, impedisce che venga eseguita la query di recupero dati. In questo caso il pannello rimane nello stato precedente a meno che non vengano eseguite ulteriori operazioni (ad es. impostazione del Recordset o della proprietà Collection). |
Esempio di codice
// ****************************************************************************
// Fired before a SELECT operation. You can change panel QBE Filters to change
// the SELECT result set.
// ****************************************************************************
event DettagliOrdini.DettagliOrdini.BeforeFind(
inout boolean Cancel // When set to TRUE, abort selection
)
{
// Se non è stato inserito un criterio sull'ordine o sul prodotto...
if DettagliOrdini.Idordine.QBEFilter = Empty String AND DettagliOrd-
ini.IdProdotto.QBEFilter = Empty String
{
// Non consento la ricerca
Cancel := True
EsempiAM.MessageBox(Indicare Ordine o Prodotto)
}
}
// Fired before a SELECT operation. You can change panel QBE Filters to change
// the SELECT result set.
// ****************************************************************************
event DettagliOrdini.DettagliOrdini.BeforeFind(
inout boolean Cancel // When set to TRUE, abort selection
)
{
// Se non è stato inserito un criterio sull'ordine o sul prodotto...
if DettagliOrdini.Idordine.QBEFilter = Empty String AND DettagliOrd-
ini.IdProdotto.QBEFilter = Empty String
{
// Non consento la ricerca
Cancel := True
EsempiAM.MessageBox(Indicare Ordine o Prodotto)
}
}
- Se all'interno di questo evento vengono create le condizioni per la notifica di questo evento, è possibile che il pannello entri in uno stato di loop infinito (ad esempio impostando la proprietà Collection che, a sua volta, chiama l'evento di BeforeFind). In questo caso è necessario utilizzare delle variabili di semaforo per evitare il ciclo infinito.
- Durante questo evento non è consigliabile utilizzare i valori della tabella IMDB sottesa per conoscere il valore dei campi del pannello, ma la proprietà QBEFilter.
Ultima modifica: 23/03/2021 / Validità: da 6.5.2680