Universal Web Platform · Leggere i dati

Leggere i dati: QUERY, filtri SQL, paginazione e conteggio

Con QUERY leggi i record di un tipo. La risposta li restituisce nella lista del tipo, completi di tutti i campi e degli elenchi annidati.

Come il server costruisce la lettura

Per ogni tipo il server parte da una lettura fissa sulla tabella del tipo (indicata nella sua pagina), del tipo select ... from <tabella> WHERE 0 = 0, e aggiunge in ordine:

  1. i filtri del tipo stesso (eventi, deposito, obsoleti, dove previsti);
  2. se IgnoreImportRecord è falso, l'esclusione dei record già confermati da questa postazione (GuidPC);
  3. AND <SQLFilter>, se il filtro non è vuoto;
  4. la paginazione con StartingRecord e LimitRecord.

Il testo della lettura eseguita torna nella risposta in LastSQLExecute: è il primo posto dove guardare quando una lettura non restituisce quello che ti aspetti.

SQLFilter

È una condizione SQL scritta con i nomi della tabella e delle colonne del database, non con i nomi delle proprietà. Le colonne di ogni tipo sono nella colonna «Colonna» della sua pagina; il nome della tabella è nella scheda tecnica.

Esempi di SQLFilter
articoli.codice LIKE 'A%'
CategorieMerceologiche.codice IN ('ABB', 'CAL')
DocumentiTesta.Tipo = 'OC' AND DocumentiTesta.TipoControparte = 'C'
clientifornitori.tipo = 'C' 
Se il filtro contiene un errore la risposta arriva senza record, con Status FAILED e il messaggio del database in ErrorList. Controlla LastSQLExecute e prova il filtro con una lettura di pochi record prima di usarlo in produzione. Gli apici dentro i valori vanno raddoppiati ('D''Angelo').

Per i tipi che partono da un'altra tabella collegata agli articoli (Prezzi degli articoli, Immagini degli articoli, File degli articoli, Giacenze per articolo) il filtro può usare anche le colonne di articoli, per esempio articoli.linea = 'ABB' per leggere solo i prezzi di una categoria.

QueryParameter

CampoTipoPredefinitoA cosa serve
StartingRecordIntero0Primo record da restituire, contando da 1.
LimitRecordIntero0Numero massimo di record da restituire. Con 0 non c'è limite: evitalo sugli archivi grandi.
CountingVero/falsofalseInvece dei record restituisce solo il loro numero, in ObjectListCounting[0].Number. Serve per sapere quante pagine leggere.
IgnoreImportRecordVero/falsofalseCon false (predefinito) la lettura esclude i record che questa postazione ha già confermato: è la sincronizzazione incrementale. Con true legge tutto, conferme comprese.
FiltraPerEventoVero/falsofalsePer Documenti: con evento indicato legge solo i documenti di quell'evento; con EventoAnno a 0 legge tutti quelli collegati a un evento. Per gli articoli e i loro dati filtra quelli dell'evento.
EventoAnnoIntero0Anno dell'evento di merchandising.
EventoNumeroIntero0Numero dell'evento di merchandising.
DepositoTestovuotoPer Documenti: solo i documenti con almeno una riga che movimenta questo deposito, in partenza o in arrivo.
SoloCarichiVero/falsofalsePer Documenti: solo i documenti con causale di magazzino di carico.
LoadObsoletiVero/falsofalsePer Eventi di merchandising: include anche gli eventi obsoleti.

Leggere un archivio intero, a pagine

  1. Chiedi il conteggio: QUERY con Counting: true e IgnoreImportRecord: true.
  2. Leggi a blocchi: StartingRecord = 1, 1001, 2001... con LimitRecord = 1000, sempre con IgnoreImportRecord: true.
  3. Per scaricare solo le novità usa invece la sincronizzazione incrementale, che legge sempre dal primo record.
JSON · quanti articoli iniziano per A
{
  "DataOperation": 3,
  "TypeObject": 19,
  "GuidPC": "gestionale-01",
  "SQLFilter": "articoli.codice LIKE 'A%'",
  "QueryParameter": { "Counting": true, "IgnoreImportRecord": true }
}
Risposta (estratto)
{
  "Status": "OK",
  "RequestDataOperation": 3,
  "TypeObject": 19,
  "ErrorList": [],
  "ObjectListCounting": [ { "Number": 1284 } ]
}

Solo l'elenco dei record

Aggiungendo directshow=true all'indirizzo la risposta contiene solo la lista dei record del tipo richiesto, senza stato ed errori. È comoda per le letture veloci da strumenti esterni, ma in un'integrazione vera conviene la risposta completa.