Dans un précédent article de blog, vous avez appris à construire des critères de recherche sophistiqués et complexes en appliquant des formules dans une requête ORDA. Pour continuer à vous fournir des outils de développement complets et puissants, une nouvelle méthode ORDA est disponible : orderByFormula(). Avec l’aide de formules, vous pouvez maintenant ordonner une sélection d’entités en utilisant des critères complexes dans une méthode de projet ou une expression 4D.
HDI : Exemples pour ordonner une sélection d’entités avec une formule
Le critère d’ordre est évalué lorsque la formule est donnée sous forme de chaîne de caractères ou d’un objet Formula à la méthode orderByFormula() sous forme de chaîne ou d’objet.
Ordonner avec une formule sous forme de chaîne
Ici, nous avons une DataClass, Companies, et nous ordonnons toutes les entreprises en fonction de leurs bénéfices (bénéfices = revenus – coûts).
Notez que l’entité est accessible via la commande This pour accéder à l’entité.
C_OBJECT($companies;$orderedCompanies)
$companies :=ds.Companies.all()
$orderedCompanies :=$companies.orderByFormula ("This.revenue - This.costs")
Commande avec un objet formule
Ici, nous classons les entreprises en utilisant les mêmes critères, mais au lieu d’une chaîne de caractères, nous utilisons un objet Formula et nous trions par ordre décroissant.
C_OBJECT($companies;$orderedCompanies;$formula)
$formula := Formula(This.revenue - This.costs)
$companies :=ds.Companies.all()
$orderedCompanies:=$companies.orderByFormula ($formula;dk descending)
Notez que l’utilisation d’un objet Formula présente certains avantages (tels que l’autocomplétion, les couleurs dans l’éditeur de code, etc.) par rapport à l’utilisation d’une formule sous forme de chaîne.
La méthode orderByFormula() offre encore plus d’options. Consultez la documentation et téléchargez l’IDH ci-dessus pour plus de détails.
à propos de la commande d’une sélection d’entités
Vous pouvez désormais insérer une déclaration order by à l’intérieur de la méthode membre query() elle-même. C’est un avantage considérable lorsque vous travaillez en mode client/serveur, car vous pouvez combiner la requête et l’action de commande dans la même demande, ce qui réduit le nombre de demandes envoyées au serveur et votre trafic réseau.
C_OBJECT($companies)
$companies :=ds.Companies.query("revenue> :1 order by costs desc";5000)