メインコンテンツまでスキップ
バージョン: 開発中

FORM LOAD

FORM LOAD ( {aTable ;} form {; formData}{; *} )

引数説明
aTableテーブルロードするテーブルフォーム(省略時はプロジェクトフォームをロード)
formText, Object(プロジェクトまたはテーブル)フォーム名(文字列)、 あるいはフォームを定義した.jsonファイルへのPOSIXパス(文字列)、 あるいは開くフォームを定義したオブジェクト
formDataObjectフォームに関連づけるデータ
*演算子指定時、コマンドはコンポーネントから実行した場合にホストのデータベースコマンドが適応されます(それ以外の場合は無視されます)。

このコマンドはスレッドセーフではないので、プリエンプティブなコードでは使用できません。

説明

The FORM LOAD command is used to load the form in memory in the current process along with formData (optional) in order to print its data or parse its contents.FORM LOAD コマンドを使用してデータ印刷・コンテンツ解析のために form 引数で指定したフォームをカレントプロセスにおいてformData 引数のデータ(オプション)とともにメモリーにロードします。 1つのプロセスにつきカレントフォームは1つしか指定できません。

form 引数には、以下のいづれかを渡すことができます:

  • フォーム名
  • 使用するフォームの詳細を格納している有効な.josn ファイルへのパス(POSIX シンタックス)
  • フォームの詳細を格納しているオブジェクト

コマンドがコンポーネントから呼び出された場合、デフォルトではコマンドはコンポーネントのフォームをロードします。 * 引数を渡した場合、メソッドはホストデータベースのフォームをロードします。

formData

オプションとして、form 引数のフォームに、formData オブジェクトを使用してパラメーターを渡すことができます。あるいは、フォームにユーザークラスを割り当てる ことをしていた場合に4D によって自動的にインスタンス化されるフォームクラスオブジェクトを使うこともできます。 form data オブジェクト内のプロパティであればどれもForm コマンドを使用することでフォームコンテキストから利用可能になります。 formData オブジェクトは、On Load form eventフォームイベント内で利用可能です。

form data オブジェクトについての詳細な情報については、DIALOG コマンドを参照してください。

データの印刷

このコマンドを実行するためには、OPEN PRINTING JOB コマンドを使って印刷ジョブを事前に開いておく必要があります。 OPEN PRINTING JOBFORM UNLOAD を暗示的に呼び出すため、このコンテキストでは改めてFORM LOAD コマンドを使用する必要があります。 ロードされたform はカレントの印刷フォームとなります。 Print object コマンドを含む、すべてのオブジェクト管理コマンドはこのフォームに対して動作します。

FORM LOAD コマンドを呼び出す前に、別の印刷フォームがロードされていた場合には、そのフォームは閉じられ、form に置き換えられます。 ひとつの印刷セッション内で複数のプロジェクトフォームを開いたり閉じたりすることができます。 FORM LOAD で印刷フォームを変更してもページブレークは生成されません。 ページブレークは開発者が別途指定する必要があります。

プロジェクトフォーム (またはフォームのオブジェクトメソッド) を開く際には、On Load form event フォームイベントのみが実行されます。 他のフォームイベントは無視されます。 印刷の終わりにはOn Unload form event フォームイベントが実行されます。

フォームのグラフィックな一貫性を保持するために、プラットフォームにかかわらず"印刷"アピアランスプロパティを適用することをお勧めします。

CLOSE PRINTING JOB コマンドが呼び出されると、カレント印刷フォームは自動で閉じられます。

フォームコンテンツの解析

データ解析のためにスクリーン外にフォームをロードするには、 印刷ジョブ外のコンテキストでFORM LOAD を呼び出します。 この場合、フォームイベントは実行されません。

FORM LOADFORM GET OBJECTSOBJECT Get type コマンドと併せて使用して、フォームコンテンツを任意に処理することができます。 その後、フォームをメモリから解放するためにFORM UNLOAD コマンドを呼び出す必要があります。

いずれの場合においても、スクリーン上のフォームはロードされたままであるため(FORM LOAD コマンドに影響されない)、FORM UNLOADコマンドを呼び出した後にこれらをリロードする必要はありません。

注: メモリオーバーフローのリスクを回避するため、スクリーン外でフォームを使用した場合にはFORM UNLOAD を必ずコールしてください。

例題 1

印刷ジョブにプロジェクトフォームを呼び出す場合:

 OPEN PRINTING JOB
 FORM LOAD("print_form")
// イベントとオブジェクトメソッドの実行

例題 2

印刷ジョブにテーブルフォームを呼び出す場合:

 OPEN PRINTING JOB
 FORM LOAD([People];"print_form")
  // イベントとオブジェクトメソッドの実行

例題 3

フォームの内容を解析してテキスト入力エリアに何らかの処理をする場合:

 FORM LOAD([People];"my_form")
  // イベントやメソッドを実行することなくフォームを選択
 FORM GET OBJECTS(arrObjNames;arrObjPtrs;arrPages;*)
 For($i;1;Size of array(arrObjNames))
    If(OBJECT Get type(*;arrObjNames{$i})=Object type text input)
  //… 処理
    End if
 End for
 FORM UNLOAD // フォームをunloadするのを忘れないこと

例題 4

以下の例では、JSON ファイルで定義されたフォーム上にあるオブジェクトの数を返します:

 ARRAY TEXT(objectsArray;0) // フォームのオブジェクトを並べ替えて入れる配列
 ARRAY POINTER(variablesArray;0)
 ARRAY INTEGER(pagesArray;0)
 
 FORM LOAD("/RESOURCES/OutputForm.json") // フォームを読み込む
 FORM GET OBJECTS(objectsArray;variablesArray;pagesArray;Form all pages+Form inherited)
 
 ALERT("The form contains "+String(size of array(objectsArray))+" objects") // オブジェクトの数を返す

結果は以下のように表示されます:

例題 5

リストボックスを格納しているフォームを印刷したい場合を考えます。 on load イベント中に、リストボックスのコンテンツを変更したいとします。

1. 印刷メソッド内に、以下のように書きます:

 var $formData : Object
 var $over : Boolean
 var $full : Boolean
 
 OPEN PRINTING JOB
 $formData:=New object
 $formData.LBcollection:=New collection()
 ... // コレクションにデータを入れます
 
 FORM LOAD("GlobalForm";$formData) // $formData 経由でコレクションをフォームに渡します
 $over:=False
 Repeat
    $full:=Print object(*;"LB") // この"LB" はリストボックスで、Form.LBcollectionをデータソースとして持つとします。
    LISTBOX GET PRINT INFORMATION(*;"LB";lk printing is over;$over)
    If(Not($over))
       PAGE BREAK
    End if
 Until($over)
 FORM UNLOAD
 CLOSE PRINTING JOB

2. フォームメソッド内には以下のように書きます:

 var $o : Object
 Case of
    :(Form event code=On Load)
       For each($o;Form.LBcollection) // ここでForm.LBcollection は利用可能です
          $o.reference:=Uppercase($o.reference)
       End for each
 End case

参照

Current form name
FORM UNLOAD
LISTBOX GET OBJECTS
OBJECT Get type
Print object