Condizioni di notifica
Evento notificato dall'applicazione quando viene eseguita una query e nella from list di questa è contenuta una tabella su cui è stato attivato il flag Sostituzione tabella.
- Se è stato attivato il flag Sostituzione tabella su una tabella del database e la tabella è stata utilizzata in una qualunque query dell'applicazione (pannello, albero, book, grafico, query eseguite via codice, lookup, master query documentali, etc.)
- Se è stato attivato il flag Sostituzione tabella su una tabella del database e viene caricata un'istanza di un documento derivante da tale tabella.
Utilizzo consigliato
Normalmente viene utilizzato per cambiare a run-time la tabella su cui viene eseguita una particolare query. Per esempio, se il database contiene più tabelle con la stessa struttura:
Articoli_Cliente1 Articoli_Cliente2 Articoli_Cliente3 ...il programmatore può attivare il flag Sostituzione tabella sulla prima tabella del database, eseguire le query sulla tabella Articoli_Cliente1, quindi implementare l'evento e scrivere:
if (Reason = 0 && TableCode == "Articoli_Cliente1") TableCode = "Articoli_Cliente" + toString(N)dove N è un valore numerico che indica quale cliente stiamo gestendo.
Questo evento ed il flag Sostituzione tabella permettono di cambiare a run-time il nome delle tabelle nelle query. Ciò è possibile anche utilizzando il metodo di libreria AddQuerySubstitution, anche se quest'ultimo in alcuni casi potrebbe non funzionare correttamente. La funzione AddQuerySubstitution, infatti, sostituisce un testo, dovunque esso si trovi all'interno della query, con un altro testo. Questa funzionalità, invece, permette di cambiare solo il codice di una tabella sostituendolo con il codice di un'altra tabella.
Argomenti
Previous Table Code | Parametro di tipo stringa che indica il codice della eventuale tabella in relazione con quella identificata dal valore del parametro TableCode. Qualora la tabella per cui viene notificato l'evento sia la prima nella Select List, questo parametro vale "" (stringa vuota). |
Join | Tipo di relazione in cui sono coinvolte la tabella precedente, identificata dal valore del parametro PreviousTableCode, e la tabella identificata dal valore del parametro TableCode. È un parametro di input/output e può essere cambiato qualora si desideri cambiare il tipo di relazione (solo se il parametro Reason = 1). |
Table Code | Tabella per cui viene notificato l'evento. È un parametro di input/output e può essere cambiato qualora si desideri eseguire la query su una tabella differente (solo se il parametro Reason = 0). |
Reason | Ragione della notifica dell'evento (se Reason=0 è possibile modificare il parametro TableCode, se Reason=1 è possibile valorizzare il parametro Join). |
Query Type | Tipo di query per cui è richiesta la sostituzione. I possibili valori sono: 0-Query Master, 1-Lookup, 2-Value Source (disponibile a partire dalla versione 16.5.6850). A partire dalla versione 18.5.7200 il parametro può anche assumere il valore 3 per indicare la query che viene eseguita dal sistema quando la combo-box associata ad un campo lookup editabile viene aperta |
Esempio di codice
// ***************************************************************************************************************************************************************************
// Evento notificato dall'applicazione quando viene eseguita una query e nella from list di questa è contenuta una tabella su cui è stato attivato il flag Sostituzione tabella
// ****************************************************************************************************************************************************************************
event NPQ00968App.OnTableSubstitution(
inout string PreviousTableCode //
inout string Join //
inout string TableCode //
int Reason //
int Query Type //
)
{
// Recupero il cliente di questa sessione
int N = ClienteSessione()
//
// Cambio il nome della tabella Articoli_Cliente1 in tutte le query
if (Reason == 0 && TableCode == "Articoli_Cliente1")
TableCode = "Articoli_Cliente" + toString(N)
}
// Evento notificato dall'applicazione quando viene eseguita una query e nella from list di questa è contenuta una tabella su cui è stato attivato il flag Sostituzione tabella
// ****************************************************************************************************************************************************************************
event NPQ00968App.OnTableSubstitution(
inout string PreviousTableCode //
inout string Join //
inout string TableCode //
int Reason //
int Query Type //
)
{
// Recupero il cliente di questa sessione
int N = ClienteSessione()
//
// Cambio il nome della tabella Articoli_Cliente1 in tutte le query
if (Reason == 0 && TableCode == "Articoli_Cliente1")
TableCode = "Articoli_Cliente" + toString(N)
}
-
Se la query contiene solo una tabella verrà notificato l'evento:
OnTableSubstitution("", "", "CODICE_TABELLA", 0)
Il valore 0 nel parametro Reason indica che il sistema sta chiedendo se si desidera sostituire CODICE_TABELLA con qualcosa di differente. -
Se, invece, la query è del tipo:
select * from ORDINI inner join DETTAGLI
e sia la tabella ORDINI che la tabella DETTAGLI hanno il flag Sostituzione tabella attivo, il sistema notifica i seguenti eventi nell'ordine indicato:OnTableSubstitution("", "", "ORDINI", 0) OnTableSubstitution("ORDINI", "inner join", "DETTAGLI",1) OnTableSubstitution("ORDINI", "inner join", "DETTAGLI",0)
La prima chiamata permette di sostituire la tabella ORDINI (poiché è la prima tabella nella from list non viene fornito un valore per i parametri PreviousTableCode e Join). Poi viene notificato l'evento con Reason=1 per permettere la sostituzione del tipo di join. Per esempio, si potrebbe cambiare il tipo da inner join a left join. In seguito viene effettuata l'ultima chiamata con Reason=0, che permette di cambiare il codice della tabella DETTAGLI quando usata all'interno di una query con la tabella ORDINI. - Attenzione: se viene attivato il flag per una tabella usata nella query di un pannello, un book, un grafico o un albero, l'evento verrà notificato PRIMA della notifica dell'evento OnLoad della videata, come è possibile osservare attivando il modulo di debug e verificando la sequenza degli eventi.
Ultima modifica: 10/08/2018 / Validità: da 12.5.5400