Scopo
Questa funzione permette di richiedere l'esecuzione di un comando al server, il cui risultato è contenuto in un recordset ritornato dal server stesso. Il server elabora questa richiesta tramite gli evento OnSynchronize e OnSyncQuery.
Sintassi
string cmd = ""
IDArray params = new()
Recordset rs = SyncService.query(cmd, params)
IDArray params = new()
Recordset rs = SyncService.query(cmd, params)
Argomenti
Comando | E' una stringa che contiene il nome del comando da eseguire, così come verrà riconosciuto dal server. |
Parametri | E' un parametro opzionale di tipo IDArray. E' possibile passare al server un elenco di parametri relativi al comando. |
Valore di ritorno
Viene ritornato un oggetto Recordset che contiene la risposta del server.
Esempio di codice
public void Ordini1.Query()
{
// Passo l'ID del cliente come parametro
IDArray ida = new()
ida.addValue(Ordini.Idcliente)
//
// Richiedo gli ordini del cliente al server
Recordset r = SyncService.query("ordini", ida)
//
// Visualizzo quanti sono
NorthwindClient.messageBox(toString(r.recordCount()))
}
// ************************************************************
// Evento notificato quando un client vuole eseguire un comando
// ************************************************************
event RemoteClient.OnSyncQuery(
string Command // E' il comando da eseguire
IDArray Params // Array di parametri passati dal client
string Domain // Dominio del client
Recordset RS // Memorizzare qui il risultato
)
{
if (Command == "ordini")
{
Recordset r = new()
string cli = ""
//
if (Params.length() > 0)
cli = Params.getValue(0)
//
select into recordset (r)
Ordini.Idordine as IDOrdine
Ordini.Idcliente as IDCliente
Clienti.NomeSocieta as RagioneSociale
from
Ordini // master table
Clienti // joined with Ordini using key ClientiOrdini
where
Ordini.Idimpiegato = toInteger(Domain)
Ordini.Idcliente like cli + "%"
//
RS.copyFrom(r)
}
}
{
// Passo l'ID del cliente come parametro
IDArray ida = new()
ida.addValue(Ordini.Idcliente)
//
// Richiedo gli ordini del cliente al server
Recordset r = SyncService.query("ordini", ida)
//
// Visualizzo quanti sono
NorthwindClient.messageBox(toString(r.recordCount()))
}
// ************************************************************
// Evento notificato quando un client vuole eseguire un comando
// ************************************************************
event RemoteClient.OnSyncQuery(
string Command // E' il comando da eseguire
IDArray Params // Array di parametri passati dal client
string Domain // Dominio del client
Recordset RS // Memorizzare qui il risultato
)
{
if (Command == "ordini")
{
Recordset r = new()
string cli = ""
//
if (Params.length() > 0)
cli = Params.getValue(0)
//
select into recordset (r)
Ordini.Idordine as IDOrdine
Ordini.Idcliente as IDCliente
Clienti.NomeSocieta as RagioneSociale
from
Ordini // master table
Clienti // joined with Ordini using key ClientiOrdini
where
Ordini.Idimpiegato = toInteger(Domain)
Ordini.Idcliente like cli + "%"
//
RS.copyFrom(r)
}
}
- Anche se non avviene la sincronizzazione dei documenti, l'uso di questo comando esegue comunque una sessione verso il server, che quindi può autenticare il client tramite l'evento OnSynchronize.
- NON è consigliabile passare come comando stringhe SQL che il server deve eseguire, ma nomi logici che verranno interpretati dal server e convertiti nelle corrispondenti query.
- A partire dalla versione 11.1 di Instant Developer il sistema, prima di eseguire la query remota, verifica se il server di sincronizzazione è raggiungibile. Qualora il server non sia raggiungibile la funzione Query restituisce il valore NULL. Il controllo viene effettuato solo nel caso di applicazioni offline eseguite dentro alla shell nativa. Per modificare il comportamento del sistema riguardo la verifica di raggiungibilità del server di sincronizzazione è sufficiente cambiare il valore della proprietà CheckServer.
Ultima modifica: 23/03/2021 / Validità: da 10.5.4660