itest报表模块设计文档Word格式.docx
《itest报表模块设计文档Word格式.docx》由会员分享,可在线阅读,更多相关《itest报表模块设计文档Word格式.docx(39页珍藏版)》请在冰豆网上搜索。
日期
作者
说明
1.0
1-7章
C
2007-11-27
宫云鹏
创建7章具体内容
2.0
U
2007-11-28
完善第6章、第五章第二节
3.0
2007-11-29
加入目录,并排版
说明:
类型-创建(C-create)、修改(U-update)、删除(D-delete)增加(A-add)
序言
在很多实际的项目里,报表都是其中十分重要的组成部分,例如把查询结果以报表的形式呈现出来。
这里所提到的报表可不是简单的二维表,而是拥有复杂表头的、多维的、可以在运行期从数据库中自动读取数据、可自动分页、拥有丰富的页面元素(图片,超连接等)、支持分组和交叉表、支持打印、最好还能导出到Excel或Word…...。
但是显而易见,报表功能越强大,提供的服务越丰富,其复杂度也就越提高,所以仅靠石器时代的手工方式生成报表是不能满足需要的。
所幸,目前我们所熟知的几款报表工具功能上足够强大,而且都附有很方便的报表生成工具。
它们分别是:
JasperReport(+iReport),BIRT(+eclipse),水晶报表(+eclipse,JBuiler等等)。
之所以提到这三种报表工具首先是因为他们都是开放源码的(CrystalReportForEclipse1.0已经开源了)。
既然不用考虑费用,那在我们的项目中到底选用哪一个呢?
对于水晶报表而言,虽然其在.Net平台上表现十分抢眼,但是在Java平台上,多数的实现都是要收费的(例如ForJBuilder版),而且其Eclipse插件的资源消耗十分惊人。
所以我选择了纯Java的报表工具JasperReport与iReport的组合。
但是关于JasperReport的文档相对匮乏,其官方文档还是要收费的,所我希望利用这篇文章展示如何利用这一强力组合来进行基于Web的报表开发。
在此将火力集中在如何在Web环境使用JasperReport报表和报表的导出功能等方面,相信在iReport的帮助下,上手会很快的。
编写目的
对jasperReport+iReport开发报表的比较详细的向导。
设计原则
能够作为单独的模块使用,符合MVC架构体系,能够和I-Test产品低耦合度集成。
一.jasperReport技术简介
报表生成流程
JasperReportAPI:
Jasperreports生成的报表文件的生命周期和一个普通的java类非常相似。
在java当中,有一个以.java为扩展名的源文件,内容按java语言的规则去写,源文件通过编译器编译生成一个.class文件,当class使用的时候,它以一个实例的形式通过java的解释器加载到内存当中。
同样,一个Jasperreports报表文件也有一个通过DTD定义的xml格式的源文件,当报表生成的时候会把这个xml格式的源文件编译成一个jasper类型的文件,jasper文件可以在我们的应用程序中被加载生成最终的报表。
1.JasperCompileManager
net.sf.jasperreports.engine.JasperCompileManager类。
使用这个类的几个静态方法即可完成对报表的编译工作(具体参见api文档)
编译完成后可以JasperCompileManager有两种处理方式:
1>
返回一个JasperReport对象
2>
在.jrxml文件所在的目录生成一个.jasper文件
这两种方式是由程序员自己选择的。
个人比较倾向使用.jasper文件,毕竟报表的结构不是每天都在改动,所以每次重新编译报表并不是很划算。
2.JasperFillManager
net.sf.jasperreports.engine.JasperFillManager类
这个类的作用是用数据填充报表。
它可以使用JasperReport对象也可以使用.jasper文件做为报表模板。
它同样有两种处理方式:
返回一个JsaperPrint对象。
在.jasper文件所在目录生成一个.jrprint文件
这个类使用net.sf.jasperreports.engine.JRDataSource接口的实现做为数据源。
3.JasperPrintManager
net.sf.jasperreports.engine.JasperPrintManager
net.sf.jasperreports.engine.JasperExportManager
这两个类的作用是打印、导出报表
他们使用JasperPrint和.jrprint文件做为输入。
二.iReport报表开发工具简介
iReport是一个开源项目,它使用Jasperreports来创建复杂的报表效果。
它100%使用Java语言编写。
iReport是开源报表软件JasperReport的可视化设计工具,Jasperreports是用LGPL(LGPL是GNULesserGeneralPublicLicense(GNU宽通用公共许可证)的缩写形式)提交的,因此使用Jasperreports时的局限性较小,这就意味着我们可以在我们的商业软件中不用去购买它的license而使用它。
1.Fields,Parameters,Variable
在jasperreport中有三种类型的对像可以用来保存数据:
Fields/Parameters/Variables.这三种对象可以用在某些地方的Expression中,通过一定的逻辑在报表生成的时候动态的更改某些值。
Fields/Parameters/Variables有类型的概念,它们的类型就是一个标准的Java的Object。
1>
Field
Field在JasperReports是专门用来组织记录。
Field的创建有多种途径可以实现,我们可以根据在jasperreports中各种类型的数据源来创建我们所需要的Field。
在对象的Expression里你可以使用下面的语法来引用一个field:
$F{fieldname}
2>
Parameters
Parameters通常是用来在打印的时候从程序里传值到报表里.也就是说parameters通常的是起参数传递的作用。
他们可以被用在一些特定的场合(比如应用中SQL查询的条件),
在JasperReports中Parameters的机制是允许用户通过应用程序传递参数致报表当中。
在jasperreort中的某个对象中的expression可以通过下面的语法来访问一个当前report中存在的parameter:
$P{parametername}
如果应用程序没有为报表中定义的parameter赋值,那么parameter将会取我们在定义它的时候设置的defaultvalue的值。
parameters是一个JavaObject,所以如果它的类型是Object类型,我们在其defaultvalue里写下面的表达式就是错误的:
0.123
你必须要创建一个Object,如:
NewDouble(0.123)
这种写法就是正确的。
3>
Variables
Variables是用来存储对某些字段计算后的结果,比如sum等。
我们可以在表达式中通过下面的方法来引用一个Variable:
$V{variablename}
VariableClassType:
variable也可以是任意一个Java类型,在下拉框里你可以看到大多数常用的类型,如java.lang.String等。
CalculationType:
一个计算类型可以用来计算结果。
当一个预先定义的值是“nothing”时,那它的意思是不做任何计算。
Jasperreports会根据指定的计算类型和从数据源中获取的每一条记录计算出结果,然后去更改variables的值。
做一个变量的计算意为着去执行一个表达式,如果计算类型为nothing,那么jasperreports将会根据variableexpression为variable赋值。
2.subdataset
在JapserReport中允许有多个数据集,主报表的主数据集,以及在交叉报表或者子报表的子数据集,主数据集只能有一个,但可有多个子数据集。
这些数据集只能单个使用,不能相互嵌套使用,但在子数据集中,可以使用参数引用主数据中的数据。
报表的生成是基于一个datasource(一个查询,一个java的collection或者一个xml)。
当你想要处理一个chart或一个crosstab时,这时可能上面的datasource就不行了。
一个subdataset可用来在报表里提供另外一种记录集。
你可能会使用一个subdataset用来填充一个chart或一个crosstab。
在一个报表里你可以有任意多个subdatasets。
一个subdataset可以有它自己的fields,variables,parameters,同时如果需要它还可以执行一个查询。
Dataset里的记录可以像主报表一样进行一次或多次分组。
在组里可以使用subdataset的variables。
一个subdataset通过一个叫“datasetrun”的选项和一个chart或一个crosstab关联。
点击菜单栏的”data”->
”Subdatasets”,
现在我们来创建一个新的Subdatasets,点击”new”->
”create”。
选择”Query”,编写Sql语句来查询数据集,这样一个subdataset就形成了,在接下来的Chart部分,我会结合Subdataset与Chart一起来举一个实例。
3.Chart
jasperreports使用jfreechart的最后版本,jfreechart是一个强大的chart生成工具。
Jasperreports现在支持Pie,Pie3D,Bar,Bar3D,XYBar,StackedBar,StackedBar3D,Line,XYLine,Area,XYArea,ScatterPlot,Bubble,TimeSeries,HighLowOpenClose和Candlestick多种类型图表。
下面,我给出一个实例,在Chart中引入Subdataset:
在主报表中只有一条统计所有记录总数的记录(selectcount(*)asemployeeCountfromemployee)。
第一步,创建一个新的空白报表
第二步,打开查询工具()同时插入下面的sql语句:
selectcount(*)asemployeeCountfromemployee
第三步,从library标签里拖动字段employeeCount到detailba