EAS多数据源套打开发流程(实现方式)

经验与成果分享
EAS新建多数据套打源
多数据套打源:适用于有多个分录的单据配置套打模板,如:人员信息(工作信息,家庭信息,学历信息)等,有多个详细分录组成的单据。
1,新建数据源:
A:在Bos设计开发工具中新建数据源(主数据源,从数据源)。
主数据源:一般由(单据头和其中一个分录的数据构成)。
从数据源:一个分录的信息。
主数据源和从数据源的关联性:主数据源中有一个ID(在新建时必须要有)即单据头ID,从数据源在新建必须要有parent.id,从而使主从数据源之间有关联关系。
例:
主数据源,
EAS多数据源套打开发流程(实现方式)
从数据源:
EAS多数据源套打开发流程(实现方式)
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(打印预览方法)
EAS多数据源套打开发流程(实现方式)
注意:上图标记的出来的地方是需要修改的地方,修改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”))的一致。不然数据出不来。
EAS多数据源套打开发流程(实现方式)
B,参数设置
EAS多数据源套打开发流程(实现方式)
注意:参数:统一为billid或BillID
引用对象:统一与主数据源有关联关系
值:该值是(主数据源的Id值)
原因:在前面制作数据源时,就设定了主从数据源连接关系对象用什么去连接。既id=parent.id

以上就是设置多数据源套打的步骤

脚本分享

EAS多数据源套打开发流程(实现方式)
步骤:
点击表格(对应表格)——>属性–>通用属性–>后置脚本处理:setValue(toStr(getValue())==“true”?“■修改报告”:“□修改报告”)
EAS多数据源套打开发流程(实现方式)

上一篇:你遇到过缓存雪崩、缓存穿透、缓存击穿么


下一篇:opencv入门系列教学(七)改变颜色空间、提取彩色对象