La serie ORDA continua! In questo post vedremo come utilizzare gli operatori logici sulle selezioni di entità!
Queste operazioni consentono di ottenere intersezioni, unioni o differenze tra due selezioni di entità, come si può fare con i classici insiemi 4D.
Esempio di operatori logici sulle selezioni di entità
In 4D classico, si usano gli insiemi per eseguire operazioni logiche su diversi risultati di query. È necessario creare un set dopo ogni query, eseguire l’operazione logica sui set e infine aggiornare la selezione corrente della tabella interessata con il set di risultati. È un po’ pesante! Fortunatamente, con ORDA le cose stanno diventando molto più leggere! Ogni query fornisce una selezione di entità a cui si possono applicare direttamente gli operatori logici!
ORDA fornisce i seguenti metodi per eseguire operazioni logiche su due selezioni di entità:
– and(): ottiene l’intersezione tra due selezioni di entità (entità appartenenti a entrambe)
– or(): ottenere l’unione tra due selezioni di entità (entità appartenenti a una o all’altra)
– minus(): ottiene la differenza tra due selezioni di entità (entità appartenenti a una e non all ‘altra)
Questi metodi possono essere applicati anche a una selezione di entità e a una singola entità.
Esempio
Un esempio vale più di mille parole! Prendiamo in esame i dipendenti e le loro preferenze alimentari.
CLASSICO 4D:
//A named selection "meat" is created before
// ...
QUERY BY ATTRIBUTE([Impiegato];[Impiegato]food; "pesce";=;Vero)
CREATE SET ([Impiegato]; "pesce")
USE NAMED SELECTION ("carne")
CREATE SET ([Impiegato]; "carne")
UNION ("pesce"; "carne"; "risultato")
USE SET ("risultato")
CLEAR SET ("carne")
CLEAR SET ("pesce")
CLEAR SET ("risultato")
ORDA:
Abbiamo un metodo che riceve come parametro una selezione di entità. Restituiamo l’unione della selezione di entità $eatingMeat e della selezione di entità $eatingFish.
C_OBJECT($eatingFish;$1;$eatingMeat;$result)
$eatingMeat :=$1
//Get employees eating fish
$eatingFish :=ds.Employee.query("food.fish=:1";True)
//Get the union of the 2 entity selections $eatingMeat and $eatingFish
$result:=$eatingMeat.or($eatingFish)
$0 :=$result