Ve verzi 4D v17 R6 jsou dotazy ORDA stále výkonnější a stručnější. Tento příspěvek na blogu je určen těm z vás, kteří potřebují sofistikovanější vyhledávací kritéria než jen jednoduchou syntaxi typu„jméno = Smith‚“. V této verzi systému R můžete použít jakoukoli metodu projektu nebo výraz 4D v. query() členské metodě pomocí vzorců.
Jak lépe vysvětlit tuto funkci než na příkladu? Pojďme se podívat na podrobnosti.
HDI: Příklad dotazů ORDA pomocí vzorců
NAPSAT DOTAZ S POUŽITÍM FORMULÁŘE
Stránka query() členské metody byla aktualizována tak, aby podporovala jediný Formula objekt jako parametr.
Příklad
V datové třídě Students hledáme studenty, jejichž výsledek v angličtině je vyšší než jejich celkový průměrný výsledek.
Všimněte si, že ke každé entitě se přistupuje pomocí vzorce s příkazem This příkazem.
C_OBJECT($formula;$students)
// In the Students dataClass, grades is an object field containing students' grades for each subject
// Example of JSON representation of the grades object field:
// {math:50,english:90,history:85}
// The studentAverage project method computes the student's overall average in all subjects
$formula :=Formula(This.grades.english>studentAverage (This))
$students :=ds.Students.query($formula)
použití vzorce s dalšími vyhledávacími kritérii
Vzorce lze snadno kombinovat s dalšími vyhledávacími kritérii. Níže je uveden příklad, který vám ukáže, jak na to.
Příklad
V datové třídě Students nadále vyhledáváme studenty, jejichž skóre v angličtině je vyšší než jejich celkový průměr A jejichž země je Anglie.
Objekt $formula je použit jako zástupná hodnota, stejně jako jakýkoli jiný.
C_OBJECT($formula;$students)
C_TEXT ($country) // $country = "France"
$formula :=Formula(This.grades.english>studentAverage (This))
$students :=ds.Students.query(":1 a země=:2";$formula;$country)
použití vzorce v řetězci dotazu
Vzorec lze do řetězce dotazu vložit také pomocí příkazu eval().
To sice může být výhodné pro rychlé kódování dotazu, ale přijdete o výhody plynoucí z použití objektu vzorce (například automatické dokončování, barvy v editoru kódu a volací znaky pro vyhledávání).
C_OBJECT($students)
C_TEXT ($country) // $country = "France"
$students :=ds.Students.query("eval(This.grades.english > studentAverage (This)) and country=:1";$country)
POZNÁMKA: query() členská metoda objektu výběru entit byla rovněž aktualizována tak, aby podporovala vzorce. Více informací naleznete v dokumentaci.