前回のブログでは、ORDAクエリに数式を適用して、高度で複雑な検索条件を構築する方法を学びました。さらに、完全で強力な開発ツールを提供するために、新しいORDAメソッドが利用可能です。 orderByFormula().数式を使用すると、プロジェクトメソッドまたは4D式で複雑な条件を使用して、エンティティの選択 を順序付けることができるようになりました。
順序の基準は、数式が文字列またはオブジェクトとして与えられたときに評価されます。 Formulaオブジェクトとして orderByFormula() メソッドに文字列またはオブジェクトとして渡されたときに評価されます。
文字列として数式を使用した順序付け
ここでは、dataClass,Companies があり、利益(profits = revenue – costs) に基づいてすべての企業を並べ替えます。
なお、エンティティへのアクセスは Thisコマンドでアクセスすることに注意してください。
C_OBJECT($companies;$orderedCompanies)
$companies :=ds.Companies.all()
$orderedCompanies :=$companies.orderByFormula ("This.revenue - This.costs")
数式オブジェクトを使ったオーダー
ここでは、同じ基準で企業を並べ替えますが、文字列の代わりに Formulaオブジェクトを使用し、降順でソートしています。
C_OBJECT
($companies;$orderedCompanies;$formula)
$formula :=Formula(This.revenue -This.costs)$companies:=ds.Companies.all()$orderedCompanies :=$companies.orderByFormula ($formula;dk descending)
オブジェクトを使用すると、いくつかの利点があることに注意してください。 Formulaオブジェクトを使用すると、数式を文字列として使用するよりもいくつかの利点 (自動補完、コードエディタの色など) があることに注意してください。
また orderByFormula()メソッドには、さらに多くのオプションがあります。詳しくはドキュメントをチェックし、上記のHDIをダウンロードしてください。
about エンティティセレクションの順序付け
query()メンバメソッド自体の中にorder by ステートメントを挿入できるようになりました。これは、クライアント/サーバーモードで作業する場合に大きな利点となります。なぜなら、クエリーと順序付けアクションを同じリクエストにまとめることができるので、サーバーに送信されるリクエストの数が減り、ネットワークトラフィックが減少するからです。
C_OBJECT($companies)
$companies :=ds.Companies.query("revenue> :1 order by costs desc";5000)