Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
V některých scénářích možná budete muset použít vnořené Mail Merge s regiony. Vnořené sloučení je funkce, která umožňuje sloučit hierarchická data ze zdroje dat do šablony sloučení a snadno naplnit dokument. Hierarchická data jsou v zásadě reprezentována jako sada datových položek a hierarchické vztahy popisují, jak jsou datové položky vzájemně propojeny (jedna položka dat je rodičem jiné).
Aspose.Words umožňuje provést operaci Mail Merge s vnořenými oblastmi. Tuto funkci můžete použít, pokud máte zdroj dat, který je uspořádán do stromové struktury a chcete provést operaci Mail Merge k naplnění šablony hierarchickými daty.
Oblast Mail Merge se nazývá vnořená, pokud máte dvě nebo více oblastí Mail Merge, kde jedna z nich je uvnitř druhé v hierarchické podobě. Všimněte si, že každá oblast obsahuje data z jedné tabulky.
Nejběžnějším příkladem vnořeného Mail Merge je objednávka, která obsahuje více položek, kde je třeba propojit více datových tabulek a prezentovat informace v šabloně.
Obrázek níže ukazuje dvě vnořené oblasti, kde oblast Order Mail Merge je rodičem oblasti Item Mail Merge.
Data, která mají být sloučena do šablony, mohou pocházet z různých zdrojů, zejména relačních databází nebo XML dokumentů. V našem příkladu použijeme soubor XML k uložení našich dat a jejich načtení přímo do DataSet.
Aspose.Words umožňuje zpracovávat Mail Merge s vnořenými oblastmi pomocí datových vztahů uvedených v DataSet. Když objekt DataSet načte XML, použije buď poskytnuté schéma, nebo jej odvodí ze struktury samotného XML, aby toho dosáhl. Z této struktury vytváří v případě potřeby vztahy mezi tabulkami.
Obrázek níže ukazuje, jak budou data z tabulky Order předaná vnořeným regionům sloučení propojena s tabulkou Item a také výstup generovaný během operace sloučení.
Jak můžete vidět z výstupního dokumentu, Každá objednávka z tabulky Order je vložena do šablony sloučení se všemi souvisejícími položkami objednávky z tabulky Item. Další objednávka bude vložena spolu s jejich položkami, dokud nebudou uvedeny všechny objednávky a položky. Pořadí vnoření Mail Merge s regiony v šabloně musí odpovídat datovým vztahům mezi tabulkami ve zdroji dat.
Následující příklad kódu ukazuje, jak vygenerovat fakturu pomocí vnořeného Mail Merge s regiony:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
// Create the Dataset and read the XML. | |
DataSet pizzaDs = new DataSet(); | |
// The Datatable.TableNames and the DataSet.Relations are defined implicitly by .NET through ReadXml. | |
pizzaDs.readXml(dataDir + "CustomerData.xml"); | |
String fileName = "Invoice Template.doc"; | |
// Open the template document. | |
Document doc = new Document(dataDir + fileName); | |
// Trim trailing and leading whitespaces mail merge values. | |
doc.getMailMerge().setTrimWhitespaces(false); | |
// Execute the nested mail merge with regions. | |
doc.getMailMerge().executeWithRegions(pizzaDs); | |
// Save the output to file. | |
doc.save(dataDir + fileName); |
Chcete-li správně spustit vnořený Mail Merge s oblastmi, musíte nastavit všechny datové vztahy ve struktuře rodič-dítě. Přeskočení tohoto důležitého kroku může vést k selhání při provádění vnořeného Mail Merge s regiony.
Při načítání dat pro vnořený Mail Merge ze souboru XML metodou ReadXml se automaticky vytvoří vztahy podle struktury dokumentu XML. Musíte se však ujistit, že byly vytvořeny správné vztahy.
Pokud Mail Merge nefunguje podle očekávání, možná budete muset restrukturalizovat soubor XML nebo explicitně vytvořit vztahy mezi objekty DataTable v DataSet.
DataSet
, který má související datové tabulky, použije objekt DataRelation k reprezentaci vztahu rodič-dítě mezi tabulkami.
Následující příklad kódu ukazuje, jak vytvořit DataRelation
mezi tabulkou zákazníka a tabulkou objednávky pomocí objektu DataRelation
:
dataSet.getRelations().add(new DataRelation("OrderToItem", orderTable.getColumns().get("Order_Id"), itemTable.getColumns().get("Order_Id"), false));
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.