WEB报表系统的研究与应用[摘要]web报表是当前企业信息系统报表应用的发展方向。本文提出了一套在web环境下的报表生成系统的设计方案,以xml为报表数据和格式的描述及表现手段,以应用服务器为中心进行web集成,并利用软件构件来搭建基于web的报表应用,动态生成pdf或html格式的报表,并实现报表打印和cvs导出。并且在应用的过程中还利用了将传统的关系型数据通过o/r映射工具转化为持久对象,从而引入以对象的形式来操作数据库数据的创新性设计思想进行设计,最终的实验对比及分析展示出了这两种方式的利弊。[关键词]报表系统j2eehibernatexml1.引言随着internet的广泛应用以及web技术的日益成熟,b/s结构已逐步成为被大众认可的一种先进的软件系统构建模式。b/s结构主要特点是客户端利用浏览器访问服务器端的业务逻辑以实现复杂的功能,由于其良好的分布式结构、跨平台特性,已逐渐成为应用软件开发的一种发展趋势。传统的c/s体系结构正逐渐被更灵活的web分布式环境所取代,b/s架构解决方案业已成为企业级应用软件解决方案的主流。报表是信息管理系统中非常重要的而且往往是必不可少的组成部分,也是商务智能的一个重要组成部分,被誉为应用软件的灵魂,在应用系统的设计实现中占有十分突出的地位。随着web应用的逐步发展,基于浏览器的客户端也出现了一些新的问题,其中比较重要的是b/s模式下报表的设计和展现问题。基于web方式的报表开发技术相对c/s模式不太成熟,这就给报表开发人员带来很多困难。有很多商业报表工具如crystalreport、华丹报表等,商业报表工具存在数据和格式之间耦合度高,报表定义和报表数据离开了格式就毫无意义,难以修改维护、不能重用等缺点,因此难以适应生产过程的多样性和变化性,这样无形增加了系统修改维护的难度,大大浪费了人力和财力。本文提出了一套切实可行的基于xml的可重用web报表的解决方案并予以实现。该方案提出的报表系统架构支持多种数据源,并可以生成多种格式的文件,模板采用了xml技术,将报表格式和报表数据分离,并引入报表参数的概念,可以有效降低格式和数据之间的耦合度,提高系统的可移植性,增强格式和数据的可重用性,可以跨平台使用,所提供的api形式简单,易于扩展。该解决方案可以充分利用多层体系架构的优点,为设计和实现全新的web报表系统提供了强大的能力支撑而且能够很好地集成到各种web应用系统中[1]。2.报表系统的架构图1系统架构图无论是哪一种web报表应用,所要完成的工作都是相似的,就是用户在浏览器端输入报表的名字,运行在服务器端的引擎解析这个报表的配置文件,然后相应的从数据库中提取数据,然后将数据填充在报表中,最后在浏览器中显示给用户,用户可以打印,也可以输出为csv或者pdf等文件。其中报表的格式相对来说是稳定的,而数据是经常发生变化的,这样就可以将报表格式定义为报表模板,多种报表格式就产生了多个报表模板,同时要支持多种数据源。通过对报表系统基本功能的分析,可以将报表系统划分为报表设计器,用来设计各种各样的格式复杂的报表模板,报表引擎,用来提供报表的打印和输出功能。本文提出的报表系统的系统架构图如图1所示。3.报表系统的实现3.1报表模板如何设计功能强大且通用的报表模板格式是非常重要的,基于报表元素之间的复杂性和xml技术的优点,采用xml技术表示报表模板是最好的选择。为了支持更方便和更灵活的数据表示方式,报表模板中还包括参数、变量、字段及查询语句等。报表模板中的所有元素都是通过在用户在网页中对数据源,数据集,表头,明细等的动态选择自动生成的。参数是网页中用户的输入传递给报表引擎的数据,例如季度报表可以传递给报表具体的季度得到关于这个季度的报表数据。变量是一个表达式,可以根据报表的相关数据动态计算结果,比如计算汇总统计等。字段将数据源映射到报表域,根据数据源的数据逐行填写在报表域中。有了这样统一模板的定义,无论多么复杂的报表都可以遵循这样的定义,都可以由报表引擎解析生成报表,通用性和扩展性比较强。3.2面向对象型的数据展现方案在系统对数据库进行操作的时候,面临两种选择:dao和hibernate。dao(dataaccessobject)是传统的应用的比较广泛的技术。开发人员可以通过dao类自己编写sql对数据库进行操作。应用程序使用面向对象的思想,建立了若干个类,但是数据库系统是面向关系的,所以底层的数据库系统破坏了这种对象关系,需要人工做o/r映射。而hibernate技术正是对数据库进行o/r映射成功的例子。于是选择了hibernate技术。hibernate其实就是在jdbc上面封装的一个数据访问子层,这一层实现了面向对象的思想和关系数据库之间的衔接,使得开发人员能够较好的使用和控制数据库操作。在实现起来也较为方便,利用xml可以很方便的实现这种映射[2]。下面就分析面向对象的数据表现形式所带来的不同以及优缺点:首先分析不同之处:利用hibemate后,程序中不可以直接用jdbc连接数据库,所以每张报表都必须拥有一个datasource文件;而当一个查询语句就能得到所需要的全部数据时,就可以直接在.rptdesign文件(报表模板文件)中用jdbc和sql来实现数据源。下面我们来看一下各自的优缺点:(1)当报表所需要的查询语句比较简单而且一个查询语句就可以的情况下,普通的关系型就很简单方便。(2)对于复杂的数据源,需要用多个查询语句来得到所需的数据的时候,每张报表拥有一个独立datasource是很方便的。(3)当用户的需求改变,尤其是报表的表格行列内容发生变化时,对于一般的关系型数据库操作,必须修改查询语句,那将是非常麻烦的,甚至是不可以实现的;但对于单独的datasource文件,不需要修改查询语句,只需要对数据组织部分的代码进行相应的修改即可,使用起来相当方便灵活。通过以上的分析,可以了解到面向对象的数据表现方式给基于j2ee平台的应用项目开发所带来的优越性。在运用了hibernate技术后,每张报表都需要一个单独的数据源java类,对于每个数据源类,都要有一个对应的前台展现的xml文件。有了这两个最基本的元素后,还需要的就是管理这些报表正常地运行于系统中的servlet。这个servlet的功能是产生报表,工作过程为:页面将报表名传给servlet后,servelet建立数据源实例,把报表配置xml文件与数据源实例一起传给报表引擎,然后由引擎生出pdf,html,cvs等文件。3.3报表引擎报表引擎是报表系统的核心组件,应用程序可以很方便地调用报表引擎提供的接口设定报表模板,并完成报表的输出和打印。报表从一个描述报表所有属性的xml文件开始。其中定义了报表的layout、所展现数据的属性两大内容,这两大主要因素就可以决定一张报表。由报表引擎解析这个xml文件,xml文件经过逐项分析后就被提交到reportdesign类,然后经过编译以后被送到report类,在此处经过变量一致性检查和优化等操作后,产生一个临时的.rptdesign文件。这个文件被填上适当的数据后就基本可成型为一张完整的报表。所以为了提高生成报表的效率,从第一次生成该.rptdesign文件以后,就保存于服务器中特定的目录下,等待命令,填充数据,从而生成新的报表。填完数剧的.rptdesign文件被送到print类,根据要求或是直接显示到屏幕上,或是导出为pdf、html、csv等格式的文件。通过这一系列过程后,一张完整的报表就产生了[3]。4.结束语随着电子商务与电子政务的蓬勃发展,如何实现快速有效的web报表系统已成为软件应用系统研究的重要课题。本论文提出了一种基于xml技术的面向对象型数据的web报表系统的解决方案,该解决方案针对报表系统的基本模型,设计出了通用的报表模板和报表引擎,能够满足用户对各种各样复杂报表格式的需求,用户可以很方便地调用报表引擎的api。本论文重点阐述了在j2ee平台下基于对象型的数据的创新性操作思想,同时通过该思想设计的系统已经在交通信息平台中得到了实际应用,结果证明此方案具有性能高,开放性、可移植性和扩展性好的特点,并且适用于各种web应用系统对报表的需求。参考文献:[1]唐远涛、苗放著.基于web报表开发的研究与应用[d].四川:成都理工大学,2006.[2]herbert-hill著,朱德爽、胡凤燕、胡复明等译.c#完全手册[m].北京:电子工业出版社,2002.15-18.[3]