4D v16 R5 では、DIALOG コマンドが大幅に改良され、オブジェクト型の新しいパラメーター “formData” を渡すことができるようになりました。この新機能が 4Dデベロッパーの皆様に好評であることを聞いて、とても嬉しく思います。
4D v20 では、もう 2つのコマンドがアップグレードされました: Print form と FORM LOAD です! そのメリットは、同じように大きいでしょう。引数として渡されたオブジェクトは、印刷されるフォームや、メモリにロードされるフォームで直接利用することができます。
コードサンプル
Print form
PRINT FORM コマンドは、最近の改良により、4Dデベロッパーに広く使用されています。
PRINT FORM コマンドには、呼び出したフォームにおいて Form 関数でアクセスできるオブジェクト型の任意パラメーターを渡すことができるようになりました。具体的には、フォームオブジェクトの式として Form 関数を直接使用できるほか (Form.firstname、Form.lastname など)、on printing detail イベントが実行されたときにも使用できます。
$formData:=New object()
$formData.lastname:="Smith"
$formData.firstname:="john"
$formData.request:="I need more COFFEE"
$h:=Print form("Print_obj"; $formData; Form detail)
呼び出している “Print_obj” フォームの例です:
FORM LOAD
同じ原理で、FORM LOAD コマンドは、オブジェクト引数を受け取ることができるようになりました。この任意の引数が渡された場合、オブジェクトの中身は、on load イベントの実行中に利用したり変更したりすることができます (on load イベント以外は無視されます。また、OPEN PRINTING JOB / CLOSE PRINTING JOB のシーケンス内でのみ使用可)。
OPEN PRINTING JOB
$formData.LBcollection:=New collection()
$formData.LBcollection.push(New object("reference"; "alpha"; "quantity"; 3; "total"; 120.99))
$formData.LBcollection.push(New object("reference"; "bravo"; "quantity"; 2; "total"; 599.99))
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)
CLOSE PRINTING JOB
…この例題の “GlobalForm” は、データソースとして Form.LBcollection を使用するリストボックス “LB” を含んでいます:
まとめ
この新しいプログラミングの可能性は、時間を節約し、コードを “軽く” します。
4Dフォーラムで気軽にフィードバックをシェアしてください。ご意見をお待ちしています!