La série ORDA continue ! Dans ce billet, nous allons voir comment utiliser les opérateurs logiques sur les sélections d’entités!
Ces opérations vous permettent d’obtenir des intersections, des unions ou des différences entre deux sélections d’entités comme vous pouvez le faire avec les ensembles 4D classiques.
Exemple d’opérateurs logiques sur des sélections d’entités
Dans la version classique de 4D, vous utilisez des ensembles pour effectuer des opérations logiques sur les résultats de plusieurs requêtes. Vous devez créer un ensemble après chaque requête, effectuer l’opération logique sur les ensembles, et enfin mettre à jour la sélection courante de la table concernée avec l’ensemble des résultats. C’est un peu lourd ! Heureusement, avec ORDA les choses deviennent beaucoup plus légères ! Chaque requête vous donne une sélection d’entités à laquelle lesopérateurs logiques peuvent être directement appliqués !
ORDA fournit les méthodes suivantes pour effectuer des opérations logiques sur deux sélections d’entités :
– and() : obtient l’intersection entre deux sélections d’entités (entités appartenant aux deux)
– or() : obtient l’union entre deux sélections d’entités (entités appartenant à l’une ou à l’autre).
– minus() : obtenir la différence entre deux sélections d’entités (entités appartenant à l’une et pas à l’autre).
Ces méthodes peuvent également être appliquées à une sélection d’entités et à une entité individuelle.
Exemple
Un exemple vaut mille mots ! Intéressons-nous aux employés et à leurs préférences alimentaires.
CLASSIQUE 4D :
//A named selection "meat" is created before
// ...
QUERY BY ATTRIBUTE([Employé] ; [Employé]food; "poisson";=;Vrai)
CREATE SET ([Employé] ; "poisson")
USE NAMED SELECTION ("viande")
CREATE SET ([Employé] ; "viande")
UNION ("poisson" ; "viande" ; "résultat")
USE SET ("résultat")
CLEAR SET ("viande")
CLEAR SET ("poisson")
CLEAR SET ("résultat")
ORDA :
Ici, nous avons une méthode qui reçoit une sélection d’entités comme paramètre. Nous retournons l’union de la sélection d’entités $eatingMeat et de la sélection d’entités $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