// 1、单据ID或选中的一批单据ID的集合
Set dataIds = new HashSet();//null改成有意义的单据ID集合。
dataIds.add(editData.getString("id"));
// 2、主数据源(单据)的缺省元数据PK
IMetaDataPK billPk = MetaDataPKFactory.getMetaDataPK("com.kingdee.eas.hrp.hrbill.app.PayRequestQuery");
// 3、构造数据提供者缺省实现。如果是单数据源,到这里,省去4、5,直接到6。
DefaultNoteDataProvider dataProvider = new DefaultNoteDataProvider(dataIds, billPk);
// 4-1、给主数据源指定缺省的元数据和过滤器
String mainDsName = "PayRequestQuery";//模板中定义的数据源名称
dataProvider.addMetaDataPK(mainDsName, billPk);
dataProvider.addCustomFilterMaker(mainDsName,
new DefaultNoteDataProvider.DefaultIdFilterMaker(dataIds));
// 4-2、给从数据源(比如审批)指定缺省的元数据和自定义过滤器
String approveDsName = "PayrequestPaymentQuery";//模板中定义的数据源名称
IMetaDataPK approvePk = MetaDataPKFactory.getMetaDataPK(
"com.kingdee.eas.hrp.hrbill.app.PayrequestPaymentQuery");
dataProvider.addMetaDataPK(approveDsName, approvePk);
dataProvider.addForeignKey(approveDsName, "id");
dataProvider.addCustomFilterMaker(approveDsName,
new DefaultNoteDataProvider.ICustomFilterMaker()
{
public void customize(FilterInfo filter, R1PrintDataParameter[] params)
{
//filter.getFilterItems().add(new FilterItemInfo("PaymentBillEntry.projectCode", "", CompareType.NOTEQUALS));
}
});
// 也可以作为代理将任务转给另一个取数实现,但这样做不了批量取数。
//dataProvider.addProxyTarget("MultiApproveViewQuery", anotherDataProvider);
// 5、设置批量取从数据源,原来100张单101次RPC,可减为2次。
dataProvider.setBatchSupported(true);
dataProvider.setNumberOfEachBatch(100);
// 6、调用套打,其中“/Xx/Bill”改成套打管理中模板所在路径
KDNoteHelper helper = new KDNoteHelper();
helper.printPreview(getTDFileName(), dataProvider, this);
注意:从数据源(所建的QUERY)的根实体要和主数据源的根实体相同。