经验与成果分享
EAS新建多数据套打源
多数据套打源:适用于有多个分录的单据配置套打模板,如:人员信息(工作信息,家庭信息,学历信息)等,有多个详细分录组成的单据。
1,新建数据源:
A:在Bos设计开发工具中新建数据源(主数据源,从数据源)。
主数据源:一般由(单据头和其中一个分录的数据构成)。
从数据源:一个分录的信息。
主数据源和从数据源的关联性:主数据源中有一个ID(在新建时必须要有)即单据头ID,从数据源在新建必须要有parent.id,从而使主从数据源之间有关联关系。
例:
主数据源,
从数据源:
B:发布。将数据源发布好,打包,生成子系统树。
2,新建拓展类DataProvider
A:找到对应单据的路径建立DataProvider类,实现 BOSQueryDelegate(import com.kingdee.bos.ctrl.kdf.data.datasource.BOSQueryDataSource)接口。
B:重写public IRowSet execute(BOSQueryDataSource ds) {}方法。
注:ds指数据源的名称(Query名称)
具体:DataProvider的代码如下:
package com.kingdee.eas.custom.yachtendcheck;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.kingdee.bos.ctrl.kdf.data.datasource.BOSQueryDataSource;
import com.kingdee.bos.ctrl.kdf.data.impl.BOSQueryDelegate;
import com.kingdee.bos.dao.query.IQueryExecutor;
import com.kingdee.bos.dao.query.QueryExecutorFactory;
import com.kingdee.bos.metadata.IMetaDataPK;
import com.kingdee.bos.metadata.MetaDataPK;
import com.kingdee.bos.metadata.entity.EntityViewInfo;
import com.kingdee.bos.metadata.entity.FilterInfo;
import com.kingdee.bos.metadata.entity.FilterItemInfo;
import com.kingdee.bos.metadata.query.util.CompareType;
import com.kingdee.eas.framework.client.CoreUI;
import com.kingdee.eas.util.client.ExceptionHandler;
import com.kingdee.jdbc.rowset.IRowSet;
public class DataProvider implements BOSQueryDelegate {
private Set ids=null;
private IMetaDataPK qpk=null;
public DataProvider(Set id,IMetaDataPK qpk){
this.ids=id;
this.qpk=qpk;
}
public DataProvider(List id, IMetaDataPK qpk) {
this.ids = new HashSet(id);
this.qpk = qpk;
}
@Override
public IRowSet execute(BOSQueryDataSource ds) {
// TODO Auto-generated method stub
IRowSet iRowSet=null;
try {//ds.getID()之数据源的名称
if(ds.getID().equals(“TDYachtendcheckQuery”)){//TDYachtendcheckQu//ery:是第一步中所建的数据源的名字
IQueryExecutor exec = QueryExecutorFactory.getRemoteInstance(new MetaDataPK(“com.kingdee.eas.custom.yachtendcheck.app.TDYachtendcheckQuery”));
exec.option().isAutoTranslateEnum = true;
EntityViewInfo ev = new EntityViewInfo();
FilterInfo filter = new FilterInfo();
filter.getFilterItems().add(new FilterItemInfo(“id”, this.ids, CompareType.INCLUDE));
ev.setFilter(filter);
exec.setObjectView(ev);
iRowSet = exec.executeQuery();
//是指分录数据源中的parent.id字段
}else if(ds.getID().equals("TDElectrOneEntrysQuery")){
IQueryExecutor exec = QueryExecutorFactory
.getRemoteInstance(new MetaDataPK("com.kingdee.eas.custom.yachtendcheck.app.TDElectrOneEntrysQuery"));
exec.option().isAutoTranslateEnum = true;
EntityViewInfo ev = new EntityViewInfo();
FilterInfo filter = new FilterInfo();
filter.getFilterItems().add(new FilterItemInfo("parent.id", this.ids, CompareType.INCLUDE));
ev.setFilter(filter);
exec.setObjectView(ev);
iRowSet = exec.executeQuery();
}else if(ds.getID().equals("TDElectrTwoEntryQuery")){
IQueryExecutor exec = QueryExecutorFactory
.getRemoteInstance(new MetaDataPK("com.kingdee.eas.custom.yachtendcheck.app.TDElectrTwoEntryQuery"));
exec.option().isAutoTranslateEnum = true;
EntityViewInfo ev = new EntityViewInfo();
FilterInfo filter = new FilterInfo();
filter.getFilterItems().add(new FilterItemInfo("parent.id", this.ids, CompareType.INCLUDE));
ev.setFilter(filter);
exec.setObjectView(ev);
iRowSet = exec.executeQuery();
}else if(ds.getID().equals("TDInsideEntryQuery")){
IQueryExecutor exec = QueryExecutorFactory
.getRemoteInstance(new MetaDataPK("com.kingdee.eas.custom.yachtendcheck.app.TDInsideEntryQuery"));
exec.option().isAutoTranslateEnum = true;
EntityViewInfo ev = new EntityViewInfo();
FilterInfo filter = new FilterInfo();
filter.getFilterItems().add(new FilterItemInfo("parent.id", this.ids, CompareType.INCLUDE));
ev.setFilter(filter);
exec.setObjectView(ev);
iRowSet = exec.executeQuery();
}else if(ds.getID().equals("TDProblemsEntrysQuery")){
IQueryExecutor exec = QueryExecutorFactory
.getRemoteInstance(new MetaDataPK("com.kingdee.eas.custom.yachtendcheck.app.TDProblemsEntrysQuery"));
exec.option().isAutoTranslateEnum = true;
EntityViewInfo ev = new EntityViewInfo();
FilterInfo filter = new FilterInfo();
filter.getFilterItems().add(new FilterItemInfo("parent.id", this.ids, CompareType.INCLUDE));
ev.setFilter(filter);
exec.setObjectView(ev);
iRowSet = exec.executeQuery();
}else{
IQueryExecutor exec=QueryExecutorFactory.getRemoteInstance(this.qpk);
exec.option().isAutoTranslateEnum=true;
EntityViewInfo ev=new EntityViewInfo();
FilterInfo filter=new FilterInfo();
filter.getFilterItems().add(new FilterItemInfo("id",this.ids,CompareType.INCLUDE));
ev.setFilter(filter);
exec.setObjectView(ev);
iRowSet=exec.executeQuery(); }
} catch (Exception e) {
ExceptionHandler.handle((CoreUI) null,e);
}
return iRowSet;
}
}
C:在对应单据(EditUI)中找到
actionPrint_actionPerforme(打印方法),
actionPrintPreview_actionPerformed(打印预览方法)
注意:上图标记的出来的地方是需要修改的地方,修改DataProvider 类对应的路劲。
实现代码:(两个方法实现代码是一样的)
if (BillBaseStatusEnum.AUDITED.equals((BillBaseStatusEnum) FBillStatus.getSelectedItem())) {
ArrayList idList = new ArrayList();
if (editData != null && !StringUtils.isEmpty(editData.getString(“id”))) {
idList.add(editData.getString(“id”));
}
if (idList == null || idList.size() == 0 || getTDQueryPK() == null || getTDFileName() == null)
return;
com.kingdee.bos.ctrl.kdf.data.impl.BOSQueryDelegate data = new com.kingdee.eas.custom.yachtendcheck.DataProvider(idList,getTDQueryPK());
com.kingdee.bos.ctrl.report.forapp.kdnote.client.KDNoteHelper appHlp = new com.kingdee.bos.ctrl.report.forapp.kdnote.client.KDNoteHelper();
appHlp.print(getTDFileName(), data, javax.swing.SwingUtilities.getWindowAncestor(this));
}else{
MsgBox.showWarning(“请先审核!”);
return;
}
3,在系统制作套打模板
A,导入数据源(主从数据源)
注意:a,主数据源默认是排在第一位,如果不是第一位需要动手去设置一下。
B,数据源的名称要和DataProvider 类中
if(ds.getID().equals(“TDProblemsEntrysQuery”))的一致。不然数据出不来。
B,参数设置
注意:参数:统一为billid或BillID
引用对象:统一与主数据源有关联关系
值:该值是(主数据源的Id值)
原因:在前面制作数据源时,就设定了主从数据源连接关系对象用什么去连接。既id=parent.id
以上就是设置多数据源套打的步骤
脚本分享
步骤:
点击表格(对应表格)——>属性–>通用属性–>后置脚本处理:setValue(toStr(getValue())==“true”?“■修改报告”:“□修改报告”)