エンドユーザーのニーズに合わせてフォームを動的に構築 する機能が欲しいというご意見をいただきました。4D v16 R6 now は、ダイナミックフォームの新しい可能性を開きます。4D v16 R6 でプレビューとして提供されたダイナミックフォームでは、オブジェクトの中に プログラム的にフォームを構築 したり、 テキストファイルからフォームを読み込んだりすることが可能です。しかし、これは私たちがあなたのために作ったものの表面に過ぎません…
ダイナミックフォーム メリット
ダイナミック・フォームでは、フォームの内容全体(ページ、フォーム・オブジェクト、各オブジェクトのプロパティ)がテキスト形式(JSON形式)で記述されます。したがって、ダイナミックフォームは、オブジェクトに格納することも、ファイルに格納することも可能です。スムーズな移行のために、データベース内に両方のタイプのフォームを持つことが可能です。つまり、通常のフォーム(.4DBファイルにバイナリ形式で格納)と動的フォーム(ディスク上の任意の場所にテキストとして格納)の両方を持つことが可能です。
ダイナミックフォームは、コンパイルされたアプリケーションでもスタンドアロンアプリケーションでも使用できます。通常のバイナリフォームと比較した場合の新しいフォームの利点は、JSON ファイルを更新するだけで… アプリケーションを再コンパイルすることなく、フォームを変更できることです。これにより、デプロイメントに大きな柔軟性を持たせることができます。
ダイナミックフォームには、他にも大きな利点があります。すべてのフォームオブジェクトのフォントを変更したいという要望があったことはありませんか?ダイナミックフォームを使えば、テキストファイルの「検索と置換」を行うのと同じくらい簡単です。
例えば、あるフォームを同僚にメールで送りたい場合、データベース全体を送信するのではなく、テキストファイルを1つ送信するだけでよいのです。ダイナミックフォームでは、フォームを別のデータベースに移動することなく、別のアプリケーションで簡単に再利用することができます。
ダイナミックフォームをサポートするコマンド
今後、フォーム名を使用する全ての4Dコマンドは、オブジェクトまたはファイルパスとしてフォームの説明を受け入れるように拡張されました。
- DIALOG
- FORM SET INPUT
- FORM SET OUTPUT
- OBJECT SET SUBFORM
- OBJECT GET SUBFORM
- FORM LOAD
- Print form
- Current form name
“HELLO WORLD” の例
テキストファイルからのフォーム記述
テキストとボタンだけの簡単な例を見てみましょう。
このフォームのテキストによる説明は次のとおりです。
{ ... list of form parameters ... "pages": [ ... list of form pages ... null, ... page 0 ... { ... page 1 ... "objects": { ... list of form objects in page 1 ... "text": { "type": "text", "text": "Hello World !", "left": 20, "top": 20, "width": 200, "height": 20 }, "button": { "type": "button", "text": "OK", "left": 120, "top": 40, "width": 100, "height": 20 } }}] }
そして、このフォームをダイアログに読み込むコードは次のとおりです。
DIALOG ("/RESOURCES/helloWorld.json")
文法はJSONスキーマで定義されています。また、ドキュメントには、ダイナミック・フォームで使用できる属性の完全なリストと、各フォーム・オブジェクトがどの属性をサポートしているかの詳細が記載されています。を使用できることを忘れないでください。 JSON Validateコマンドを使って、フォームの記述に含まれる JSON が JSON スキーマに準拠しているかどうかを確認することができます。
オブジェクトの中にフォームを作る
さて、このフォームをコードだけで構築して、完全に動的なものにしてみましょう!
// Build form description
$label:= ("type"; "text"; "text"; "Hello World!";"top";20;"left";20;"width";200;"height";20) := ("type";"button";"text";"OK";"top";40;"left";120;"width";100;"height";20) New object
$buttonNew object
$page := ("objects"; ("label"; ; "button"; )) := ("pages"; ( ; ); "windowTitle"; "My first dynamic form"; "rightMargin";20; "bottomMargin";20)New objectNew object$label$button
$formNew objectNew collectionNull$page
// Load the form in a dialog
$w:= ( ) Open form window$form
(
DIALOG$form)
このように、ニーズに応じて柔軟にフォームを構築することができます。一度、ファイルやオブジェクトにフォームを書き込めば、あとは通常のフォームと同じように使うことができます。
フォームの編集は?
今のところ、テキストエディタを使う以外にダイナミックフォームを編集する仕組みはありません。しかし、これは長くは続きません。ダイナミックフォーム専用のフォームエディターが登場する予定です。いつになるのでしょうか?ご期待ください。