4D v17 R6では、ORDAクエリはますます強力で簡潔なものになっています。このブログ記事は、「name = Smith‘」のような単純な構文だけでなく、より洗練された検索条件を必要とする人のためのものです。このR-リリースでは、任意のプロジェクトメソッドや4D式を、数式を使用して query()メンバー・メソッドで数式を使用することができます。
この機能を説明するのに、例を挙げるより他に方法があるでしょうか?それでは、詳しく見ていきましょう。
数式を使用したクエリの作成
この query()メンバー・メソッドが更新され、単一の Formulaオブジェクトをパラメーターとしてサポートするように更新されました。
例
Students dataClass で、英語のスコアが全体の平均スコアより高い学生を検索する。
なお、各エンティティへのアクセスは、数式で Thisコマンドを使用します。
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)
数式を他の検索条件と併用する
数式は、他の検索条件と簡単に組み合わせることができます。以下はその例です。
例
Students dataClass では、英語のスコアが全体の平均より高く、かつ国がイングランドの学生を引き続き検索しています。
$formula オブジェクトは、他のオブジェクトと同様にプレースホルダーの値として使用されます。
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)
クエリ文字列で数式を使用する
クエリ文字列の中に数式を挿入するには、eval()ステートメントを使用します。
この方法は、クエリをすばやくコーディングするのに便利ですが、数式オブジェクトを使用することによる利点 (オートコンプリート、コードエディタの色、検索呼び出し元など) を見逃すことになります。
C_OBJECT($students)
C_TEXT ($country) // $country = "France"
$students :=ds.Students.query("eval(This.grades.english > studentAverage (This)) and country=:1";$country)
注:エンティティ選択オブジェクトの query()member メソッドも更新され、数式をサポートするようになりました。詳しくは、ドキュメントを確認してください。