3ステップでできる!テーブルからダイナミックフォームを作成する方法

Deeplからの自動翻訳

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}.

Output Form Template

ステップ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.interobjectNameheader :="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

Output Form With Column

入力フォーム

同じ原理が入力フォームにも適用できます。選択された各フィールドに静的テキストと入力オブジェクトを追加するだけです。

コード例は、サンプルデータベースにあります。

楽しくコーディングしましょう

Vanessa Talbot
- プロダクトオーナー - Vanessa Talbotは、2014年6月に4Dプログラムチームに参加しました。プロダクトオーナーとして、彼女はユーザーストーリー(ユーザーが期待する新機能とその使用法)を書き、それを具体的な機能仕様に変換する役割を担っています。また彼女の役割は、実装された機能が顧客のニーズを満たしているかどうかを確認することでもあります。入社以来、4Dにおける主要機能の定義に関わってきました。プリエンプティブ/マルチスレッドの新機能の大部分と、非常に複雑なテーマである組み込みアプリケーションの新アーキテクチャに取り組んできました。VanessaはTelecom Saint-Etienneで学位を取得後、Criminal Research Institute でオーディオビジュアル部門の開発者としてキャリアをスタートさせました。また、メディアや医療の分野でも、技術サポートやプロダクションの分野で働いてきました。