Des requêtes ORDA plus sophistiquées avec des formules

Traduit automatiquement de Deepl

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.

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert a rejoint l'équipe de 4D Product en tant que Product Owner en 2017. En tant que Product Owner, elle est en charge de rédiger les user stories puis de les traduire en spécifications fonctionnelles. Son rôle est également de s'assurer que l'implémentation de la fonctionnalité livrée répond au besoin du client.Marie-Sophie est diplômée de l'école d'ingénieur ESIGELEC et a commencé sa carrière en tant qu'ingénieur chez IBM en 1995. Elle a participé à divers projets (projets de maintenance ou de construction) et a travaillé en tant que développeur Cobol. Elle a ensuite travaillé en tant que concepteur UML et développeur Java. Dernièrement, ses principaux rôles étaient d'analyser et de rédiger des exigences fonctionnelles, de coordonner les équipes commerciales et de développement.