苏州网站设计电话,网页空间,常州模板建站代理,大连做公司网站dada-report报表整合UReport报表设计器工具结合日常工作和学习实践#xff0c;针对传统报表子站面临的问题#xff0c;尝试借助UReport报表设计器解决1.可在现有工程基础上引入Ureport2报表设计器Ureport报表设计器是一个基于WEB的在线报表设计器#xff0c;其具有良好的界面…dada-report报表整合UReport报表设计器工具结合日常工作和学习实践针对传统报表子站面临的问题尝试借助UReport报表设计器解决1.可在现有工程基础上引入Ureport2报表设计器Ureport报表设计器是一个基于WEB的在线报表设计器其具有良好的界面设计和强大的报表设计功能支持报表多种格式导出分页、报表通用性设计等Ureport2支持简单、复杂报表的设计能够很好地嵌合实际业务需求其报表设计可通过纯sql或者是配置的方式实现以此可针对不同的人员进行管理。2.针对多租户、复杂报表设计Ureport2可在工程中自定义报表存储器和数据源在代码逻辑层模拟实现多租户概念不同的租户访问不同的报表存储器、数据源信息3.现存问题a.学习成本将UReport报表设计器整合到已有项目并非一件难事只需要通过简单的配置便可完成主要的工作量在于后期报表的设计、维护以及UReport2报表设计器的学习需要耗费一定的时间和精力需要开发人员了解报表设计的流程、原理掌握排查报表设计错误的方法熟练应用。b.与实际业务整合现有报表子站中的存量报表数量较多如果所有的报表都要重新进行设计、维护将是一个巨大的工作量。UReport2仅仅是一个报表设计器如果要结合需求实现多租户概念相应需要额外对应的维护页面与接口设计针对大数据量数据处理还存在一定的问题其中涉及缓存概念有时候处理特大数据量的时候后台报错考虑需要深入UReport源码分析或者是相关配置调整且其提供的图形统计图显示相对EChart而言并不太友好。从这段时间的学习来看Ureport是比较方便且功能强大的开源插件其与实际业务的整合、数据的处理还需要时间的验证毕竟还需要考虑额外诸多因素在后续的学习中会考虑进一步完善以下简单提供本人在毕设中使用Ureport的一些学习笔记参考个人建议可借助网络资源去结合学习会比较好理解https://www.w3cschool.cn/ureport/SSM框架整合UReport报表设计器参考链接https://www.w3cschool.cn/ureport/整合过程分析1.在pom.xml文件中引入相关依赖dependency完整pom.xml参考配置project 2.在web.xml文件中配置UReport的Servletservlet3.引入UReport相关的配置文件有三种方式实现配置文件引入根据实际工程搭建的情况灵活选择引入的方式方式1直接在web.xml中加载ureport-console-context.xml文件针对普通的Maven工程配置没有采用spring文件listener方式2在已有的spring配置文件中导入数据import 方式3如果没有spring配置文件直接创建一个context.xml中?xml version1.0 encodingUTF-8?此处对已有的SSM项目整合做说明无论是以上哪种方式实现必须保证在web.xml需要加载相应的spring配置文件,否则项目在启动的时候就会报视图解析失败没有相应的designer在整合启动的过程中可能由于maven相关jar包没有正常导入导致ureport依赖的相关jar包非正常导入项目启动报错删除maven仓库的内容重新导入jar包以下简单对整合过程中可能遇到的问题做简单的说明问题1指定属性无法找到是由于在整合的过程中Ureport报表设计器需要指定的属性并没有在自己搭建的工程中指定因而报错启动的时候如果报找不到指定的属性则需要在属性配置的时候需要不存在未配置的属性在applicationContext-dao.xml、springmvc.xml下加载了属性文件添加属性忽略掉没有定义的属性查找报错内容如下所示针对spring配置文件处理针对普通maven工程处理 配置属性说明Ureport有自定义的配置属性这些配置属性是与报表存储、设计相关的具体内容需要根据实际的业务需求去自行配置如果不需要则在代码逻辑层对业务流转进行控制即可问题2404或指定designer设计器不存在在整合的ssm中配置ureport出错通过链接访问数据的时候无法找到指定的页面初步考虑路径配置之后查看web.xml配置发现在之前的前端控制器配置中默认拦截了所有的请求因此在请求的时候直接被dada-report这个前端控制器拦截但dada-report这个控制器下并没有指定的ureport相关的内容存在因此会报404访问路径错误或者是designer报表设计器不存在的问题此处需要对dada-report拦截的内容做限制参考前端控制器拦截拦截说明、拦截顺序、执行顺序原始配置直接配置如下所示但如果出现designer视图不存在考虑是相应的文件没有加载进去因为在springmvc.xml中加载了有关的ureport2配置文件因此要在初始化加载spring容器的时候将对应的springmvl.xml配置文件进行加载否则无法找到相应内容出现如下所示错误要么就设置Servlet默认启动的时候加载配置文件实际SSM整合说明如下依赖配置添加ureport相关的依赖jar包为了避免配置文件混乱也避免改动原有ssm配置此处单独在resources目录下创建一个文件夹ureport存放ureport-custom-context.xml配置文件以编辑相关的ureport配置并在web.xml中配置相应的全局参数必须在context-param中配置加载文件配置完成启动项目访问链接http://localhost:8084/ureport/designerUreport报表设计器显示如下可以适当了解web.xml各个参数配置的含义完成配置根据W3CSchoool等相关教程完成业务和报表工具的整合以下简单根据教程完成业务流程简单实现https://www.w3cschool.cn/ureport/ureport-y4op2han.html测试的时候如果出现按钮点击无反应则可能是弹出式窗口被浏览器拦截只需要允许弹出即可或可直接通过url直接访问通用报表设计整合无论是机构、还是平台报表存储器此处操作的表字段都是统一的因此此处做一个调整设置通用的方法将重复的内容统一起来用不同的字段标识进行划分由前台页面传入数据限定相应的标准不需要重复操作代码a.创建指定数据表结构(字段需保持一致)存储报表文件、数据源配置文件概念上区分实际内容基本一致机构相关存储器ureport_file、ureport_data_source_file、平台公共存储器ureport_backup、ureport_data_source_backup保持数据字段相应一致主要包括file_id(主键)、file_name(文件名称)、file_content(文件内容)三个基本字段具体其余字段的设计则根据实际工程需求进行扩展。表字段b.创建通用的实体类UreportFileManagerUreportFileManager类作为通用的实体类使得在dao层只需要指定需要操作的表名tableName便可实现对不同的数据表进行操作UreportFileManager基本结构定义需要与相应数据表的属性一一对应。Model实体Mapper层查找参数设置:c.通用mapper方法实现为了实现mapper方法操作的通用性引入UreportFileSearchParam类用于封装操作参数其主要包括操作表名tableName、操作实体ureportFileManager以及与报表文件数据库实体相对应筛选参数。UreportFileManagerMapper接口通过接收searchParam指定的参数组合操作指定的报表文件存储器实现以参数配置去访问不同的数据库并与UReport报表引擎进行数据交互从而间接减少代码设计的冗余量并便于报表存储器的不限量扩展。针对报表的管理与权限的控制则考虑在同一个数据库中划分不同的区域用以区分不同的机构、不同的部门所访问的存储空间不同在mapper层借助searchParam指定筛选条件提供相应的接口供相应的Serivce层、存储器Provider进行调用对应mapper层配置对应mapper.xml?xml version1.0 encodingUTF-8?
对应状态概念调整public_state可理解为开发状态开发中0、已完结1亦可理解为公开状态私有0、公开1visible_state可见状态针对部分已完结的报表但想对用户隐藏0.不可见 1.可见Ureport报表工具学习报表设计器访问路径http://localhost:8084/ureport/designerhttp://host[:port][/context-path]/ureport/designer1.报表存储存储目录配置a.默认的报表存储目录配置默认情况下在项目的WEB-INF目录有会自动生成了一个名为“ureportfiles”目录这个目录是UReport2提供的默认的报表文件存储目录也就是说默认情况下UReport将在项目的WEB-INF/ureportfiles目录下存储设计好的报表文件。默认报表存储目录 如果项目在Eclipse的开发环境运行时采用的是jetty(比如run-jetty-run插件)那么就可以在项目的WEB-INF目录下发现一个名为“ureportfiles”目录。 但如果采用tomcat运行项目那么在WEB-INF目录下就没有一个名为“ureportfiles”目录原因是在Eclipse中运行tomcattomcat需要创建一个临时的工作目录(该目录一般位于workspace.metadata.pluginsorg.eclipse.wst.server.coretmp0wtpwebapps下)所以采用tomcat运行项目则需要到这个临时的工作目录下找到对应的项目再到这个项目的WEB-INF目录下找到对应的“ureportfiles”目录运行搭建好的项目打开报表设计器点击工具栏的保存按钮弹出如下所示窗口完成数据保存刷新工程目录则可看到对应生成的数据信息b.自定义报表存储目录配置在项目对应配置文件参考整合过程此处ureport独立的spring配置文件在resource/ureport/ureport-custom-context.xml相应在其ureport目录下创建一个ureport-custom.properties配置文件存放有关ureport配置的基本属性上面的Bean配置实际上就是一个标准的org.springframework.beans.factory.config.PropertyPlaceholderConfigurer类配置通过配置PropertyPlaceholderConfigurer可以实现加载Spring外部properties的作用所以项目中已配置了PropertyPlaceholderConfigurer类那么直接在这个类对应的properties文件中添加对应的UReport2属性即可而不需要额外配置config.properties文件完成文件加载配置在相应的配置文件中配置属性即可表示在E盘根下名为ureportfiles的目录中存储报表文件需要注意的是这里指定特定目录时一定要保证这个目录已存在否则将不会被采用比如上面的E盘下名为ureportfiles的目录就需要预先创建好。指定文件目录不存在则提示如下c.自定义报表存储器UReport2默认提供的名为“服务器文件系统”的报表存储机制实际上是实现了UReport2提供的com.bstek.ureport.provider.report.ReportProvider接口该接口源码如下package 实现了ReportProvider接口后只需要将实现类配置到Spring中让其成为一个标准的Spring Bean这样UReport2就会检测到它而将其加载。下面是UReport2默认提供的名为“服务器文件系统”的报表存储器源码package 禁用系统提供的默认报表存储器 如果想使用自定义的报表存储器同时又不想再使用系统默认提供的”服务器文件系统“的报表存储器那么只需要在相应的报表配置文件(举例config.properties)文件中添加一个名为ureport.disableFileProvider属性将其值设置成true即可。 通过实现ReportProvider接口可以开发出其它类型的报表存储器比如开发一个新的报表存储器将报表文件存储到数据库、FTP等。参考链接存储报表至fastdfshttps://blog.csdn.net/qq_35170213/article/details/80290797存储报表至数据库https://blog.csdn.net/qq_35170213/article/details/80290425自定义报表存储器数据库1创建存储报表信息的数据表考虑实际需求此处分别定义了CustomProvider报表存储器用于测试可结合实际业务球球完成数据表设计在基础属性的基础上添加其他字段用于业务的逻辑扩展基本设计仅供参考/** 建表 sql - 基本参考 */
为契合业务需求初步考虑数据表设计如下具体的内容根据实际需求做调整2dao层/Mapper实现方法基本的增删改查此处提供一个通用的接口模板具体实现的逻辑则需要根据实际的业务需求去设计例如整合报表平台的时候需要考虑实际报表权限的问题因此需要考虑根据当前用户登录的权限所属的机构等进行条件筛选PS:由于报表存储器的数据库设计基本保持一致由此可考虑创建一个通用的dao、service进行控制只需要通过前端页面调用接口传入数据表名tableName即可控制要操作的存储器由此可间接实现多租户报表管理的概念不同的租户可访问不同的报表存储器-- 此处为简单配置简单演示单表操作Mapper
具体的mapper.xml文件则需要参考实际表设计完成相应配置需要注意的是name、content这两个属性这两个属性是报表设计的必要属性以下提供基本模板实际内容参考实际需求进行调整?xml version1.0 encodingUTF-8 ?
报表内容存储的类型Mysql数据库中表字段设置为‘mediumblob’类型在mapper配置的数据类型为‘BLOB’、‘LONGARBINARY’两种类型在数据库中存储的形式报表存储器设计基于springboot的参考import 基于SSM的设计参考public 测试问题分析创建xxxProvider继承ureport的ReportProvider方法完成报表存储相关的操作测试数据能够正常保存但是却无法正常访问分析在保存报表文件信息或者是打开报表文件的时候请求接口报错。理想结果自动封装相应存储的数据信息实际结果只封装了第一个定义的存储器随后报如下错误查看数据库mapper配置一开始考虑是多个报表存储器冲突导致的问题之后测试无论是启用或禁用服务默认报表存储器还是出现同样的问题数据库访问也没有看见明显的错误随后查阅代码发现问题所在由于一开始考虑机构报表存储器和平台备份报表存储器是类似的直接复制粘贴代码后期改动没有注意到一些细节性的问题设置断点也无法找到明显的错误点点击的时候加载就报错无法通过设置断点查找出错问题仔细查看报错信息发现问题所在可以看到保存信息显示两条sql语句查询的结果不同前者正常查找数据而后者查找数据到“Parameters”参数没有正常传递则异常结束关闭数据库连接并没有正常的返回网上查阅输出流格式冲突具体原因并不明确考虑是报表内容存储格式问题由mybatis逆向工程生成的mediumblob对应的是LONGVARBINARY而网上参考是BLOB修正后再次测试数据方能正常显示由此考虑报表内容存储格式导致出错具体可以参考相关链接了解LONGVARBINARY与BLOB的区别以上描述的问题均为mapper配置文件出现问题导致在配置mapper文件时需要注意mapper层接口和相应配置文件的名称、方法名意义对应需要注意方法的定义入参、出参需要注意参数定义的类型文本型字符串需要考虑数据定义的类型要相对应自定义报表存储器ftp-待定参考链接https://blog.csdn.net/qq_35170213/article/details/802907972.数据源配置打开UReport2的报表设计器可以看到UReport2提供了三种类型的报表数据源如下图所示三种类型的数据源分别是直接连接数据库Spring Bean以及通过实现com.bstek.ureport.definition.datasource.BuildinDatasource接口提供的内置数据源。配置1直连数据库直接连接数据库比较简单就是在项目的classpath中添加好相应数据库的驱动Jar包后在弹出的窗口中配置数据源连接信息即可如下图所示在页面用数据源配置链接数据库注意不要刷新浏览器刷新之后链接会清空点击测试连接可以看到对应目录下生成了相应的数据源右键选择需要操作的数据源可进行“添加数据集、编辑、删除操作”根据相应的数据集配置相关的数据如果连接测试失败查看失败原因依次进行查找 Maven引入Oracle驱动依赖在pom.xml文件中添加oracle驱动maven依赖存在一定的问题可参考链接了解相关内容https://blog.csdn.net/erlian1992/article/details/74279106由于Oracle数据库JDBC驱动包的使用的JDK版本有所区别一定要下载对应的JDK版本的Oracle数据库JDBC驱动JDK1.5的选择ojdbc.jar驱动包如果是JDK1.6及以上版本的选择ojdbc6.jar驱动包如果JDK环境是JDK1.8那么选择ojdbc6.jar驱动包。方式1可以通过在官网下载相应的jar包https://www.oracle.com/technetwork/database/application-development/jdbc/downloads/index.html方式2如果本地安装了oracle数据库则可在指定目录查找到相应的ojdbc6.jar(其路径为对应安装目录E:OracleappAdministratorproduct11.2.0dbhome_1jdbclibojdbc6.jar)接下来就是手动向Maven的本地仓库中添加Oracle数据库的JDBC驱动依赖。安装的前提是你的电脑必须安装了Maven并且配置了Maven环境变量参考maven配置通过cmd窗口或Eclipse的Maven插件、IDEA的Terminal执行命令虽然使用的工具不同但是指定的文件位置和Maven坐标都是一样的需要注意的是如果是使用方式2需要将相关的ojdb6.jar包放到其他文件夹中不要在oracle安装目录下直接执行指令可能会出现Oracle拒绝访问的情况此处用eclipse的maven插件实现Terminal$ mvn install:install -file -DfileF:jarojdbc6.jar -DgroupIdcom.oracle -DartifactIdojdbc6 -Dversion11.2.0.1.0 -Dpackagingjar根据实际调整路径进入到指定的目录下直接执行$ mvn install:install-file -Dfileojdbc6.jar -DgroupIdcom.oracle -DartifactIdojdbc6 -Dversion11.2.0.1.0 -Dpackagingjar执行完成之后可以看到对应的mvn安装仓库有相应的资源生成完成jar导入到本地仓库之后则可在项目中添加使用oracle相关依赖添加的依赖版本需要与指定的数据导入到maven本地仓库时的依赖定义一致,如果依赖引入失败查看对应的定义的版本、依赖是否一致!-- 添加oracle驱动依赖 --dependencygroupIdcom.oracle/groupIdartifactIdojdbc6/artifactIdversion11.2.0.1.0/version/dependency配置2SpringBean数据源Spring Bean类型的数据源可以选择Spring上下文中定义好的一个Bean来作为数据源点击图标在弹出的窗口中输入数据源名称及要采用的Bean的ID如下图所示保存后就可以在这个数据源下添加具体的数据集添加方法就是在这个数据源下右键在弹出的菜单中选择添加数据集在弹出的窗口中定义数据集名称、对应的方法名以及返回对象类型如下图所示如果springBean中没有指定id的bean兑现个此处在添加数据集选择方法的时候相应报错-空指针异常指定的bean对象不存在在Spring bean数据集配置中方法名我们可以点击右侧的“选择方法”按钮来选择当前Bean对应的类中定义的方法但这里对方法的要求是方法必须要有三个参数依次是String,String,Map比如我们上面定义的testBean里就包含两个合法的方法如下所示 对于一个合法的Bean数据集方法要有三个参数分别是String,String,Map依次对应数据源名称、数据集名称以及外部传入的参数MapBean的方法只有是这种结构才可以进行选择。对于数据集方法的返回值目前来说可以支持两种类型一种是我们TestBean中返回的MapString,Object类型的List集合另一种就是返回一个POJO类型的List集合比如像下面的方法 在上面的示例方法中返回的就是User对象集合这里的User对象就是一个普通的POJO对象。提供示例可以通过SpringBean自定义相关数据实现参考上述介绍设置了如下数据配置在dada-report下创建com.dada.report.datasource包创建相应的xxxBean类并在指定的ureport配置文件中配置bean对象或者是直接通过Component注解进行定义package 配置完成启动项目再次填写数据并点击保存按钮能够看到相应的SpringBean数据配置完成相应的会返回相关的方法选择相应数据源配置返回相应为数据类型如果不配置则需要手动添加字段配置3内置数据源内置数据源要求实现BuildinDatasource接口同时将BuildinDatasource接口实现类配置到Spring即可BuildinDatasource接口源码如下此处测试参考代码如下方式1借助JDBCUtils工具类自定义获取数据源package }在ureport配置文件中配置dataSource对象方式2通过spring管理DataSource数据源以注解方式获取数据源连接package 在ureport配置文件中配置dataSource对象多数据源配置问题在通过xml配置文件配置的时候使用Autowired注解其按住奥byType自动植入但如果文中配置两个相同类型的dataSource则在项目启动加载spring自动注入的时候会报错org因此在配置注解的时候需要明确注入的是哪个对象可以参考spring注解说明了解每个注解之间的异同参考链接https://www.cnblogs.com/think-in-java/p/5474740.htmlResource的作用相当于Autowired只不过Autowired按照byType自动注入BuildinDatasource接口实现类配置到Spring中后UReport2会自动检测到完成配置启动测试在报表设计器中点击数据源页签中的按钮在弹出的窗口中就可以选择定义好的内置数据源如下图所示查看配置是否正确可通过右键选择添加数据集如果数据正常显示则连接正常但如果出现“数据源不存在”或“后台空指针异常”则说明数据源配置存在问题需要进行修改调整数据源配置方法说明在数据源中有三个选择服务器启动期间数据源配置是有效当服务器重启后数据源配置并不保存除却在spring配置完成的springBean、内置数据源数据是在服务器启动的时候便加载直接连接数据源信息不会保存三种不同的数据源连接方式创建数据保存到指定的xml重启服务器后再次加载该模板数据也不会丢失基本的配置在xml文件中已做存储数据源直接连接在报表数据多的情况下如果环境替换则难以维护spring bean数据源需要指定spring 中 datasource的bean Id其会在IOC容器中获取内置数据源在spring配置该数据源对象即需要创建一个类其实现com.bstek.ureport.definition.datasource.BuildinDatasource接口封装数据源信息3.报表的基本使用参考链接https://www.w3cschool.cn/ureport/UReport2教学视频http://pan.baidu.com/s/1boWTxF5密码98hj4.报表设计器与业务结合在项目中整合报表设计器之后便可通过相关url完成报表数据的引用将其与实际业务进行整合以下简单说明ureport相关报表设计器的url说明报表相关url介绍报表设计器http://host[:port][/context-path]/ureport/designer报表预览http://host[:port][/context-path]/ureport/preview?_u报表名称预览正在设计中的报表注意事项在预览正在设计器中设计的报表时也就是_upUReport2会在点击设计器工具栏图标时将设计中的报表模版信息提交到服务器存放于当前用户的session中用户会话中所以一旦用户session失效如果我们再次直接预览_up类型报表时会看到“com.bstek.ureport.console.exception.ReportDesignException: Report data has expired,can not do preview.”这样的错误提示表示存放于session中的正在设计器中设计的报表模版已经失效不能预览。但如果_u的值是一个具体的报表名称则不存在这种问题只有正在设计器中设计的报表模版在预览中采用了这种机制这点需要注意。如果预览的不是正在设计器中设计的模版那么只需要给出具体的报表名称即可需要注意的是这里的报表名称要以其ReportProvider中要求的前缀开始比如http://localhost:8080/ureport2-demo/ureport/preview?_ufile:test.ureport.xml等。在线打印在UReport2的报表预览页面中可以看到UReport2提供了三种在线打印方式分别是直接HTML打印、直接PDF打印以及PDF在线预览打印。这其中直接HTML打印是利用浏览器的HTML打印功能实现能用于普通的A4纸类型报表页面的打印同时它不能打印出报表中定义的页眉页脚如果有定义的话。对于直接PDF打印以及PDF在线预览打印是服务端向浏览器中写入PDF流利用Chrome、Firefox、Edge这些浏览器可以在线显示PDF功能实现的打印这种是直接打印的PDF所以可以应付各种复杂报表纸张类型的打印输出。Firefox预览PDF在预览PDF时Firefox不允许当前frame外通过javascript调用其打印功能目前来看可能是Firefox的Bug所以我们需要手工点击其frame内部自带的打印按钮实现打印。在代码中使用报表在UReport2当中我们可以使用ExportManager实现在业务代码中导出各种类型的报表ExportManager接口源码如下package 因为ExportManager接口实现是配置在Spring当中所以要使用ExportManager接口我们需要首先通过Spring的ApplicationContext取到ExportManager实例对象我们可以通过ExportManager.BEAN_ID来取到对应的Bean实例。以下测试如何采用ExportManager导出HTML报表并将报表内容嵌入到一个JSP中。 首先需要采用报表设计器设计好一个报表模版文件将其保存比如报表模版保存后的文件名为demo.ureport.xml然后在项目中创建一个JSP这里之所以选择JSP是因为它最为简单可以保证所有的J2EE开发者都能看懂实际使用时可能是MVC框架、Ajax等但如果了解了在JSP中用法其它的就简单了在JSP中输入相应代码导出Html报表并将其写入到JSP中完整的JSP源码如下预览http://localhost:8084/ureport/preview?_ufile:hhhhh.ureport.xml在SSM配置基础上添加相应的jsp文件完成配置启动服务器访问测试http://localhost:8084/custom/report/page/other?urlreport/testReport考虑实际业务整合问题数据源配置问题