---
title: "Вложенный Mail Merge с регионами в C++"
---


В некоторых случаях вам может потребоваться использовать вложенные Mail Merge области. Вложенное слияние - это функция, которая позволяет объединять иерархические данные из вашего источника данных в шаблон слияния для упрощения заполнения вашего документа. По сути, иерархические данные представлены в виде набора элементов данных, а иерархические связи описывают, как элементы данных связаны друг с другом (один элемент данных является родительским для другого).

Aspose.Words позволяет выполнить операцию Mail Merge с вложенными областями. Вы можете использовать эту функцию, если у вас есть источник данных, организованный в виде древовидной структуры, и вы хотите выполнить операцию Mail Merge для заполнения шаблона иерархическими данными.

{{% alert color="primary" %}}

Вложенный Mail Merge имеет значение только при выполнении Mail Merge с регионами.

{{% /alert %}}

## Что такое вложенный Mail Merge

Область Mail Merge называется вложенной, если у вас есть две или более области mail merge, одна из которых находится внутри другой в иерархической форме. Обратите внимание, что каждая область содержит данные из одной таблицы.

Наиболее распространенным примером вложенного Mail Merge является заказ, содержащий несколько элементов, в котором вам нужно связать множество таблиц данных и представить информацию в виде шаблона.

На рисунке ниже показаны две вложенные области, где область *Order* Mail Merge является родительской для области *Item* mail merge.

<img src="nested-mail-merge-with-regions-1.png" alt="nested_mail_merge_with_regions" style="width:650px"/>

## Как обработать Mail Merge с вложенными областями

Данные, которые будут объединены в шаблон, могут быть получены из различных источников, в основном из реляционных баз данных или документов XML. В нашем примере мы будем использовать [SQLite](https://www.sqlite.org/index.html) база данных для хранения наших данных и загрузки их с помощью пользовательской реализации источника данных.

На рисунке ниже показано, как данные из таблицы *Order*, передаваемые во вложенные области слияния, будут связаны с таблицей *Item*, а также выходные данные, сгенерированные во время операции слияния.

<img src="nested-mail-merge-with-regions-2.png" alt="mail_merge_with_nested_regions" style="width:650px"/>

Как вы можете видеть из выходного документа, каждый заказ из таблицы **Order** вставляется в шаблон объединения со всеми связанными с заказом позициями из таблицы **Item**. Следующий заказ будет вставляться вместе со своими позициями до тех пор, пока не будут перечислены все заказы и позиции. Порядок вложения Mail Merge регионов в шаблон должен соответствовать соотношениям данных между таблицами в источнике данных.

## Как создать связи с данными из пользовательского источника данных

Реализуйте интерфейс [IMailMergeDataSource](https://reference.aspose.com/words/cpp/aspose.words.mailmerging/imailmergedatasource/) для создания связей в структуре "родитель-потомок" вашего пользовательского источника данных. Используйте метод [GetChildDataSource](https://reference.aspose.com/words/cpp/aspose.words.mailmerging/imailmergedatasource/getchilddatasource/), чтобы вернуть соответствующие дочерние данные текущей родительской записи.

В следующем примере кода показано, как сгенерировать счет-фактуру, используя вложенные Mail Merge области из [SQLite](https://www.sqlite.org/index.html) база данных с [SQLiteCpp](https://github.com/SRombauts/SQLiteCpp):

{{< gist "aspose-words-gists" "3435df005db9907ec9ba3a6b777ae6fb" "nested-mail-merge.h" >}}
