数式を使ったより高度なORDAクエリ

Deeplからの自動翻訳

4D v17 R6では、ORDAクエリはますます強力で簡潔なものになっています。このブログ記事は、「name = Smith‘」のような単純な構文だけでなく、より洗練された検索条件を必要とする人のためのものです。このR-リリースでは、任意のプロジェクトメソッドや4D式を、数式を使用して query()メンバー・メソッドで数式を使用することができます。

この機能を説明するのに、例を挙げるより他に方法があるでしょうか?それでは、詳しく見ていきましょう。

HDI: 数式を使用したORDAクエリの例

数式を使用したクエリの作成

この 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 メソッドも更新され、数式をサポートするようになりました。詳しくは、ドキュメントを確認してください。

Avatar
- プロダクトオーナー - Marie-Sophie Landrieu-Yvertは、2017年にプロダクトオーナーとして4Dプロダクトチームに参加しました。プロダクトオーナーとして、彼女はユーザーストーリー(ユーザーが期待する新機能とその使用法)を書き、それを具体的な機能仕様に変換する役割を担っています。また彼女の役割は、実装された機能が顧客のニーズを満たしているかどうかを確認することでもあります。彼女は1995年にESIGELEC Engineering Schoolを卒業し、IBMでエンジニアとしてのキャリアをスタートさせました。様々なプロジェクト(保守や新規のプロジェクト)に参加し、Cobolのデベロッパーとして働きました。その後、UMLデザイナーおよびJavaデベロッパーとして勤務。最近は、機能要件の分析・記述、ビジネスチームと開発チームの調整などを主に担当しています。