Série ORDA pokračuje! V tomto příspěvku se podíváme, jak používat logické operátory na výběry entit!
Tyto operace umožňují získat průniky, sjednocení nebo rozdíly mezi dvěma výběry entit, stejně jako je tomu u klasických 4D množin.
Příklad logických operátorů na výběrech entit
V klasickém 4D používáte množiny k provádění logických operací nad několika výsledky dotazů. Po každém dotazu musíte vytvořit množinu, provést logickou operaci nad množinami a nakonec aktualizovat aktuální výběr příslušné tabulky pomocí výsledné množiny. To je poněkud těžké! Naštěstí se s ORDA věci výrazně odlehčují! Při každém dotazu získáte výběr entit, na který lze přímo aplikovat logické operátory!
ORDA poskytuje následující metody pro provádění logických operací nad dvěma výběry entit:
– and(): získá průnik mezi dvěma výběry entit (entity patřící do obou).
– or(): získá sjednocení mezi dvěma výběry entit (entity patřící do jednoho nebo do druhého).
– minus(): získá rozdíl mezi dvěma výběry entit (entity patřící do jednoho a nepatřící do druhého)
Tyto metody lze také aplikovat na výběr entit a jednotlivé entity.
Příklad:
Příklad vydá za tisíc slov! Podívejme se na zaměstnance a jejich stravovací preference.
KLASICKÝ 4D:
//A named selection "meat" is created before
// ...
QUERY BY ATTRIBUTE([Zaměstnanec];[Zaměstnanec]food; "ryba";=;True)
CREATE SET ([Zaměstnanec]; "ryba")
USE NAMED SELECTION ("maso")
CREATE SET ([Zaměstnanec]; "maso")
UNION ("ryba"; "maso"; "výsledek")
USE SET ("výsledek")
CLEAR SET ("maso")
CLEAR SET ("ryba")
CLEAR SET ("výsledek")
ORDA:
Zde máme metodu, která jako parametr přijímá výběr entit. Vracíme sjednocení výběru entit $eatingMeat a výběru 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