奇怪!邮件合并回调的问题!

我设计了二个邮件合并,一个是字段型的 一个是区域型的。注册了字段型回调FieldMergeHandler(),为什么区域型合并时也自动回调此FieldMergeHandler!!

在这样的情况下,请教以下2个问题:

  1. 区域型合并时可以设置成不回调FieldMergeHandler吗?

2.区域型合并时可以设置成另外一个回调如FieldMergeHandler_B()吗? 谢谢!

以下是我的代码部分:

                    //字段合并
                   doc.getMailMerge().setFieldMergingCallback(new FieldMergeHandler());
		doc.getMailMerge().execute(new String[] { "docSubject"}, new Object[] { "INV-000001"});

		.......
		
		String tableKey;
		DataSet ds = new DataSet();
		DataTable data;
		
		tableKey="fd_344a3858a3f3dc";
		data = new DataTable(tableKey);
		data.getColumns().add("index");
		data.getColumns().add("fd_344a390a1b6782");
		data.getRows().add("1","2");
		data.getRows().add("3","4");
		ds.getTables().add(data);
		
		//区域合并
		doc.getMailMerge().executeWithRegions(ds);

@hzjianglf,

这两个问题的答案都是肯定的。 您需要单独调用ExecuteWithRegions和Execute方法,因为它们执行的操作非常不同。 MailMerge.ExecuteWithRegions方法仅对文档内的“邮件合并区域”执行邮件合并操作,MailMerge.Execute方法对简单合并字段(邮件合并区域外)执行邮件合并操作。 所以,你必须打两个电话。 这是设计的。

此外,您可以实现一次IFieldMergingCallback接口,以控制在邮件合并操作期间如何将数据插入合并字段。 ExecuteWithRegions和Execute方法都可以共享单个实现,也可以为它们编写不同的处理程序。 在IFieldMergingCallback.FieldMerging方法中,还有一种方法可用于确定当前字段是否属于任何区域(请参阅MailMergeRegionInfo类)。