Condizioni di notifica
Questo evento fa parte della procedura di gestione dei lookup basati su documenti, descritta nelle note di questo articolo, e consente di personalizzarne il funzionamento. Tipicamente l'evento viene notificato nelle seguenti condizioni:
- Un pannello richiede al documento l'esecuzione di una decodifica;
- Viene utilizzato il metodo LoadFromCache sul documento da una procedura Visual Code.
Utilizzo consigliato
L'evento di BeforeLookup può essere utilizzato per modificare il modo con cui il documento esegue il lookup. Ad esempio il documento potrebbe dover eseguire il lookup andando a leggere tabelle diverse, usare parametri di sessione, utilizzare web services invece di query...
Argomenti
Skip | Parametro di output booleano. Se impostato a True fa in modo che il framework non esegua il lookup tramite query. |
Cancel | Parametro di output booleano. Se impostato a True termina subito la procedura di decodifica. L'evento di AfterLookup non verrà chiamato. |
Esempio di codice
// *************************************************************
// Fired before a lookup query will be executed on this document
// *************************************************************
event Prodotto.BeforeLookup(
inout boolean Skip // Set to TRUE to skip normal processing
inout boolean Cancel // Set to TRUE to cancel lookup
)
{
string NomeProd = "" //
string NomeForn = "" //
//
Skip := True
//
// Leggiamo come lookup il nome del prodotto e del fornitore
select into variables
set NomeProd := Prodotti.NomeProdotto
set NomeForn := Fornitori.NomeSocieta
from
Prodotti // Master Table
Fornitori // Joined with Prodotti using FK FornitoriProdotti
where
Prodotti.Id = Id
//
// Compongo il nome del prodotto che voglio vedere decodificato
NomeProdotto := FormatMessage(C|1 [|2], NomeProd, NomeForn, ??, ??, ??)
}
// Fired before a lookup query will be executed on this document
// *************************************************************
event Prodotto.BeforeLookup(
inout boolean Skip // Set to TRUE to skip normal processing
inout boolean Cancel // Set to TRUE to cancel lookup
)
{
string NomeProd = "" //
string NomeForn = "" //
//
Skip := True
//
// Leggiamo come lookup il nome del prodotto e del fornitore
select into variables
set NomeProd := Prodotti.NomeProdotto
set NomeForn := Fornitori.NomeSocieta
from
Prodotti // Master Table
Fornitori // Joined with Prodotti using FK FornitoriProdotti
where
Prodotti.Id = Id
//
// Compongo il nome del prodotto che voglio vedere decodificato
NomeProdotto := FormatMessage(C|1 [|2], NomeProd, NomeForn, ??, ??, ??)
}
-
La procedura di gestione dei lookup tramite documenti è la seguente:
- Per ogni query di lookup basata su documenti contenuta nel pannello, il pannello crea un'istanza della classe del documento.
- Nel momento in cui occorre effettuare una decodifica, il pannello resetta tutte le proprietà del documento precedentemente creato e valorizza tutte le proprietà indicate nelle clausole "where" della query di lookup definita nel pannello. In questo modo il documento ha a disposizione i valori corretti per effettuare la query sul database, cioè sa quale documento deve essere decodificato.
- Il pannello chiama il metodo LoadFromCache sul documento, il che inizia la procedura di gestione della decodifica.
- L'evento di BeforeLookup viene notificato al documento, che ha così la possibilità di modificare il modo con cui deve essere gestita la decodifica. Se i parametro Skip non viene impostato, si continua.
- Nella cache dei documenti, globale alla sessione, viene cercato un documento che ha gli stessi valori nelle proprietà valorizzate. Se viene trovato allora la decodifica era già stata eseguita, altrimenti il documento viene caricato dal database tramite il metodo LoadFromDB(0), cioè viene caricato solo il documento e non le sue collection.
- L'evento di AfterLookup viene notificato al documento, che ha così la possibilità di modificare i dati recuperati nel documento.
- Il pannello, ottenuto il documento di decodifica, mostra i video le proprietà selezionate nella select list della query di lookup.
- Durante l'evento di BeforeLookup è possibile consultare i dati del documento per sapere quali sono i codici da decodificare. Cambiando il valore di tali proprietà si otterranno query diverse.
- E' possibile personalizzare il tipo di query di lookup da eseguire aggiungendo una proprietà aggiuntiva al documento e valorizzandola dove serve aggiungendo alla query di lookup un filtro del tipo "proprietà aggiuntiva = costante".
Ultima modifica: 23/03/2021 / Validità: da 6.5.2680