4D v17は、4D v16 R6で初めて導入されたダイナミックフォームを搭載しており、エンドユーザーのニーズに完全に適応したフォームを動的に構築 するパワフルで柔軟な方法です。 ダイナミックフォームの可能性は計り知れません。この記事では、この新しいフォームで何ができるのか、具体的な例を見ていきましょう。
まず最初にあなたのデータベースでは、すべてのテーブルに対して入出力フォームが必要です。さらに言えば、これらのフォームをテンプレートから動的に作成するのはどうでしょうか。オブジェクト記法を使えば、オブジェクトを操作するのはとても簡単です。入力テンプレート、出力テンプレート、そしてオブジェクトテンプレートを定義するだけです。そして、実行時に、選択されたテーブルとフィールドに従って、フォームを生成することができます。
以下のサンプルでは、2つの出力フォームテンプレートと2つの入力フォームテンプレート、およびテーブルとフィールドを追加するコードサンプルを提供します。
出力フォームの例
ステップ1
ボタンと空のリストボックスだけを含む出力フォームのテンプレートを作成します。この例では、データベースの「resources」フォルダー内の「template」フォルダーに テンプレートを保存します。
$pathname:=Get 4D folder(Current resources folder)+"template "+Folder separator+"outputTemplate.json"
$oFormTemplate :=JSON Parse(Document to text($pathname))
ステップ2
次に、コードで、フォームのタイトル、名前、リストボックスのソーステーブルを追加します。
$oFormTemp:=OB Copy($oFormTemplate)
リストボックスのソーステーブルを追加します。
$oFormTemp .windowTitle:=arrTableName{arrTableName}
$oFormTemp .name:="ListForm: "+arrTableName{arrTableName}
$oFormTemp .pages[objects.myListBox.table:=arrTableName{arrTableName}.
ステップ3
次に、選択されたフィールドごとにリストボックスのカラムを挿入します。そして、カラムオブジェクトの名前、カラムソース、カラムヘッダーの名前を定義します。
$oFormTemp.pages $oColumn[objects.myListBox.columns:=New collection()
C_LONGINT ($numItem)
$numItem :=0
For ($i;Size of array(arrFieldName))
If (arrFieldDisplay{$i}=True)
C_OBJECT(
$oColumn)
// Create a list box column
$oColumn:=OB Copy($oObjectTemplate...colListbox)
xml-ph-0035@deepl.inter
objectNameheader :="col "+arrFieldName{$i}
$oColumn .dataSource:="["+arrTableName{arrTableName}+"]"+arrFieldName{$i}
$oColumn :=New object("text";arrFieldLabel{$i})
// Insert the column in form
$oFormTemp.pages[1].objects.myListBox.columns[$numItem]:=$oColumn
$numItem :=$numItem+1
End if
End for
入力フォーム
同じ原理が入力フォームにも適用できます。選択された各フィールドに静的テキストと入力オブジェクトを追加するだけです。
コード例は、サンプルデータベースにあります。
楽しくコーディングしましょう