Dans 4D v17 R6, les requêtes ORDA deviennent de plus en plus puissantes et concises. Ce billet de blog est destiné à ceux d’entre vous qui ont besoin de critères de recherche plus sophistiqués qu’une simple syntaxe comme« nom = Smith‘ ». Avec cette version R, vous pouvez utiliser n’importe quelle méthode de projet ou expression 4D dans la méthode membre de query() méthode membre en utilisant des formules.
Quelle meilleure façon d’expliquer cette fonctionnalité qu’avec un exemple ? Entrons dans les détails.
IDH : Exemple de requêtes ORDA utilisant des formules
ÉCRIRE UNE QUESTION À L’AIDE D’UNE FORMULE
La méthode membre query() a été mise à jour pour prendre en charge un seul Formula comme paramètre.
Exemple
Dans la dataClass Students , nous recherchons les étudiants ayant un score en anglais supérieur à leur score moyen global.
Notez que chaque entité est accessible par la formule avec la commande This de la formule.
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)
Utiliser une formule avec d’autres critères de recherche
Les formules peuvent facilement être combinées avec d’autres critères de recherche. Vous trouverez ci-dessous un exemple pour vous montrer comment faire.
Exemple
Dans la dataClass Students , nous continuons à rechercher les élèves dont la note en anglais est supérieure à leur moyenne générale ET dont le pays est l’Angleterre.
L’objet $formula est utilisé comme une valeur de remplacement, comme n’importe quelle autre valeur.
C_OBJECT($formula;$students)
C_TEXT ($country) // $country = "France"
$formula :=Formula(This.grades.english>studentAverage (This))
$students :=ds.Students.query(":1 et pays=:2" ;$formula;$country)
utiliser une formule dans la chaîne de requête
Une formule peut également être insérée dans la chaîne de requête à l’aide d’une instruction eval().
Bien que cela puisse être pratique pour coder rapidement une requête, vous ne bénéficierez pas des avantages de l’utilisation d’un objet de formule (tels que l’autocomplétion, les couleurs dans l’éditeur de code et les appelants de recherche).
C_OBJECT($students)
C_TEXT ($country) // $country = "France"
$students :=ds.Students.query("eval(This.grades.english > studentAverage (This)) and country=:1" ;$country)
REMARQUE : La méthode query() de l’objet de sélection d’entité a également été mise à jour pour prendre en charge les formules. Consultez la documentation pour en savoir plus.