// 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)的根實體要和主要資料源的根實體相同。