一般的なORDAクエリに値を追加する

Deeplからの自動翻訳

ORDAのクエリは軽くて読みやすいだけでなく、オブジェクト指向の概念を用いてデータモデル全体を簡単に操作できることに、もうお気づきでしょう!?このブログ記事では、強力でメンテナンスが簡単なクエリを書く方法を紹介しました。その中で、クエリと値を別々にプレースホルダーで提供する方法が推奨されていました。4D v17 R5では、プレースホルダーをさらに進化させ、一般的なORDAクエリを記述できるようになりました:値の名前付きプレースホルダーをよろしくお願いします。

HDI: ORDAクエリにおける値の名前付きプレースホルダーの例

これらの新しいプレースホルダーは、クエリ設定においてオブジェクトパラメータとして提供されます。オブジェクトはキーと値のマップなので、クエリで使用するのは非常に簡単です。

百聞は一見に如かず

ここでは、Charlieという 名前のクライアントをLoyal clientというコメント付きで取得するクエリを紹介します。何か思い当たる節があるでしょうか?もしそうでなければ、この投稿を読んで記憶を呼び覚ましてください。

C_OBJECT($clients)
$clients :=ds.Clients.query("name =:1and comment =:2"; "Charlie@"; "Loyal client")

このクエリは、次のようにも書けます。

C_OBJECT($settings;$clients)
$settings :=New object
$settings .parameters:=New object("givenName"; "Charlie@"; "givenComment"; "Loyal client")
$clients :=ds.Clients.query("name =:givenNameand comment =:givenComment";$settings
)と書くこともできます。

プレースホルダーは、名前の前に “:” をつけて使うだけです。

あなたのコードは簡単に読めて保守しやすいものですが、さらに大きな利点は、値のパラメータが異なるソース (ユーザーインターフェイスやリクエスト) から来るかもしれない汎用的なクエリを書くことができることです。

このようなパターンはどうでしょうか?

ユーザーが検索条件や適用する値を選択できるようなクエリインターフェイスを提供することもできます。

以下のコードは、営業担当者が顧客のリストを閲覧できるようにするためのインターフェースです。これは、営業担当者の ID に従ってフィルタリングされたコンテンツを返します。

C_OBJECT

$settingsparameters($formData;$settings;$clients)
C_TEXT ($queryString)

$formData :=New object
DIALOG ("QueryEditor";$formData)
CLOSE WINDOW if (OK=1) //The logged sales person can only browse their clients
$queryString :="salesPersonUserId = :givenUserId"
//The $formData object comes from the user's interface with search criteria filled

//It contains the sales person's user id and some additional search criterias (name and city)

$settings :=New object

$settings .parameters:=$formData

If ( xml-ph-0034@deepl.in )givenName

#Null)
$queryString :=$queryString+" and name = :givenName"
End if

If ($settings.parameters.givenCity#Null)
$queryString :=$queryString+" and city.name = :givenCity"
End if $clients :=ds.Clients.query($queryString;$settings
、 )
end if

上の例はdataClassに対するクエリですが、ドキュメントを見ると、コレクションにも適用できることがわかりますね。

このように、クエリを動的に作成するのは簡単です。HDIをダウンロードし、実行してみてください。

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