邮件合并
邮件合并允许从包含固定内容和变量的模板生成个性化文档的功能。变量被称为合并字段并通过合并过程将其替换为来自指定数据源的内容。
插入合并字段
合并字段是一种字段并可在模板中添加文档viaRadFlowDocumentEditor的InsertField ()方法。该方法需要字段的代码表示形式和在邮件合并文档之前显示在模板中的结果。
中的代码片段示例1展示如何初始化一个RadFlodDocumentEditor实例并插入一个合并字段。
例1:插入一个合并字段
RadFlowDocument文档= CreateDocument();RadFlowDocumentEditor编辑器=新的RadFlowDocumentEditor(文档);编辑器。InsertField("MERGEFIELD FirstName", "");
此外,可以通过创建对象手动将字段添加到段落中FieldInfo实例,并将其开始、代码、分隔符、结果和结束放置在块中。示例2显示手动添加合并字段的方法。
例2:手动添加一个合并字段
FieldInfo field = new FieldInfo(文档);paragraph.Inlines.Add (field.Start);paragraph.Inlines。AddRun (MERGEFIELD LastName);paragraph.Inlines.Add (field.Separator);paragraph.Inlines.AddRun (" ");paragraph.Inlines.Add (field.End);
执行邮件合并
可以在包含合并字段的模板文档上执行邮件合并。对于这个动作MailMerge ()的方法RadFlowDocument需要使用。该方法接受元素集合作为参数。
在操作期间,每个MergeField都被newRadFlowDocument实例。数据源中的每个后续条目都附加到由该方法返回的单个结果文档中。原始模板保持不变。
示例3显示了一个简单的示例数据源。
示例3:示例数据源
List mailMergeDataSource = new List() {new MailMergeRecord() {FirstName = "Andrew", LastName = "Fuller"}, new MailMergeRecord() {FirstName = "Nancy", LastName = "Davolio"},};
示例4的数据源对先前定义的模板文档执行邮件合并操作示例3.
例4:邮件合并
RadFlowDocument mailMergeResult = document.MailMerge(mailMergeDataSource);
嵌套邮件合并
从R1 2022开始支持嵌套邮件合并功能。它允许您合并包含嵌套数据的数据源。例如,您的业务对象可以包含其他对象的列表,该功能允许访问底层对象的属性。为了使用底层对象,您需要声明一个组。目前支持以下组标记。
- BeginGroup / EndGroup
- TableStart / TableEnd
- RangeStart / RangeEnd
- GroupStart / GroupEnd
目前,为了提高文档的可读性,所有标签都具有相同的工作效果,并且存在多个选项。下面的示例演示如何使用嵌套邮件合并。
类型的数据源首先需要定义一个数据源IEnumerable
的对象。
例5:嵌套邮件合并数据源
public List GetTeams() {var teams = new List();var team1 = new Team();team1。TeamName = "Team 1";team1.Players。添加(新玩家(){firstname = "John", LastName = "Baker"});team1.Players。添加(新玩家(){firstname = "Sam ", LastName = "Wayne"});teams.Add (team1);var team2 = new Team(); team2.TeamName = "Team 2"; team2.Players.Add(new Player() { FirsName = "Patrick", LastName = "Gibbs" }); team2.Players.Add(new Player() { FirsName = "Oscar", LastName = "Stevens" }); teams.Add(team2); return teams; } public class Team { public string TeamName { get; set; } public List Players { get; set; } public Team() { this.Players = new List(); } } public class Player { public string FirsName { get; set; } public string LastName { get; set; } }
例6:执行嵌套邮件合并
var document = new RadFlowDocument();var editor = new RadFlowDocumentEditor(文档);editor.InsertParagraph ();编辑器。InsertField("MERGEFIELD TeamName", "");editor.InsertParagraph ();editor.InsertText(“玩家:”);var playersTable =编辑器。InsertTable (2, 2);playersTable。PreferredWidth = new TableWidthUnit(TableWidthUnitType)。%, 100); document.StyleRepository.AddBuiltInStyle(BuiltInStyleNames.TableGridStyleId); playersTable.StyleId = BuiltInStyleNames.TableGridStyleId; playersTable.Rows[0].Cells[0].Blocks.AddParagraph().Inlines.AddRun("First Name"); playersTable.Rows[0].Cells[1].Blocks.AddParagraph().Inlines.AddRun("Last Name"); var firstNameParagraph = playersTable.Rows[1].Cells[0].Blocks.AddParagraph(); editor.MoveToParagraphStart(firstNameParagraph); editor.InsertField("MERGEFIELD TableStart:Players", ""); editor.InsertField("MERGEFIELD FirstName", ""); var lastNameParagraph = playersTable.Rows[1].Cells[1].Blocks.AddParagraph(); editor.MoveToParagraphStart(lastNameParagraph); editor.InsertField("MERGEFIELD LastName", ""); editor.InsertField("MERGEFIELD TableEnd:Players", ""); RadFlowDocument mailMergeResult = document.MailMerge(GetTeams());
单行vs多行邮件合并
使用嵌套邮件合并功能,可以将所有项目添加到一行中。这是通过将组和常规字段添加到单个段落来实现的。
图1:单行上的邮件合并和结果
如果要将项目分成几行,则需要在下一行上关闭组
图2:多行上的邮件合并和结果