Interrogare il database con un approccio orientato agli oggetti

Tradotto automaticamente da Deepl

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!

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert è entrata a far parte del team 4D Product come Product Owner nel 2017. In qualità di Product Owner, è incaricata di scrivere le storie degli utenti e di tradurle in specifiche funzionali. Il suo ruolo è anche quello di assicurarsi che l'implementazione della funzionalità fornita soddisfi le esigenze del cliente.Marie-Sophie si è laureata presso la scuola di ingegneria ESIGELEC e ha iniziato la sua carriera come ingegnere presso IBM nel 1995. Ha partecipato a vari progetti (di manutenzione o di costruzione) e ha lavorato come sviluppatrice Cobol. In seguito ha lavorato come progettista UML e sviluppatore Java. Ultimamente i suoi ruoli principali erano l'analisi e la scrittura dei requisiti funzionali, il coordinamento dei team di business e di sviluppo.