4D View Pro では、データをロードし、テンプレートを作成するための新しい方法、データコンテキスト が利用できるようになりました。データコンテキストを設定すると、ドキュメントにプレースホルダーを設置し、そこにデータを差し込めるようになります。
VP SET CUSTOM FUNCTION であらかじめ許可しなくても、ほんの数行のコードで、オブジェクトやコレクションを表示することができます!
では、その詳細を見ていきましょう。
HDI: 4D View Pro: データコンテキストの利用
ドキュメントにプレースホルダーを設置する
まず、4D View Pro ドキュメントを作成し、オブジェクト属性に紐づけます。たとえば、Firstname と Lastname という 2つの属性を持つオブジェクトを使用したい場合、VP SET BINDING PATH コマンドで対象セルを指定し、プレースホルダーを 2つ作成できます:
VP SET BINDING PATH(VP Cell("ViewProArea"; 0; 0); "Firstname")
VP SET BINDING PATH(VP Cell("ViewProArea"; 0; 1); "Lastname")
データコンテキストがまだ定義されていないため、シートには値が表示されません。セルが正しくバインドされていることを確認するには、リボンインターフェースの “データ” タブで “シートバインディング” ボタンをクリックします。属性の名前が大括弧の間に表示されます:
データコンテキスト
テンプレートの準備ができましたので、次は VP SET DATA CONTEXT を使い、オブジェクトを渡してデータコンテキストを設定します:
$object:=New object
$object.Firstname:="John"
$object.Lastname:="Smith"
VP SET DATA CONTEXT("ViewProArea"; $object)
このように、テンプレートは自動的に更新されます:
もちろん、ユーザーがデータを修正することも可能です:
編集されたオブジェクトを取得するには、VP Get data context を使ってデータコンテキストのオブジェクトを取得することができます:
$object:=VP Get data context("ViewProArea")
//$object={Firstname:Judith,Lastname:Smith}
シートSへのデータ差し込み
データコンテキストにコレクションを渡すと、このコレクションは自動的にシートにバインドされます。VP SET DATA CONTEXT コマンドの autoGenerateColumns オプションが true に設定されている場合、コレクションは自動的にシートに表示されます。
たとえば、データベーステーブルのレコードをすべて表示するには、次のように書くことができます:
$people:=ds.People.all().toCollection()
VP SET DATA CONTEXT("ViewProArea"; $people; New object("autoGenerateColumns"; True)
結果:
列と行の数は自動的に計算され、列の名前はテーブルのフィールド名となります。
autoGenerateColumns が true に設定されていない場合、データは自動表示されません。
上記の HDI で、これらのコマンドの動作を確認してみてください。また、詳細についてはドキュメントを参照ください。