Dopo aver appreso come creare, aggiornare e cancellare i dati, ecco una nuova puntata della serie ORDA. In questo post vedremo come interrogare il datastore in modo orientato agli oggetti. Con ORDA, le query sono più leggere e leggibili e si può navigare attraverso l’intero modello di dati utilizzando concetti orientati agli oggetti!
Inoltre, ORDA consente di interrogare molto facilmente diverse tabelle correlate, di gestire relazioni ricorsive sulla stessa tabella e di utilizzare diversi operatori logici in un’unica interrogazione. Inoltre, non dovrete preoccuparvi di impostare le relazioni tra le tabelle… manualmente o automaticamente!
Esempio di query con DataStore
INIZIARE CON LE QUERY ORDA
Come quando si esegue una query su una tabella, la query con ORDA viene eseguita su una classe di dati (che corrisponde a una tabella).
Esistono diversi modi per interrogare una classe di dati. Di seguito viene fornita una rapida panoramica. Per informazioni più approfondite sul metodo query(), consultare la documentazione.
1- Fornire la query come una singola stringa
Ecco una query per ottenere tutti i dipendenti il cui nome inizia per ‘S’:
C_OBJECT($employees)
)
$employees :=ds.Employee.query("firstName='S@'" // Query on Employee table
2- Fornire separatamente la query e i valori utilizzando i segnaposto
Supponiamo di voler ottenere tutti i dipendenti il cui nome inizia con ‘D’ o ‘E’. Si noti che i valori da applicare sono sfalsati nella query e sono indicati con :1, :2, … :n, come mostrato di seguito:
C_OBJECT($employees)
)
$employees :=ds.Employee.query("firstName=:1 or firstName=:2"; "D@"; "E@" // Query on Employee table
Variante: È anche possibile utilizzare i segnaposto attraverso una collezione per fornire i valori. Come dimostra l’esempio seguente:
C_OBJECT($employees;$params)
// You can use a collection to provide values to apply in the query
$params:=New object
$params .
parameters:=New collection("D@"; "E@")
$employees :=ds.Employee.query("firstName=:1 or firstName=:2";$params) // Query on Employee table
alcuni vantaggi del nuovo modo di fare le query
UTILIZZARE FACILMENTE UN COLLEGAMENTO RICORSIVO SU UNA SINGOLA TABELLA
Si consideri questo collegamento ricorsivo sulla tabella “Employee”:
Usando il modo classico
Questo codice richiede tutti i dipendenti il cui nome inizia con la lettera ‘A’, con un manager che ha un cognome che inizia con la lettera ‘S’:
ARRAY LONGINT(_managersIDs;0)
QUERY ([Employee];[Employee]firstName;"="; "A@")
CREATE SET ([Employee]; "a")
QUERY ([Employee];[Employee]lastName;"=";"S@")
SELECTION TO ARRAY ([Employee]ID;_managersIDs)
QUERY WITH ARRAY ([Employee]managerID;_managersIDs)
CREATE SET ([Employee]; "s")
INTERSECTION ("a"; "s"; "result")
USE SET ("result")
CLEAR SET ("a")
CLEAR SET ("s")
utilizzando orda
Questa query è molto più leggera…
C_OBJECT($entitySelection)
$entitySelection := ds.Employee.query("firstName=:1 and manager.lastName=:2"; "A@"; "S@")
Non aspettate… iniziate subito a usare ORDA per ottenere codice più breve, più pulito e più leggibile!