Condizioni di notifica
Se in un pannello è contenuta una query di lookup in cui è stata attivata la funzione di Smart Lookup, allora l'evento di OnGetSmartLookup viene notificato al pannello durante la gestione della procedura di smart lookup, cioè quando l'utente scrive qualcosa nei campi di lookup e preme il tasto INVIO.
Utilizzo consigliato
Questo evento può essere utilizzato per modificare il comportamento standard della procedura di Smart Lookup, descritta nel seguito.
Argomenti
Recordset | E' il recordset che occorre riempire se si personalizzano le query eseguite durante l'evento di Smart Lookup. |
Level | La procedura di Smart Lookup esegue più tentativi, allargando sempre più il campo di ricerca. Questo parametro intero indica il tentativo a cui si è arrivati. |
Null Value | Parametro di output booleano. Se lo si imposta a True, allora verrà ritornato il valore NULL (nessun risultato trovato) al pannello. |
Skip | Parametro di output booleano. Se lo si imposta a True allora non verranno eseguite le query standard per il livello attuale. |
Cancel | Parametro di output booleano. Se lo si imposta a True, allora la procedura di Smart Lookup verrà interrotta. |
Field Index | E' un numero intero che rappresenta il campo del pannello per cui viene eseguita questa query. Deve essere confrontato con la proprietà Me del campo di pannello. |
Esempio di codice
// ****************************************************************************
// Evento chiamato per personalizzare la procedura di Smart Lookup a livello di
// pannello
// ****************************************************************************
event Prodotti.Prodotti.OnGetSmartLookup(
Recordset Recordset // E' il recordset che occorre riempire se si pe...
int Level // La procedura di Smart Lookup esegue più tentativi, allargan...
inout boolean NullValue // Parametro di output booleano. Se lo si impost...
inout boolean Skip // Parametro di output booleano. Se lo si impost...
inout boolean Cancel // Parametro di output booleano. Se lo si impost...
int FieldIndex // E' un numero intero che rappresenta il campo ...
)
{
// Testiamo se l'indice del campo è corretto
if (FieldIndex == Prodotti.NomeCategoria.me())
{
// Saltiamo il primo passaggio
if (Level == 0)
{
Skip = true
return
}
//
Gestione Recordset
{
Recordset rec = new() //
//
select into recordset (rec)
Idcategoria as IDCATECATEGO
NomeCategoria as NOMECATECATE
from
Categorie // master table
//
Recordset.copyFrom(rec)
}
}
}
// Evento chiamato per personalizzare la procedura di Smart Lookup a livello di
// pannello
// ****************************************************************************
event Prodotti.Prodotti.OnGetSmartLookup(
Recordset Recordset // E' il recordset che occorre riempire se si pe...
int Level // La procedura di Smart Lookup esegue più tentativi, allargan...
inout boolean NullValue // Parametro di output booleano. Se lo si impost...
inout boolean Skip // Parametro di output booleano. Se lo si impost...
inout boolean Cancel // Parametro di output booleano. Se lo si impost...
int FieldIndex // E' un numero intero che rappresenta il campo ...
)
{
// Testiamo se l'indice del campo è corretto
if (FieldIndex == Prodotti.NomeCategoria.me())
{
// Saltiamo il primo passaggio
if (Level == 0)
{
Skip = true
return
}
//
Gestione Recordset
{
Recordset rec = new() //
//
select into recordset (rec)
Idcategoria as IDCATECATEGO
NomeCategoria as NOMECATECATE
from
Categorie // master table
//
Recordset.copyFrom(rec)
}
}
}
- L'elenco dei livelli di ricerca è il seguente:
Livello 0: vengono cercati i dati che corrispondono esattamente a quello che l'utente ha inserito, usando clausole AND se l'utente ha inserito dati in più campi.
Livello 1: vengono cercati i dati che cominciano per quello che l'utente ha inserito, usando clausole AND se l'utente ha inserito dati in più campi..
Livello 2: vengono cercati i dati che contengono quello che l'utente ha inserito, usando clausole AND se l'utente ha inserito dati in più campi.
Livello 3: vengono cercati i dati che contengono quello che l'utente ha inserito, usando clausole OR se l'utente ha inserito dati in più campi.
Livello 4: vengono cercati i dati che contengono quello che l'utente ha inserito, cercando in tutti i campi della query di lookup e usando clausole OR se l'utente hai inserito dati in più campi. - Impostando il parametro Skip a True verranno effettuati sempre nuovi tentativi, finchè non verrà impostato a True anche il parametro Cancel, oppure Null Value.
- E' necessario usare la funzione CopyFrom dell'oggetto Recordset per copiare i dati nel recordset passato come parametro.
- Per ottenere il corretto caricamento delle proprietà è necessario che i nomi fisici (DB Code) delle colonne del recordset siano corrispondenti ai nomi fisici (DB Code) delle colonne della query smartlookup definita a design-time.
- Il recordset può essere aperto, ad esempio, con una istruzione di tipo Select Into Recordset oppure con la funzione SQLQuery dell'oggetto database.
- FieldIndex va confrontato sempre con il primo campo della query di lookup, anche se una query ha associati più campi.
Ultima modifica: 02/11/2016 / Validità: da 9.5.4160