In 4D v17 R6 werden die ORDA Abfragen immer leistungsfähiger und präziser. Dieser Blog-Beitrag richtet sich an diejenigen unter Ihnen, die anspruchsvollere Suchkriterien als nur eine einfache Syntax wie„name = Smith‚“ benötigen. Mit diesem R-Release können Sie jede Projektmethode oder jeden 4D-Ausdruck in der query() Member-Methode verwenden, indem Sie Formeln benutzen.
Wie kann man diese Funktion besser erklären als mit einem Beispiel? Schauen wir uns die Details an.
HDI: Beispiel für ORDA-Abfragen mit Formeln
SCHREIBEN EINER ABFRAGE MIT EINER FORMEL
Die query() member-Methode wurde aktualisiert und unterstützt nun ein einzelnes Formula Objekt als Parameter unterstützt.
Beispiel
In der Datenklasse Students suchen wir nach Schülern, deren Punktzahl in Englisch höher ist als ihr Gesamtdurchschnitt.
Beachten Sie, dass die Formel auf jedes Objekt mit dem This Befehl.
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)
Verwendung einer Formel mit anderen Suchkriterien
Formeln können leicht mit anderen Suchkriterien kombiniert werden. Nachfolgend finden Sie ein Beispiel, das Ihnen zeigt, wie das geht.
Beispiel
In der Datenklasse Students wird weiterhin nach Schülern gesucht, deren Punktzahl in Englisch höher ist als ihr Gesamtdurchschnitt UND deren Land England ist.
Das Objekt $formula wird wie jedes andere Objekt als Platzhalterwert verwendet.
C_OBJECT($formula;$students)
C_TEXT ($country) // $country = "France"
$formula :=Formula(This.grades.english>studentAverage (This))
$students :=ds.Students.query(":1 and country=:2";$formula;$country)
Verwendung einer Formel in der Abfragezeichenfolge
Eine Formel kann auch mit einer eval()-Anweisung in den Abfrage-String eingefügt werden.
Dies kann zwar praktisch sein, um eine Abfrage schnell zu kodieren, aber Sie werden die Vorteile der Verwendung eines Formelobjekts (wie automatische Vervollständigung, Farben im Code-Editor und Suchaufrufe) verpassen.
C_OBJECT($students)
C_TEXT ($country) // $country = "France"
$students :=ds.Students.query("eval(This.grades.english > studentAverage (This)) and country=:1";$country)
HINWEIS: Die query() Member-Methode des Objekts Entity Selection wurde ebenfalls aktualisiert, um Formeln zu unterstützen. Lesen Sie die Dokumentation, um mehr zu erfahren.