经验与成果分享
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”?“■修改报告”:“□修改报告”)

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

  1. 一套完整的软件开发流程是怎样的?

    ​做什么事都需要一个流程,软件开发也不例外. 那么,一个软件从无到有到底是怎么开发的?一个软件产品的结果为什么是这样?为什么开发的速度不能再快一点.为什么程序员大多秃顶?他们有那么忙吗?完整的软件开发 ...

  2. 3000字梳理大数据开发流程及规范(建议收藏)

    在大数据时代,规范地进行数据资产管理已成为推动互联网.大数据.人工智能和实体经济深度融合的必要条件.贴近业务属性.兼顾研发各阶段要点的研发规范,可以切实提高研发效率,保障数据研发工作有条不紊地运作.而 ...

  3. Cocoss2d-x开发流程工具化思想与实现

    在Cocos2d-x分会场,资深游戏引擎程序员卞安发表了<Cocoss2d-x开发流程工具化思想与实现>主题演讲,主要讲述了Cocoss2d-x开发流程工具化思想与实现. 资深游戏引擎程序 ...

  4. TCP 网络应用程序开发流程

    TCP 网络应用程序开发流程 1. TCP 网络应用程序开发流程的介绍 TCP 网络应用程序开发分为: TCP 客户端程序开发 TCP 服务端程序开发 说明: 客户端程序是指运行在用户设备上的程序 , ...

  5. 一个项目的开发流程是怎样的? 原名:「只差程序员」离优秀的产品还有多远?...

    http://www.toutiao.com/a4919665444/ ......产品开发的流程问题,这也是个严肃的问题.解决流程问题,就知道技术团队需要什么人,产品开发就成功了一半. 一个项目的开 ...

  6. 对 VR 项目开发流程的调研

    0. 参考资料 学习参考自以下资料: 一个 VR 游戏 DEMO 的开发历程是怎样的 http://tech.163.com/16/0726/08/BSSSPPT600097U7U.html 虚拟现实 ...

  7. 实战:移动APP项目产品开发流程详解

    问题补充:移动端APP产品的开发流程是如何的?开发移动端APP,从产品需求规划到最终上线发版,都有哪些必要流程,其中需要重点注意的事情有哪些,可以基于你当前的工作情况酌情回答. 黄沐秋Moon NBP ...

  8. HarmonyOS之基础环境和应用开发流程

    一.什么是 HarmonyOS ? HarmonyOS 是一款"面向未来".面向全场景(移动办公.运动健康.社交通信.媒体娱乐等)的分布式操作系统.在传统的单设备系统能力的基础上, ...

  9. 再聊机器人设计:如何加速开发流程?

     01 一套机械臂系统引发的思考  想让机器人与人类配合无间,或许是机器人领域里最难做的事了. 近日,来自加拿大舍布鲁克大学的研究人员开发出了一种固定在腰间的机械臂系统,它可以帮助你完成多种任务. 包 ...

最新文章

  1. 动态规划之 0-1背包问题及改进
  2. Nginx安装echo模块
  3. 高起专计算机应用基础试题及答案,重庆大学网络教育高起专计算机应用基础入学考试模拟题及答案(二)...
  4. MindManager脑图之项目管理甘特图
  5. 使用Java第2部分查询DynamoDB项
  6. android adb 进程端口号被占解决方法
  7. 弹性理论法研究桩基受力计算公式_桩基础沉降计算方法及相关的理论分析
  8. 微软3月补丁星期二修复71个漏洞,其中3个是0day
  9. linux aix 环境,在AIX中设置中文环境
  10. 图论——最小生成树:Prim算法及优化、Kruskal算法,及时间复杂度比较
  11. SetBkMode(TRANSPARENT) 设置文本背景与控件背景一样
  12. 【超详细】| 使用Vmware 安装win7虚拟机
  13. 【信号处理】信号与系统 电子课本(郑君里)
  14. 解析数论 1: Fourier积分和Fourier变换
  15. IDL学习——调用enviTask对高分2号影像进行预处理
  16. AopAutoConfiguration matched: - @ConditionalOnProperty (spring.aop.auto=true) matched (OnPrope.
  17. [CTS2019]无处安放(提交答案)
  18. 云端服务器上传本地项目
  19. 用Java SE 6.0实现高质量桌面集成开发 (转)
  20. 怎样在百度UMeditor编辑器中插入腾讯和爱奇艺网站视频?

热门文章

  1. PHP 文章内链的实现方法
  2. 第十诫:在规则中理解精意
  3. 好用的工作记事软件 好用的工作记事本APP
  4. Linux—— SAMBA
  5. CeGui+Ogre
  6. 张乐:研发效能的升维思考与降维执行|发布会精彩回顾
  7. 大学计算机类专业适合的笔记本,2021适合计算机专业的笔记本电脑有哪些
  8. 再次更新!ultraedit v29.0.0.102 简体中文版
  9. 常用各height的区别
  10. 电子行业如何打造智能SMT工厂?