データベースには、タイプやカテゴリーを表すいくつかのテーブルがあると想像してください。これらのテーブルは非常にシンプルで、多くの場合、識別子とテキストフィールドだけです。デモのために、靴の管理データベースだとしましょう。商品を認定するためには、その種類、色、柄、素材、季節などを定義する必要があります。
これらのテーブルをそれぞれリストフォームと入力フォームと関連するメソッドで管理するのは面倒です。この場合、重複を避け、メンテナンスを簡略化するために、汎用フォームの利用が不可欠となります。
そこで便利なのが、ダイナミックフォームと JSONポインタなのです
このブログ記事では、汎用的なフォームを構築するための一つの可能性を見ていきます。
このデータベースでは、下図のように5つの異なるダイアログを開くことができます。しかし、デザインモードに戻ると、4Dエクスプローラーにフォームが見当たらないことに気づきます…。
では、これらのフォームはどのように作成されているのでしょうか?
以下に説明する3つのステップで行います。
1.まず、リストフォームを作成し、JSONファイルに保存します。テーブルやフィールドの具体的な情報は、JSONのポインターを使用します。例えば、ウィンドウのタイトルにテーブル名を書き込むとします。ダイナミック・フォームでは、入力するだけでよい。
"windowTitle": { "$ref": "#/info/table" }
別の例では、リストボックスに、カラムのデータソースを定義したいので、次のように記述します。
"dataSource": { "$ref": "#/info/field1" }
2.そして、実行時に、ユーザーがメニュー項目をクリックすると、ユーザーが選択したフィールドを持つテーブルを定義するオブジェクトを注入します。
C_OBJECT($o;$info)
$info :=New object("table";$table; "field1";"["+$table+"]"+"ID"; "field2";"["+$table+"]"+"Name")
$o :=JSON Parse(Document to text("RESOURCES/Form/CategoryOutputForm.json")
$o .
info:=$info
3.3. フォームを開くには、特別なことは何も必要ありません。 Open form windowコマンドを使うだけです。ただひとつ覚えておいてほしいのは、4DがJSONポインタを解決して Open form windowコマンドを呼び出すときに、4DがJSONポインタを解決することです。
$ref:=Open form window($o;Plain form window)
入力フォームでも同じことができます。そして、今度は自分で試してみてください