アプリケーション開発では、しばしばフォームを動的に作成する必要があります。たとえば、ユーザーのニーズに合わせて、その場で検索フォームを生成したい場合があります。4D では、ダイナミックフォームを構築するために大きく分けて 2つのアプローチがあります: フォーム全体をプログラムで構築するか、既存のフォームレイアウトにオブジェクトを追加するかです。これまでは 2つ目の方法として、従来のポインターを使ったやり方で、オブジェクトを OBJECT DUPLICATE でオブジェクトを複製し、OBJECT SET DATA SOURCE でデータソースを変更することが可能でした。
4D 20 R10 では、OBJECT SET DATA SOURCE FORMULA と OBJECT Get data source formula という新しい強力なコマンドが追加され、フォームオブジェクトのデータソースとしてフォーミュラをバインドすることができます。さらに、LISTBOX SET PROPERTY コマンドを使用すると、カレントの項目・カレントの項目の位置・選択された項目などの主要なリストボックスのプロパティにフォーミュラを動的に割り当てることができます。
これにより、Form.xx やクラスのような式を利用して、よりモダンで柔軟で読みやすいアプローチへの道が開かれます。
データソースプロパティを操作する新しいコマンド
データソースプロパティを変更する新しいコマンドが2つ追加されました:
OBJECT SET DATA SOURCE FORMULA ( {* ;} object ; formula)
OBJECT Get data source formula ( {* ;} object) : formula
例題 1: フォーミュラの編集
フォームに “myInput” というテキスト入力があり、そのデータソースに “Form.myText” というフォーミュラをバインドしたいとします。
$myFormula:=Formula(Form.myText)
OBJECT SET DATA SOURCE FORMULA(*; "myInput"; $myFormula)
例題 2: フォーミュラの取得
“myInput” という名前のテキスト入力のようなフォームオブジェクトに関連付けられたフォーミュラを取得するには、次のように書きます:
$formula:=OBJECT Get data source formula(*; "myInput")
これらの新しいコマンドは、動的に設定できる汎用的で再利用可能なフォームテンプレートの作成を容易にします。
リストボックスの拡張機能
カレントの項目・カレントの項目の位置・選択された項目のプロパティは、LISTBOX Get property と LISTBOX SET PROPERTY コマンドと以下の定数を使用することでアクセスできます:
- lk current item expression
- lk current item pos expression
- lk selected items expression
例
LISTBOX SET PROPERTY(*; "myListBox"; lk selected items expression; "Form.selectedItems")
まとめ
OBJECT SET / GET DATA SOURCE FORMULA と新しい listbox プロパティ定数により、4D は動的インターフェースを構築するための、新しくエレガントでパワフルな方法を提供します。
フォーミュラとオブジェクト指向プログラミングを取り入れることで、より適応性が高く、保守性が高く、読みやすいフォームを作成できるようになりました。
