4Dのバージョン2004から、デベロッパはカスタマイズされたフォームを作成したり修正したりする機能を、ユーザに提供することができます。これらの "ユーザフォーム" はその他の4Dのフォームのように使用することが可能です。
ユーザフォームはデベロッパによって作成された標準的な4Dフォーム ("ソース" または"デベロッパ" フォームと呼びます) をベースとして、フォームエディタでユーザによる編集可プロパティが適用されているフォームです。(EDIT FORMコマンドで呼び出される) 簡略化されたフォームエディタを用いて、ユーザはフォームの外観を修正したり、(定義済みオブジェクトのライブラリを使用して) グラフィックオブジェクトを追加したり、エレメントを隠したりするなどの編集ができます。デベロッパは許可するアクションをコントロールできます。
ユーザフォームは2つの異なる方法で使用可能 です:
- ユーザはEDIT FORM コマンドを用いて "ソース" フォームを修正し、独自のニーズへ適応させます。ユーザフォームはローカルに保持され、オリジナルフォームの代わりに自動的に使用されます。
この動作はデベロッパが設定したダイアログボックスのパラメタに対し、例えば顧客のサイトでフォームに会社のロゴを追加したり、不要なフィールドを隠したりするなどのニーズにこたえるものです。
- "ソース" ファイルは基本テンプレートとして機能します。ユーザはCREATE USER FORMコマンドを使用してこのテンプレートを自由に複製したり、必要なだけコピーを作成したりすることができます。EDIT FORMコマンドを用いてそれぞれのコピーを自由に設定 (内容、名前など) することも可能です。しかし、それぞれのユーザフォームの名前はユニークでなければなりません。そしてFORM SET INPUTコマンドとFORM SET OUTPUTコマンドを用いて、各プロセスで使用するユーザフォームを指定します。
この動作によりデベロッパはユーザに対してカスタマイズされたレポートなどを作成することができます。
ユーザフォームのメカニズムは、4Dのローカルモード、4Dサーバおよび4Dデスクトップにおいて、コンパイルされたデータベースとインタープリタデータベースの両方で機能します。クライアント/サーバモードでは、修正されたユーザフォームはすべてのマシンで利用可能です。
4Dはフォームに加えられた変更を自動的に処理します。フォームがユーザによる編集可として設定されると、デザインモードではフォームがロックされます。フォームオブジェクトへのアクセスを可能にするために、デベロッパはロック解除するアイコンを必ずクリックしなければなりません。この作業により関連するユーザフォームは無効となり、再作成しなければなりません。"ソース" フォームが削除されると、関連するユーザフォームも同じく削除されます。
ユーザフォームは、メインストラクチャファイル (.4DB/.4DC) と同階層に、.4DA 拡張子の別ファイルとして格納されます。このファイルは "ユーザストラクチャファイル" と呼ばれます。このファイルの動作は透過的です。ユーザフォームが存在すると、4Dはそれを使用します (LIST USER FORMS コマンドにより、いつでも有効なユーザフォームを見つけることが可能です) 。またFORM SET INPUTコマンドとFORM SET OUTPUTコマンドはこのファイルの中でユーザフォームを探します。ユーザフォームが無効な場合、そのフォームは削除され、4Dはソースフォームをデフォルトで使用します。
クライアント/サーバでは、メインストラクチャファイルと同じルールに従って、.4DA ファイルがクライアントマシンに配布されます。
この原理により、デベロッパによってストラクチャファイルが更新された場合でも、ユーザフォームを利用可能な状態に維持することができます。
ユーザフォーム管理コマンドを使用する際、特定なエラーコードが返される場合があります。-9750 から -9759までのコードについてはデータベースエンジンエラー (-10600 -> 4004)に記述されています。
ユーザフォームメカニズムはプロジェクトフォームとの互換性はありません。従って、"ユーザフォーム" テーマのコマンドをプロジェクトフォームに対して使用することはできません。