Вкладені 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: