4D Write Pro ドキュメントには、データベースに依存したデータや計算を返すフォーミュラが度々含まれます。コンテキストを使用することで、これらのデータのドキュメントへの関連付けが簡単にできるようになりました。
このブログ記事では、4D Write Pro ドキュメントと ORDA で取得したデータの組み合わせにより、コードが明確に、コードメンテナンスが容易になることを紹介します。
HDI: 4D Write Pro: データコンテキストの利用
4D Write Proとデータ
手紙、キャンペーンメール、カタログ作成、請求書印刷など、表示・印刷されるデータは常にデータベースから取得されます。ORDA のおかげで、データへのアクセスはますます効率的になり、コンテキスト という新しい概念によって、ドキュメント内で情報を効率的に活用することができます。
コンテキストとは?
コンテキストは、エンティティ・エンティティセレクション・または必要に応じた属性を持つオブジェクトです。一度作成され、ドキュメントと関連付けられたコンテキストは、This 関数を介してドキュメント内で直接使用できます。この関数については、もうお馴染みですね。
サンプルケース: DMキャンペーンの送信
たとえば、Peopleデータクラスがあって、その一部の人にダイレクトメールを送りたい場合を考えます。まず、手紙のテンプレートを作成します。次に、そのテンプレートに各人のデータ (名前、住所など) を挿入します。これはよくある手順ですが、コンテキストが作成されたあと、これらの情報をどのように挿入するかを見ていきましょう。
For Each ループ
テンプレートを出力する前に、セレクションの各エンティティをテンプレートに関連付けます。
それで完了です!
For each ($person; $es_people)
WP SET DATA CONTEXT($template; $person)
WP PRINT($template)
End for each
このモデルに含まれているもの
$person のコンテキストは、モデル内で This.data 式でアクセスできます。
$person のエンティティに lastname 属性がある場合、この属性は This.data.lastname を介してアクセス可能になります。
したがって、テンプレートには、次のような式が含まれることになります:
PeopleSelectionクラスの関数
コードの美しさのため、テンプレートを引数として受け取り、エンティティセレクション内の各エンティティのデータを差し込んで印刷するクラス関数を作成することができます:
Class extends EntitySelection
Function mailing($template : Object)
For each ($people; This)
WP SET DATA CONTEXT($template; $people)
WP PRINT($template)
End for each
この関数の呼び出しは、次のようにおこなわれます:
// エンティティセレクションを作成します
$es:=ds.People.all()
// 4D Write Pro テンプレートを印刷します
$es.mailing($template)