Die ORDA-Serie geht weiter! In diesem Blog-Beitrag werden wir sehen, wie man logische Operatoren auf Entitätsselektionen anwenden kann!
Mit diesen Operatoren können Sie Schnittpunkte, Vereinigungen oder Unterschiede zwischen zwei Entitätsselektionen ermitteln, wie Sie es mit klassischen 4D Sets tun können.
Beispiel für logische Operatoren auf Entity-Auswahlen
Im klassischen 4D verwenden Sie Sets, um logische Operationen auf mehrere Abfrageergebnisse anzuwenden. Sie müssen nach jeder Abfrage ein Set erstellen, die logische Operation auf den Sets durchführen und schließlich die aktuelle Auswahl der betreffenden Tabelle mit dem Ergebnis-Set aktualisieren. Das ist ein bisschen schwerfällig! Zum Glück wird das mit ORDA viel einfacher! Jede Abfrage gibt Ihnen eine Auswahl von Entitäten, auf die logische Operatoren direkt angewendet werden können!
ORDA bietet die folgenden Methoden, um logische Operationen auf zwei Entitätsselektionen durchzuführen:
– and(): liefert die Schnittmenge zwischen zwei Entity-Auswahlen (Entities, die zu beiden gehören)
– or(): liefert die Vereinigung zwischen zwei Entitätsselektionen (Entitäten, die zu einer oder zur anderen gehören)
– minus(): liefert die Differenz zwischen zwei Auswahlen von Entitäten (Entitäten, die zu der einen und nicht zu der anderen gehören)
Diese Methoden können auch auf eine Entitätsauswahl und eine einzelne Entität angewendet werden.
Beispiel
Ein Beispiel sagt mehr als tausend Worte! Werfen wir einen Blick auf die Mitarbeiter und ihre Essensvorlieben.
CLASSIC 4D:
//A named selection "meat" is created before
// ...
QUERY BY ATTRIBUTE([Mitarbeiter];[Mitarbeiter]food; "Fisch";=;True)
CREATE SET ([Mitarbeiter]; "Fisch")
USE NAMED SELECTION ("Fleisch")
CREATE SET ([Mitarbeiter]; "Fleisch")
UNION ("Fisch"; "Fleisch"; "Ergebnis")
USE SET ("Ergebnis")
CLEAR SET ("Fleisch")
CLEAR SET ("Fisch")
CLEAR SET ("Ergebnis")
ORDA:
Hier haben wir eine Methode, die eine Entitätsauswahl als Parameter erhält. Wir geben die Vereinigung der Entitätsauswahl $eatingMeat und der Entitätsauswahl $eatingFish zurück.
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