From 2f611cc1e59f83c6c37e00545a4ec585459b8932 Mon Sep 17 00:00:00 2001 From: KB Bot Date: Wed, 30 Oct 2024 07:06:44 +0000 Subject: [PATCH 1/2] Added new kb article clone-repeating-section-content-control-radwordsprocessing --- ...tion-content-control-radwordsprocessing.md | 135 ++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 knowledge-base/clone-repeating-section-content-control-radwordsprocessing.md diff --git a/knowledge-base/clone-repeating-section-content-control-radwordsprocessing.md b/knowledge-base/clone-repeating-section-content-control-radwordsprocessing.md new file mode 100644 index 00000000..d6628a51 --- /dev/null +++ b/knowledge-base/clone-repeating-section-content-control-radwordsprocessing.md @@ -0,0 +1,135 @@ +--- +title: How to Clone and Populate Repeating Section Content Controls in RadWordsProcessing +description: Learn how to programmatically clone and populate repeating section content controls in RadWordsProcessing documents. +type: how-to +page_title: How to Clone and Populate Repeating Section Content Controls in RadWordsProcessing +slug: clone-repeating-section-content-control-radwordsprocessing +tags: wordsprocessing, document, processing, content, controls, clone, repeating, section +res_type: kb +ticketid: 1668130 +--- + +## Environment + +| Version | Product | Author | +| --- | --- | ---- | +| 2024.3.806| RadWordsProcessing |[Desislava Yordanova](https://www.telerik.com/blogs/author/desislava-yordanova)| + +## Description + +When working with MS Word documents that contain [Content Controls]({%slug wordsprocessing-model-content-controls%}), it's straightforward to map model properties to the appropriate content control. However, cloning a [RepeatingSection][Content Controls]({%slug wordsprocessing-model-content-controls%}#repeatingsection) with content controls inside presents a challenge as there seems to be no direct method to clone a repeating section content control along with its contents. + +This KB article shows a sample approach how to duplicate the content controls inside a [RepeatingSection][Content Controls]({%slug wordsprocessing-model-content-controls%}#repeatingsection) in a Word document and populate them with data considering the mapped object. + +## Solution + +Let's have an Employee object defined below. We need to use the RepeatingSection to list all of the telephones associated with the respective Employee. + +```csharp + public class Employee + { + public int EmployeeId { get; set; } + public string FirstName { get; set; } + public string LastName { get; set; } + public DateTime Dob { get; set; } + public int WorkLocationId { get; set; } + public WorkLocation WorkLocation { get; set; } + public List Phones { get; set; } = new List(); + } + + public class Telephone + { + public int Id { get; set; } + public string Carrier { get; set; } + public string PhoneNumber { get; set; } + public int PhoneTypeId { get; set; } + public TelephoneType PhoneType { get; set; } + } + + public class TelephoneType + { + public int Id { get; set; } + public string Name { get; set; } + + public override string ToString() + { + return this.Name; + } + } +``` +This original document template looks like this: + + + +To simulate the MS Word behavior of duplicating a repeating section with all the content controls within the section, you can follow the custom approach detailed below. This solution involves generating table rows based on the number of instances in a collection, such as a list of telephone numbers associated with an employee. Note that this solution is custom and may require adjustments to fit specific requirements. + +1. **Enumerate Content Controls and Identify Repeating Sections**: Iterate through all content controls in the document and identify those that are type `SdtType.RepeatingSection`. + +2. **Clone Repeating Sections Programmatically**: For each identified repeating section, dynamically create and populate new table rows based on the data in the collection associated with the repeating section. + +3. **Remove Original Repeating Section Content Controls**: After cloning and populating the new sections, remove the original repeating section content controls from the document to avoid duplication. + +The following code snippet demonstrates how to populate a template with dynamic data by cloning repeating section content controls: + +```csharp +private static void PopulateTemplate(RadFlowDocument document, Employee employee) +{ + var contentControls = document.EnumerateChildrenOfType().ToList(); + foreach (var contentControl in contentControls) + { + if (string.IsNullOrEmpty(contentControl.SdtProperties.Tag)) + continue; + + if (contentControl.SdtProperties.Type == SdtType.RepeatingSection) + { + var value = GetValueFromEmployee(employee, contentControl.SdtProperties.Tag); + List telephones = value as List; + if (telephones == null) + { + continue; + } + TableRow startRow = contentControl.Paragraph.Parent.Parent as TableRow; + TableRow endRow = contentControl.End.Paragraph.Parent.Parent as TableRow; + Table repeatingTable = startRow.Table; + int startIndex = repeatingTable.Rows.IndexOf(startRow); + int endIndex = repeatingTable.Rows.IndexOf(endRow); + foreach (Telephone tel in telephones) + { + for (int k = startIndex; k < endIndex + 1; k++) + { + TableRow newRow = repeatingTable.Rows.AddTableRow(); + TableCell cell = newRow.Cells.AddTableCell(); + cell.PreferredWidth = repeatingTable.Rows[k].Cells[0].PreferredWidth; + Paragraph p = repeatingTable.Rows[k].Cells[0].Blocks[0] as Paragraph; + string telPropName = (p.Inlines.Last() as Run).Text; + cell.Blocks.AddParagraph().Inlines.AddRun(telPropName); + cell = newRow.Cells.AddTableCell(); + cell.PreferredWidth = repeatingTable.Rows[k].Cells[1].PreferredWidth; + var telValue = GetValueFromEmployee(tel, telPropName.Replace(" ", string.Empty)); + cell.Blocks.AddParagraph().Inlines.AddRun(telValue?.ToString() ?? string.Empty); + } + } + for (int z = startIndex; z < endIndex + 1; z++) + { + repeatingTable.Rows.RemoveAt(0); + } + RadFlowDocumentEditor editor = new RadFlowDocumentEditor(document); + editor.RemoveStructuredDocumentTag(contentControl, false); + } + else + { + var value = GetValueFromEmployee(employee, contentControl.SdtProperties.Tag); + SetContentControlValue(contentControl, value?.ToString() ?? string.Empty); + } + } +} +``` +The produced result is illustrated below: + + +## See Also + +- [Content Controls]({%slug wordsprocessing-model-content-controls%}) +- [Populate a Table with Data using Nested Mail Merge Functionality](https://docs.telerik.com/devtools/document-processing/knowledge-base/populate-table-data-mail-merge) +- [Generating a Word Document with Data Using MailMerge in RadWordsProcessing](https://docs.telerik.com/devtools/document-processing/knowledge-base/generate-doc-template-and-populate-with-collection-data-mail-merge) +- [Mail Merge Functionality in RadWordsProcessing](https://docs.telerik.com/devtools/document-processing/libraries/radwordsprocessing/editing/mail-merge) From 5dfc0ad6fa9e9bf7a3f6ff1fcbaf0cbcf6389e0b Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Wed, 30 Oct 2024 09:35:41 +0200 Subject: [PATCH 2/2] Add full code snippet, images and fix the slugs --- ...tion-content-control-radwordsprocessing.md | 284 +++++++++++++++--- .../images/originalRepeatingSection.png | Bin 0 -> 14146 bytes .../images/resultRepeatingSection.png | Bin 0 -> 14889 bytes .../content-controls/content-controls.md | 1 + 4 files changed, 235 insertions(+), 50 deletions(-) create mode 100644 knowledge-base/images/originalRepeatingSection.png create mode 100644 knowledge-base/images/resultRepeatingSection.png diff --git a/knowledge-base/clone-repeating-section-content-control-radwordsprocessing.md b/knowledge-base/clone-repeating-section-content-control-radwordsprocessing.md index d6628a51..7e6b8339 100644 --- a/knowledge-base/clone-repeating-section-content-control-radwordsprocessing.md +++ b/knowledge-base/clone-repeating-section-content-control-radwordsprocessing.md @@ -15,15 +15,19 @@ ticketid: 1668130 | --- | --- | ---- | | 2024.3.806| RadWordsProcessing |[Desislava Yordanova](https://www.telerik.com/blogs/author/desislava-yordanova)| -## Description +## Description When working with MS Word documents that contain [Content Controls]({%slug wordsprocessing-model-content-controls%}), it's straightforward to map model properties to the appropriate content control. However, cloning a [RepeatingSection][Content Controls]({%slug wordsprocessing-model-content-controls%}#repeatingsection) with content controls inside presents a challenge as there seems to be no direct method to clone a repeating section content control along with its contents. -This KB article shows a sample approach how to duplicate the content controls inside a [RepeatingSection][Content Controls]({%slug wordsprocessing-model-content-controls%}#repeatingsection) in a Word document and populate them with data considering the mapped object. +This KB article shows a sample approach how to duplicate the content controls inside a [RepeatingSection][Content Controls]({%slug wordsprocessing-model-content-controls%}#repeatingsection) in a Word document and populate them with data considering the mapped object. -## Solution +|Original Document|Result Document| +|----|----| +|![Original Document](images/originalRepeatingSection.png)|![Result Document](images/resultRepeatingSection.png)| -Let's have an Employee object defined below. We need to use the RepeatingSection to list all of the telephones associated with the respective Employee. +## Solution + +Let's have an Employee object defined below. We need to use the [RepeatingSection][Content Controls]({%slug wordsprocessing-model-content-controls%}#repeatingsection) to list all of the telephones associated with the respective Employee. ```csharp public class Employee @@ -57,10 +61,6 @@ Let's have an Employee object defined below. We need to use the RepeatingSection } } ``` -This original document template looks like this: - - - To simulate the MS Word behavior of duplicating a repeating section with all the content controls within the section, you can follow the custom approach detailed below. This solution involves generating table rows based on the number of instances in a collection, such as a list of telephone numbers associated with an employee. Note that this solution is custom and may require adjustments to fit specific requirements. 1. **Enumerate Content Controls and Identify Repeating Sections**: Iterate through all content controls in the document and identify those that are type `SdtType.RepeatingSection`. @@ -69,67 +69,251 @@ To simulate the MS Word behavior of duplicating a repeating section with all the 3. **Remove Original Repeating Section Content Controls**: After cloning and populating the new sections, remove the original repeating section content controls from the document to avoid duplication. -The following code snippet demonstrates how to populate a template with dynamic data by cloning repeating section content controls: +The following code snippet demonstrates how to populate a template document with dynamic data by cloning repeating section content controls: ```csharp -private static void PopulateTemplate(RadFlowDocument document, Employee employee) -{ - var contentControls = document.EnumerateChildrenOfType().ToList(); - foreach (var contentControl in contentControls) - { - if (string.IsNullOrEmpty(contentControl.SdtProperties.Tag)) - continue; + static void Main(string[] args) + { + DocxFormatProvider provider = new DocxFormatProvider(); + var (employees, _, _) = MockDataGenerator.GenerateMockData(); + List allEmployees = employees; + int EmployeeId = 2; + Employee employee = allEmployees.FirstOrDefault(e => e.EmployeeId == EmployeeId); + RadFlowDocument document; + using (Stream stream = File.OpenRead("SampleDocContentControls.docx")) + { + document = provider.Import(stream); + } - if (contentControl.SdtProperties.Type == SdtType.RepeatingSection) + PopulateTemplate(document, employee); + string outputFilePath = "Sample.docx"; + using (Stream output = File.OpenWrite(outputFilePath)) + { + provider.Export(document, output); + } + + Process.Start(new ProcessStartInfo() { FileName = outputFilePath, UseShellExecute = true }); + } + private static void SetContentControlValue(SdtRangeStart contentControl, string value) { - var value = GetValueFromEmployee(employee, contentControl.SdtProperties.Tag); - List telephones = value as List; - if (telephones == null) + var paragraph = contentControl.Paragraph; + if (paragraph != null) { - continue; + paragraph.Inlines.Clear(); + paragraph.Inlines.AddRun(value); } - TableRow startRow = contentControl.Paragraph.Parent.Parent as TableRow; - TableRow endRow = contentControl.End.Paragraph.Parent.Parent as TableRow; - Table repeatingTable = startRow.Table; - int startIndex = repeatingTable.Rows.IndexOf(startRow); - int endIndex = repeatingTable.Rows.IndexOf(endRow); - foreach (Telephone tel in telephones) + } + private static object GetValueFromEmployee(object instance, string tag) + { + string propertyPath = tag.Contains(".") ? tag.Substring(tag.LastIndexOf(".")+1) : tag; + + return GetValueFromObject(instance, propertyPath); + } + + private static object GetValueFromObject(object obj, string propertyPath) + { + var properties = propertyPath.Split('.'); + object value = obj; + + foreach (var prop in properties) { - for (int k = startIndex; k < endIndex + 1; k++) + if (value == null) { - TableRow newRow = repeatingTable.Rows.AddTableRow(); - TableCell cell = newRow.Cells.AddTableCell(); - cell.PreferredWidth = repeatingTable.Rows[k].Cells[0].PreferredWidth; - Paragraph p = repeatingTable.Rows[k].Cells[0].Blocks[0] as Paragraph; - string telPropName = (p.Inlines.Last() as Run).Text; - cell.Blocks.AddParagraph().Inlines.AddRun(telPropName); - cell = newRow.Cells.AddTableCell(); - cell.PreferredWidth = repeatingTable.Rows[k].Cells[1].PreferredWidth; - var telValue = GetValueFromEmployee(tel, telPropName.Replace(" ", string.Empty)); - cell.Blocks.AddParagraph().Inlines.AddRun(telValue?.ToString() ?? string.Empty); + return string.Empty; } + + // Handle collection properties + if (value is IEnumerable collection) + { + if (int.TryParse(prop, out int index)) + { + value = collection.ElementAtOrDefault(index); + if (value == null) + { + return string.Empty; + } + } + else + { + return string.Join(", ", collection.Select(item => GetValueFromObject(item, + string.Join(".", properties.Skip(Array.IndexOf(properties, prop)))))); + } + continue; + } + + var propInfo = value.GetType().GetProperty(prop); + if (propInfo == null) + { + return string.Empty; + } + value = propInfo.GetValue(value); } - for (int z = startIndex; z < endIndex + 1; z++) + return value; + } + + private static void PopulateTemplate(RadFlowDocument document, Employee employee) + { + var contentControls = document.EnumerateChildrenOfType().ToList(); + + foreach (var contentControl in contentControls) { - repeatingTable.Rows.RemoveAt(0); + if (string.IsNullOrEmpty(contentControl.SdtProperties.Tag)) + continue; + + if (contentControl.SdtProperties.Type == SdtType.RepeatingSection) + { + var value = GetValueFromEmployee(employee, contentControl.SdtProperties.Tag); + List telephones = value as List; + if (telephones==null) + { + continue; + } + TableRow startRow = contentControl.Paragraph.Parent.Parent as TableRow; + TableRow endRow = contentControl.End.Paragraph.Parent.Parent as TableRow; + Table repeatingTable = startRow.Table; + int startIndex = repeatingTable.Rows.IndexOf(startRow); + int endIndex = repeatingTable.Rows.IndexOf(endRow); + foreach (Telephone tel in telephones) + { + for (int k = startIndex; k < endIndex + 1; k++) + { + TableRow newRow = repeatingTable.Rows.AddTableRow(); + TableCell cell = newRow.Cells.AddTableCell(); + cell.PreferredWidth = repeatingTable.Rows[k].Cells[0].PreferredWidth; + Paragraph p = repeatingTable.Rows[k].Cells[0].Blocks[0] as Paragraph; + string telPropName = (p.Inlines.Last() as Run).Text; + cell.Blocks.AddParagraph().Inlines.AddRun(telPropName); + cell = newRow.Cells.AddTableCell(); + cell.PreferredWidth = repeatingTable.Rows[k].Cells[1].PreferredWidth; + var telValue = GetValueFromEmployee(tel, telPropName.Replace(" ", string.Empty)); + cell.Blocks.AddParagraph().Inlines.AddRun(telValue?.ToString() ?? string.Empty); + } + } + for (int z = startIndex; z < endIndex + 1; z++) + { + repeatingTable.Rows.RemoveAt(0); + } + RadFlowDocumentEditor editor = new RadFlowDocumentEditor(document); + editor.RemoveStructuredDocumentTag(contentControl,false); + } + else + { + + var value = GetValueFromEmployee(employee, contentControl.SdtProperties.Tag); + SetContentControlValue(contentControl, value?.ToString() ?? string.Empty); + } } - RadFlowDocumentEditor editor = new RadFlowDocumentEditor(document); - editor.RemoveStructuredDocumentTag(contentControl, false); } - else +``` + +The MockDataGenerator is responsible for returning sample data: + +```csharp + public static class MockDataGenerator + { + public static (List Employees, List WorkLocations, + List PhoneTypes) GenerateMockData() + { + // Create WorkLocations + var workLocations = new List + { + new WorkLocation { Id = 1, Name = "Los Angeles", Description = "West Coast HQ" }, + new WorkLocation { Id = 2, Name = "New York", Description = "East Coast Office" }, + new WorkLocation { Id = 3, Name = "Boston", Description = "Research Center" } + }; + + // Create PhoneTypes + var phoneTypes = new List + { + new TelephoneType { Id = 1, Name = "Mobile" }, + new TelephoneType { Id = 2, Name = "Office" }, + new TelephoneType { Id = 3, Name = "Home" } + }; + + // Create Employees with Phones + var employees = new List { - var value = GetValueFromEmployee(employee, contentControl.SdtProperties.Tag); - SetContentControlValue(contentControl, value?.ToString() ?? string.Empty); + new Employee + { + EmployeeId = 1, + FirstName = "John", + LastName = "Doe", + Dob = new DateTime(1985, 5, 15), + WorkLocationId = 1, + WorkLocation = workLocations[0], + Phones = new List + { + new Telephone { Id = 1, Carrier = "Verizon", PhoneNumber = "310-555-0101", + PhoneTypeId = 1, PhoneType = phoneTypes[0] }, + new Telephone { Id = 2, Carrier = "AT&T", PhoneNumber = "310-555-0102", + PhoneTypeId = 2, PhoneType = phoneTypes[1] } + } + }, + new Employee + { + EmployeeId = 2, + FirstName = "Jane", + LastName = "Smith", + Dob = new DateTime(1990, 8, 22), + WorkLocationId = 2, + WorkLocation = workLocations[1], + Phones = new List + { + new Telephone { Id = 3, Carrier = "T-Mobile", PhoneNumber = "212-555-0103", + PhoneTypeId = 1, PhoneType = phoneTypes[0] }, + new Telephone { Id = 4, Carrier = "Sprint", PhoneNumber = "212-555-0104", + PhoneTypeId = 3, PhoneType = phoneTypes[2] }, + new Telephone { Id = 5, Carrier = "AT&T", PhoneNumber = "212-555-0105", + PhoneTypeId = 2, PhoneType = phoneTypes[1] } + } + }, + new Employee + { + EmployeeId = 3, + FirstName = "Robert", + LastName = "Johnson", + Dob = new DateTime(1988, 3, 10), + WorkLocationId = 3, + WorkLocation = workLocations[2], + Phones = new List + { + new Telephone { Id = 6, Carrier = "Verizon", PhoneNumber = "617-555-0106", + PhoneTypeId = 1, PhoneType = phoneTypes[0] }, + new Telephone { Id = 7, Carrier = "AT&T", PhoneNumber = "617-555-0107", + PhoneTypeId = 2, PhoneType = phoneTypes[1] } + } + }, + new Employee + { + EmployeeId = 4, + FirstName = "Maria", + LastName = "Garcia", + Dob = new DateTime(1992, 11, 28), + WorkLocationId = 1, + WorkLocation = workLocations[0], + Phones = new List + { + new Telephone { Id = 8, Carrier = "T-Mobile", PhoneNumber = "310-555-0108", + PhoneTypeId = 1, PhoneType = phoneTypes[0] }, + new Telephone { Id = 9, Carrier = "Verizon", PhoneNumber = "310-555-0109", + PhoneTypeId = 2, PhoneType = phoneTypes[1] }, + new Telephone { Id = 10, Carrier = "AT&T", PhoneNumber = "310-555-0110", + PhoneTypeId = 3, PhoneType = phoneTypes[2] } + } + } + }; + + return (employees, workLocations, phoneTypes); } } -} ``` -The produced result is illustrated below: + +Usually, the content controls are mostly used by the editor controls like MS Word that allow the end user fill the required data. In case you are planning to edit the document programmatically, the [MailMerge]({%slug radwordsprocessing-editing-mail-merge%}) functionality should be also considered as an appropriate solution. ## See Also - [Content Controls]({%slug wordsprocessing-model-content-controls%}) -- [Populate a Table with Data using Nested Mail Merge Functionality](https://docs.telerik.com/devtools/document-processing/knowledge-base/populate-table-data-mail-merge) -- [Generating a Word Document with Data Using MailMerge in RadWordsProcessing](https://docs.telerik.com/devtools/document-processing/knowledge-base/generate-doc-template-and-populate-with-collection-data-mail-merge) -- [Mail Merge Functionality in RadWordsProcessing](https://docs.telerik.com/devtools/document-processing/libraries/radwordsprocessing/editing/mail-merge) +- [Populate a Table with Data using Nested Mail Merge Functionality]({%slug populate-table-data-mail-merge%}) +- [Generating a Word Document with Data Using MailMerge in RadWordsProcessing]({%slug generate-doc-template-and-populate-with-collection-data-mail-merge%}) +- [Mail Merge Functionality in RadWordsProcessing]({%slug radwordsprocessing-editing-mail-merge%}) diff --git a/knowledge-base/images/originalRepeatingSection.png b/knowledge-base/images/originalRepeatingSection.png new file mode 100644 index 0000000000000000000000000000000000000000..50284926fa74a095fa9b7fdf29d2efc557942743 GIT binary patch literal 14146 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 F{{bMv+V=ne literal 0 HcmV?d00001 diff --git a/knowledge-base/images/resultRepeatingSection.png b/knowledge-base/images/resultRepeatingSection.png new file mode 100644 index 0000000000000000000000000000000000000000..b0a75580ec391dd9b90b113a4a0bda45503a6bf8 GIT binary patch literal 14889 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 Y@@O8zHB(vO_0DaEx~4kCT315<8yC2T=>Px# literal 0 HcmV?d00001 diff --git a/libraries/radwordsprocessing/model/content-controls/content-controls.md b/libraries/radwordsprocessing/model/content-controls/content-controls.md index c25773f0..29d78e8b 100644 --- a/libraries/radwordsprocessing/model/content-controls/content-controls.md +++ b/libraries/radwordsprocessing/model/content-controls/content-controls.md @@ -207,5 +207,6 @@ The __Text__ content control allows you to enter plain text. The text content co * [Working with Content Controls]({%slug wordsprocessing-model-working-with-content-controls%}) * [Generating Dynamic DOCX Documents with Tables and CheckBoxes using RadWordsProcessing]({%slug dynamic-docx-document-generation-radwordsprocessing%}) +* [How to Clone and Populate Repeating Section Content Controls in RadWordsProcessing]({%slug clone-repeating-section-content-control-radwordsprocessing%})