開発者として、私たちはしばしば複雑で高度な 4D Write Pro ドキュメントを作成します。データを表示するための表組みが必要なとき、その行列の内訳はあらかじめ明確ではないかもしれません。毎回手作業で、表組みにデータを入れていくのは手間です。そこで、データコンテキスト を使って、ORDA とオブジェクト指向開発の手法を 4D Write Pro ドキュメントに取り入れました。
具体的には、4D Write Pro の表組みに対して、”データソース” を定義することが可能になりました。この “データソース” (エンティティセレクションまたはコレクション) は、表組みの行を自動で生成します。
詳しく見ていきましょう!
HDI: 4D Write Pro: 表組みとデータソースの関連付け
百聞は一見にしかず
この機能を活用すると、下のようなドキュメントを作成することができます:
完成後は PDF や Docx などの形式にエクスポートできるほか、印刷・編集などが可能です。それでは、順を追って説明します。
表組み、ヘッダー行、”テンプレート”行、その他の行
4D Write Pro ドキュメントの表組みは、ヘッダー行を1行以上持つ ことができるようになりました。ヘッダーに続く行は テンプレート行 とみなされ、データソースの要素を表示するために繰り返されます。その後の行は (あれば) 自動的に下に配置され、データソースに基づいた追加情報も表示することができます。上図のレポートを生成するのに使用された元のドキュメントは、次のようなものです:
一番上のフレームには、データコンテキストによって提供される情報が差し込まれます。この概念に馴染みがない方は、まず このブログ記事 を読むことを強くお勧めします。では、表組みそのものがどのように定義されているかを見てみましょう。
上の表組みは 3つの部分で構成されています (詳細は後述します)。
- 最初の行はヘッダーとして定義されています。
- 2番目の行は テンプレート行 です。
- その後の行は、表組みのデータソースおよび計算に基づいた追加情報を格納しています。
表組みへのデータソースの関連付け
その名前が示すように、データソースは表組みにデータを提供します。したがって、このデータソースは、エンティティセレクションまたはコレクションを返すフォーミュラである必要があります。そうでない場合、フォーミュラの結果は表組み内で利用できますが (後述参照)、テンプレート行は使用されません。
関連付けの方法
#1: ユーザーインターフェースでデータソースを定義する
フォーミュラを直接表組みに関連付けることができるよう、ユーザーインターフェースが変更されました。
“Company” テーブルが “employees” という名前のリレーションで “Employee” テーブルと繋がっている場合を考えてみましょう。ドキュメント内のコンテキストから Companyエンティティにアクセスできるのであれば、”employees” を表組みのデータソースに使えます。
この表組みに関連づけられたフォーミュラは、This.data.company.employees です。
… ここの This.data (コンテキスト) は、プログラミングによって提供します:
$context:=New object("company";$company) // $company は Company のエンティティです
WP SET DATA CONTEXT(WParea;$context)
#2: プログラミングでデータソースを定義する
データソースは、1行のコードで設定することができます。
WP SET ATTRIBUTES コマンドで定義できる新しい 属性 (wk datasource) が表組みで利用可能です:
WP SET ATTRIBUTES($table;wk datasource;Formula(This.data.company.employees))
行の定義
表組みのデータソースが定義できたら、次は行の番です。
データソースの項目に基づく This キーワードを使えば、新しい属性を利用することができます。
テンプレート行 では、This.item.xxx のように定義します。xxx の部分には、This.item.name や This.item.age のようにアクセスしたいカレントエンティティの属性を指定します。また、セレクション (あるいはコレクション) の要素のインデックスには、This.itemIndex でアクセスします。
WP COMPUTE FORMULAS によってフォーミュラの評価がおこなわれると、冒頭で見たような表が完成します。
その他のテーブル属性
その他のいくつかの属性は、表組みの任意の場所 (通常はその後の行) で使用できます。
This.table.datasource は、表組みに関連付けられたフォーミュラを返します。しかしおそらく、このフォーミュラの 評価済み結果 (通常はコレクションまたはエンティティセレクション) を値とする This.tableData を使用する方がよいでしょう。
これにより、処理が最適化され、ドキュメントの一貫性が確保されます。
この This.tableData 属性に基づいて、合計 や 平均、最小値 や 最大値 を計算する場合、次のように簡単におこなうことができます:
This.tableData.min("age")
This.tableData.average("salary")
さらなる追加属性
どのテーブルでも (データソースが定義されていなくても) 使用可能な、新しい属性が追加されました。この属性によって、次のものにアクセスすることができます:
- This.table でテーブルそのものに
- This.row で現在の行に
- This.rowIndex で現在の行番号に
4行のコードでレポート印刷が可能
このようなドキュメントを作成すると、テンプレートとして使用することができます。
For each ($company; $companies)
WP SET DATA CONTEXT($template; New object("company"; $company))
WP PRINT($template) // (デフォルトで、式は印刷前に再評価されます)
End for each
レポートやリストなどのカスタマイズ
データソースの値でテーブルが埋められたテンプレートをさらに利用することも可能です。行をハイライトしたり、色やスタイルを変更したり、空の行を削除したり追加したりすることができます。
この場合、まずドキュメントの 4D式を固定化 (計算をフリーズ) して、差し込まれたデータをすべて普通のテキストや行と同等にするのが最もよい方法です。これは必須ではありませんが、フォーミュラが再評価されると、変更がすべて失われてしまいます。
もし、印刷・エクスポートだけでなく、ドキュメントを保存する必要がある場合には、テンプレートそのものを失わないよう、コピーを使用するとよいでしょう。
MyWorkingDocument :=WP New($template))
まとめ
追加された新機能により、テンプレートに基づいてドキュメントを作成することができます。その内容は、ORDA をベースに最小限のプログラミングで生成可能です。
これらのドキュメントは、PDF、Docx、電子メールとしてエクスポートすることができます。また、リストフォームと PRINT SELECTION の改良された代替機能としても利用できます。
請求書、カタログ、在庫管理など、ドキュメントの自動作成が非常に容易になりました。
詳細はドキュメントセンター (ここ と ここ) を参照ください。そして、いつものように 4Dフォーラム でお気軽にお問い合わせください。