Вложенные Mail Merge с регионами
В некоторых случаях вам может потребоваться использовать вложенные Mail Merge области. Вложенное слияние - это функция, которая позволяет объединять иерархические данные из вашего источника данных в шаблон слияния для упрощения заполнения вашего документа. По сути, иерархические данные представлены в виде набора элементов данных, а иерархические связи описывают, как элементы данных связаны друг с другом (один элемент данных является родительским для другого).
Aspose.Words позволяет выполнять операцию Mail Merge с вложенными областями. Вы можете использовать эту функцию, если у вас есть источник данных, организованный в виде древовидной структуры, и вы хотите выполнить операцию Mail Merge для заполнения шаблона иерархическими данными.
Что такое вложенный Mail Merge
Область Mail Merge называется вложенной, если у вас есть две или более области Mail Merge, одна из которых находится внутри другой в иерархической форме. Обратите внимание, что каждая область содержит данные из одной таблицы.
Наиболее распространенным примером вложенного Mail Merge является заказ, содержащий несколько элементов, в котором вам необходимо связать несколько таблиц данных и представить информацию в виде шаблона.
На рисунке ниже показаны две вложенные области, где область Order Mail Merge является родительской для области Item Mail Merge.
Как обработать Mail Merge с вложенными областями
Данные, которые будут объединены в шаблон, могут быть получены из различных источников, в основном из реляционных баз данных или документов XML. В нашем примере мы собираемся использовать файл XML для хранения наших данных и загружать его непосредственно в DataSet.
Aspose.Words позволяет обрабатывать Mail Merge с вложенными областями, используя связи данных, указанные в DataSet. Когда объект DataSet загружает XML, он либо использует предоставленную схему, либо выводит ее из структуры самого XML для достижения этой цели. Используя эту структуру, он создает связи между таблицами там, где это необходимо.
На рисунке ниже показано, как данные из таблицы Order, переданные во вложенные области слияния, будут связаны с таблицей Item, а также выходные данные, сгенерированные во время операции слияния.
Как вы можете видеть из выходного документа, каждый заказ из таблицы Order вставляется в шаблон объединения со всеми связанными с заказом позициями из таблицы Item. Следующий заказ будет вставляться вместе со своими позициями до тех пор, пока не будут перечислены все заказы и позиции. Порядок вложения Mail Merge регионов в шаблон должен соответствовать соотношениям данных между таблицами в источнике данных.
В следующем примере кода показано, как сгенерировать счет-фактуру, используя вложенные значения Mail Merge с регионами:
Вы можете скачать примерный файл этого примера с сайта Aspose.Words GitHub.
Вы можете проверить выполнение настройки связей данных вручную с помощью Aspose.Words Github.
Как настроить связи данных во вложенных Mail Merge с регионами
Вам необходимо настроить все связи данных в родительско-дочерней структуре, чтобы правильно выполнить вложенные Mail Merge с регионами. Пропуск этого важного шага может привести к сбою при выполнении вложенных Mail Merge с регионами.
При извлечении данных для вложенного Mail Merge файла из XML с использованием метода ReadXml автоматически создаются связи в соответствии со структурой документа XML. Однако вам необходимо убедиться, что были созданы правильные связи.
Если Mail Merge работает не так, как ожидалось, то вам, возможно, потребуется реструктурировать ваш файл XML или явно создать отношения между объектами DataTable в DataSet.
Объект DataSet
, содержащий связанные таблицы данных, будет использовать объект DataRelation для представления родительско-дочерних отношений между таблицами.
В следующем примере кода показано, как установить DataRelation
между таблицей клиента и таблицей заказа с помощью объекта DataRelation
:
Как создать связи с данными из пользовательского источника данных
Реализуйте интерфейс IMailMergeDataSource для создания связей в структуре “родитель-потомок” вашего пользовательского источника данных. Используйте метод GetChildDataSource, чтобы вернуть соответствующие дочерние данные текущей родительской записи.
В следующем примере показано, как создать связи данных с помощью GetChildDataSource: