ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:374.13KB ,
资源ID:30540198      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/30540198.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(03EASBOS开发新手入门固定报表.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

03EASBOS开发新手入门固定报表.docx

1、03EASBOS开发新手入门固定报表EAS BOS开发新手入门 如何使用固定报表框架进行报表开发 导读固定报表框架支持普通报表开发、虚模式取数方式报表开发、多页报表开发、左树右表形式报表开发。同时,对于特殊报表,可以通过二次开发插件来进行扩展。固定报表框架还将作为扩展报表数据源,在扩展报表中得到扩展。作者结合实际开发工作中的一些技巧进行总结,在本文中详细介绍了如何使用固定报表框架进行报表开发。对开发人员初学固定报表开发很有帮助。 请注意:本文件只作为产品介绍之用,不属于您与金蝶签署的任何协议。本文件仅包括金蝶既定策略、产品及功能方面的信息,不能以本文件作为要求金蝶履行商务条款、产品策略以及开发

2、义务的依据。本文件内容可能随时变更,恕不另行通知。1.简介1.1.目的本文档参考陈连力的固定报表开发指南,重新排版整理而成。结合实际开发中的一些技巧进行修正和扩充,旨在详细介绍如何使用固定报表框架进行报表开发。固定报表框架支持普通报表开发(客户端模式、服务器端模式)、虚模式取数方式报表开发(服务器端模式)、多页报表开发(服务器端模式)、左树右表形式报表开发。同时,对于特殊报表,可以通过二次开发插件来进行扩展。固定报表框架还将作为扩展报表数据源,在扩展报表中得到扩展。1.2.范围 本文档适用于:开发工程师遵循本文档进行固定报表开发2.固定报表开发基础2.1.概述固定报表是由元数据和继承类组成。元

3、数据涉及三个表:(1)固定报表描述表T_BAS_Report(2)固定报表列描述表T_BAS_ReportHeader(3)固定报表条件格式化描述表T_BAS_RPTFormatConditions对于服务端模式,基类是com.kingdee.eas.base.report.app.ReportServerBase对于客户端模式,基类是com.kingdee.eas.base.report.client.ReportBase推荐采用服务器端模式扩展类。2.2.基本开发步骤固定报表基本界面如下: 其中:包括二次开发新增菜单、ReportTitles、ReportHeader和条件格式化内容。2.

4、2.1.过滤条件面板通过BOS,绘制过滤条件面板,该面板继承自SCMBillFilterUI。2.2.2.编写继承类 对于服务器端,继承com.kingdee.eas.base.report.app.ReportServerBase编写扩展类。2.2.3.生成元数据表2.2.3.1.通过Excel模板生成数据脚本 填写Excel中的信息,点击生成SQL可以生成报表的元数据SQL脚本。在报表开发之前必须先将元数据表生成到数据源中。2.2.3.2.填写元数据表T_BAS_Report必须填写内容如下:字段名称字段类型描述FIDVarchar(44)报表主键FNameNvarchar(100)报表名

5、称,支持多语言FREPORTSRVCLASSNAME, Varchar(255)服务器端扩展类名称,需要开发的服务器端类名称。FFILTERPANELNAME, Varchar(255)过滤条件面板的UI类名称FVIEWPERMISSION, Nvarchar(80)报表查看权限项FPRINTPERMISSIONNvarchar(80)报表打印权限项2.2.3.3.填写T_BAS_ReportHeaderReportHeader,描述的报表表格表体内容。该内容也在扩展类中通过代码完成。固定列报表推荐通过元数据填写。名称类型说明FIDVarchar(44)主键FParentFieldNameVa

6、rchar(50)父项,对于需要双重,或者多重表头,需要填写。FReportIDVarchar(44)报表IDFCaptionNvarchar(255)标题FFieldNameVarchar(50)对应结果集的FieldName,关键字,必须唯一。FDecimalFieldVarchar(50)对应精度控制字段。通过该字段对应数值,控制本字段的精度FDECIMALInt数量精度,如果未指定FdecimalField,则取该值FColTypeInt列类型,字符串1,数量类型:2FWidthInt列宽度,默认100FAlignInt列对齐方式,左对齐1 中间对齐 2 右对齐 3FLevelInt所

7、在级次FIndexInt显示顺序FMergeableInt该列是否支持合并2.2.3.4.填写T_BAS_RPTFormatConditions条件格式化应用场景是某个单元格数据满足一定条件的时候,需要对该单元格或者单元格所在行进行一些修饰。如:修改字体,前景色、背景色等。典型应用是:如报表小计会要求淡黄色显示,某种状态单据行颜色不同等等。该内容也在扩展类中通过代码完成,对于固定的条件格式化内容,推荐通过填写元数据来完成。名称类型说明FIDVarchar(44)主键FIndexInt顺序号FReportIDVarchar(44)报表IDFFieldNameVarchar(50)对应结果集的Fi

8、eldName,关键字FCellValueVarchar(50)字段值1FCellValue2Varchar(50)字段值2FConditionInt条件:值参加Java代码FApplyRowInt是否应用整行FBackColorInt背景色。-1代表不设置。RGB颜色值FForeColorInt前景色。-1代表不设置。RGB颜色值FFontBoldInt字体是否粗体,-1代表不设置 0:正常 0:粗体2.2.4.EAS主界面增加报表调用入口UI类对应:com.kingdee.eas.base.report.client.ReportViewerUI。界面参数对应T_BAS_Report.FI

9、D。3.报表分类3.1.普通报表3.1.1.概述 普通报表是指二维表形式的报表,服务器端完成数据构造,并将结果返回到客户端。客户端根据服务器端返回结果进行展现。对于需要支持虚模式取数的报表,请参考虚模式取数方式报表开发。 下面以科目余额表为例,描述普通报表开发过程。假设需要的科目余额表如下:过滤界面:报表展示界面: 3.1.2.过滤界面 在BOS中,新增过滤界面UI,UI有两种继承方式:mon.client.SCMBillFilterUI.SCMBillFilterUI 通过BOS放入需要的界面元素。如科目F7等。处理完界面后,将其发布,生成AbstractXXXFilterUI.java代码

10、,继承自mon.client.SCMBillFilterUI,在构造函数中填写: public XXXFilterUI() throws Exception super(); isReport = true; 同时,填写其它需要在界面初始化的代码。将需要放入过滤条件中的界面元素放入FilterManager中,参考代码如下: CompositeFilterElement elements = new CompositeFilterElement(CompositeFilterElement.AND); elements.add(new SingleFilterElement(number, p

11、rmtNumber); . getFilterManager().setElement(elements); getFilterManager().setMainOrgElement(mainOrgElement, getPropertyOfMainBizOrg();com.kingdee.eas.base.report.client.ReportFilterUI 继承这个基类能帮助减少些工作量,不需要再从控件取值传给服务端。开发人员工作量基本只剩下initComp()方法的开发,因业务需求初始化一些控件。3.1.3.服务端类继承自com.kingdee.eas.base.report.app

12、.ReportServerBase。该类需要完成的方法如下: /实模式取数 protected IRowSet getReportData(String reportID, RptParams filter) throws Exception return DbUtil.executeQuery(getContext(), Select * from MyTestReport); protected ReportTitles getReportTitles(String arg0, RptParams arg1) throws BaseException ReportTitles titles

13、 = new ReportTitles(); String bizDate = getBizDateFromFilter(arg1); titles.AddTitle(0, getResource(BIZ_DATE) + : + getResource(FROM) + bizDate0 + + getResource(TO) + + bizDate1); return titles; getReportData方法:构造报表数据集,并通过IRowSet返回,属于实模式取数。传入参数是reportID对应T_BAS_Report.FID,filter是从过滤界面中获取的内容,可以用于构造SQL的

14、查询条件。 getReportTitles方法:返回报表的Title区域。 每行放置3列,最多支持4行,也就是Index最大数量是11。3.2.虚模式取数报表3.2.1.概述虚模式取数是指从服务器端到客户端数据不是一次性传递完成,而是根据界面填充要求,每次获取较少的数据量传输到客户端。报表的虚模式取数基本原理说明:在服务器端构造完整报表数据,并将结果存入到EAS的临时表中。客户端展示数据时,向服务器端发送请求,服务器端返回数据范围(默认为100行),从临时表中取出数据返回。客户端将获取到的数据缓存,下次客户端展示数据时,会检查缓存中是否存在该数据,如果存在,则直接从缓存中获取即可。客户端报表退

15、出,则清除临时表内容。3.2.2.过滤界面 开发过程中仅服务器端类不同,过滤界面与普通报表相同。3.2.3.服务端类 服务器端类仍然继承自com.kingdee.eas.base.report.app.ReportServerBase。不同的是需要覆盖两个方法:/与buildReportData方法区别在于该方法并不返回结果集而是返回临时表名称。protected String buildReportDataForVirtual(String reportID, RptParams filter)/该方法用于返回一页数据。注意数据排序一致性,避免取数混乱。public IRowSet getD

16、ataForOnePage(String reportID, RptParams filter, String tableName, int start, int rows) throws BOSException3.3.多页面报表3.3.1.概述与普通报表区别在于,多页面报表可以通过导航按钮对报表内容进行翻页浏览。多页面报表基本原理说明:需要提供用于导航的结果集。显示数据需要按照导航结果过滤。多页面报表如下图:3.3.2.过滤界面 开发过程中仅服务器端类不同,过滤界面与普通报表相同。3.3.3.服务端类服务器端类仍然继承自com.kingdee.eas.base.report.app.Rep

17、ortServerBase。不同的是提供getList方法。/该方法返回导航结果集合public IRowSet getList() throws Exception在getReportData的filter中,可以通过如下方法获取导航内容:HashMap map = (HashMap)filter.getObject(IReportMove.POSISTION);参考示例如下:DbUtil.execute(getContext(), sql, new String (String) map.get(fnumber), (String) map.get(fname_l2) ); 注意:Key必

18、须是小写的。如果是虚模式,需要实现buildReportDataForVirtual和getDataForOnePage方法。4.过滤界面 过滤界面样式为(汇总方式页签放置KDTable控件): 由于过滤界面本身并未处理该控件类型,如果不进行特殊处理,保存方案将不会保存这部分设置。同时“下次直接以该方案进入”也将由于参数对象不能获取而导致每次都会弹出过滤界面。可以增加处理类,将以下代码直接拷贝到过滤界面的UI类中,作为内部类直接调用:/* * * 描述:该类用于将KDTable内容传递到服务器端 */public class KDTableFilterElement extends Singl

19、eFilterElement private KDTable table; /* * * 描述:构造函数 */ public KDTableFilterElement(String id, KDTable component) super(id, component); this.table = component; /* * * 描述:获取KDTable的Name */ protected String getName(Object obj) if (obj instanceof KDTable) return (KDTable) obj).getName(); return null; /

20、* * * 描述:由于SingleFilterElement本身不支持KDTABLE控件需要进行特殊处理 */ public void addCustomerParam(CustomerParams cp, String key, Object obj) for (int i = 0; i table.getRowCount(); i+) for (int j = 0; j 0) String key = null; for (Iterator it = keySet.iterator(); it.hasNext();) key = (String) it.next(); if (key !=

21、 null & key.startsWith(_) int index = Integer.parseInt(key.substring(key .lastIndexOf(:) + 1); String fieldKey = key .substring(1, key.lastIndexOf(:); if (fieldKey.equals(isTotal) table.getRow(index).getCell(fieldKey).setValue( Boolean.valueOf(cp.getCustomerParam(key); /* * * 描述:将单元格的值,增加到RptParams中

22、 */ public void addRptParams(RptParams cp) ArrayList list = getParamterFromKDTable(); cp.setObject(getId(), list); /* * * 描述:从表格中获取参数 */ private ArrayList getParamterFromKDTable() ArrayList list = new ArrayList(); for (int i = 0; i table.getRowCount(); i+) HashMap map = new HashMap(); for (int j = 0

23、; j table.getColumnCount(); j+) IColumn col = table.getColumn(j); map.put(col.getKey(), table.getRow(i).getCell(col.getKey() .getValue(); list.add(map); return list; 5.套打 报表框架已经实现套打,但套打模板的设置需要通过eas的套打管理来实现.5.1.生成数据源 根据报表生成bos-query的数据源: 执行后将产生两个数据源,可以在“套打管理”中查看。分别为报表数据源(报表类名+.bos-query)和标题数据源(报表类名+_

24、title.bos-query)5.2.新建套打模板 进入“套打管理”,新建套打模板: 对报表套打页面进行编辑: 通过上面设置保存后可以在报表中选择套打模板进行报表打印。6.权限6.1.添加权限项 进入BOS Studio中,打开需要增加报表权限的permission元数据文件,增加报表的查看权限,“详细信息”中的“实体对象”不设置,“引用对象”不设置,由于所有的报表都是采用同一个reportViewUI。扩展属性中需要增加主业务组织的设置,如下图:6.2.同步权限 以administrator方式登录EAS,选择【用户管理文件同步权限数据】功能,进行权限同步。6.3.修改T_BAS_Repo

25、rt权限字段 修改T_BAS_Report的打印和查看权限字段:Update t_bas_report set FPrintPermission=OtherFeeTotalReportPrint,FViewPermission=OtherFeeTotalReportView where fid=vlA6ApdoikO58k6tGbRmlM5PzmM=7.二次开发日志记录、增加个性化的菜单功能、单元格事件处理、单元格格式化的处理,需要继承ReportListener类实现。7.1.新建插件类二次开发插件类必须继承ReportListener类,ReportListener是一个abstract类

26、,插件类参考代码:public class XXXReportPlugin extends ReportListener /* * * 描述:初始化处理 * */ public void onInitialize() throws Exception super.onInitialize(); /* * * 描述:打印完成后的事件处理 */ public void fireAfterPrint() throws Exception super.fireAfterPrint(); /* * * 描述:获取语言资源文件对应的值 */ private String getResource(Strin

27、g strKey) /*菜单单击事件 * param name 菜单名称 * throws Exception */ public void onMenuClick(String name) throws Exception /*单元格格式化事件 * param event * throws Exception */ public void onCellFormat(CellEvent event) throws Exception /*单元格单击事件 * param event * throws Exception */ public void onCellClick(CellEvent event) throws Exception PlanerPluginClassName 类中覆盖 onInitialize()方法,这个方法的作用是动态的添加菜单,并在工具栏上建立相应的按钮。只能在这个方法中添加,目前添加菜单后不能删除。7.2.修改元数据表修改T_BAS_Report表,设置报表对应的FpluginClassName字段为对应的插件类:update t_bas_report set FPluginClassN

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1