領域を持つネストされたMail Merge
一部のシナリオでは、入れ子になったMail Mergeをリージョンで使用する必要がある場合があります。 ネストされたマージは、データソースの階層データをマージテンプレートにマージして、ドキュメントに簡単に入力できるようにする機能です。 基本的に、階層データは一連のデータ項目として表され、階層関係はデータ項目が互いにどのように関連しているかを記述します(データの1つの項目は別の
Aspose.Words入れ子になった領域を使用してMail Merge操作を実行できます。 この機能は、ツリーのような構造に編成されたデータソースがあり、Mail Merge操作を実行してテンプレートに階層データを移入する場合に使用できます。
ネストされたMail Mergeとは何ですか
Mail Merge領域は、2つ以上のMail Merge領域があり、そのうちの1つが階層的な形式で他の領域の中にある場合、ネストと呼ばれます。 各領域には1つのテーブルからのデータが含まれていることに注意してください。
ネストされたMail Mergeの最も一般的な例は、複数のデータテーブルをリンクしてテンプレートに情報を提示する必要がある複数のアイテムを含む注文です。
下の図は、OrderMail Merge領域がItemMail Merge領域の親である2つのネストされた領域を示しています。
ネストされた領域でMail Mergeを処理する方法
テンプレートにマージされるデータは、主にリレーショナルデータベースやXMLドキュメントなど、さまざまなソースから取得できます。 この例では、XMLファイルを使用してデータを保存し、DataSetに直接ロードします。
Aspose.Wordsでは、DataSetで指定されたデータ関係を使用して、ネストされた領域でMail Mergeを処理できます。 DataSetオブジェクトがXMLをロードするとき、指定されたスキーマを使用するか、XML自体の構造から推測してこれを実現します。DataSetオブジェクトはXMLをロードす この構造から、必要に応じてテーブル間のリレーションシップを作成します。
下の画像は、ネストされたマージ領域に渡されたOrderテーブルからのデータがItemテーブルにリンクされる方法と、マージ操作中に生成された出力を示しています。
出力文書からわかるように、Orderテーブルからの各注文は、Itemテーブルからのすべての注文の関連項目とマージテンプレートに挿入されます。 次の注文は、すべての注文とアイテムが一覧表示されるまで、そのアイテムと一緒に挿入されます。 テンプレート内のリージョンを使用してMail Mergeをネストする順序は、データソース内のテーブル間のデータリレーションシップと一致する必要があります。
次のコード例は、地域でネストされたMail Mergeを使用して請求書を生成する方法を示しています:
この例のサンプルファイルは、次の場所からダウンロードできます Aspose.Words GitHub.
データ関係の設定の実装は、以下から手動で確認できます Aspose.Words Github.
ネストされたMail Mergeにリージョンを持つデータ関係を設定する方法
入れ子になったMail Mergeをリージョンで正しく実行するには、親子構造内のすべてのデータリレーションシップを設定する必要があります。 この重要なステップをスキップすると、領域でネストされたMail Mergeの実行に失敗する可能性があります。
ReadXmlメソッドを使用してXMLファイルからネストされたMail Mergeのデータを取得すると、XML文書の構造に従ってリレーションシップが自動的に作成されます。 ただし、正しい関係が作成されていることを確認する必要があります。
Mail Mergeが期待どおりに動作しない場合は、XMLファイルを再構築するか、DataSet内のDataTableオブジェクト間の関係を明示的に作成する必要があります。
関連するデータテーブルを持つDataSet
は、テーブル間の親子関係を表すためにDataRelationオブジェクトを使用します。
次のコード例は、DataRelation
オブジェクトを使用してcustomerのテーブルとorderのテーブルの間にDataRelation
を確立する方法を示しています:
カスタムデータソースからデータリレーションを作成する方法
カスタムデータソースの親子構造でリレーションシップを作成するには、IMailMergeDataSourceインターフェイスを実装します。 現在の親レコードの関連する子データを返すには、GetChildDataSourceメソッドを使用します。
次の例は、GetChildDataSourceを使用してデータ関係を作成する方法を示しています: