报表集成那点事

企业动态
一般开源的报表,大都作为中间件产品提供给开发者,集成方法也比较统一,通常都是嵌入到系统中自行调用API开发与集成,但开源的帮助文档或全或不全,都靠自己找资料,就要拼学习能力了。在商用收费报表中,润乾报表也采用的是中间件方式,下面我们以润乾报表为例来进一步了解一下。

[[222673]]

报表工具作为信息管理、决策分析系统不可或缺的部分,在项目中经常用到,市面上的报表工具各式各样,在集成策略上,每个产品也都有自己特有的打开方式。不过,从门派上看,常见的无外乎中间件,servlet应用两大门派。一般开源的报表,大都作为中间件产品提供给开发者,集成方法也比较统一,通常都是嵌入到系统中自行调用API开发与集成,但开源的帮助文档或全或不全,都靠自己找资料,就要拼学习能力了。在商用收费报表中,润乾报表也采用的是中间件方式,下面我们以润乾报表为例来进一步了解一下:

润乾报表为了方便开发者使用,在满足大多数通用的需求的同时,实现零编程,润乾报表利用tag标签进行了封装,如下就是一个发布润乾报表的jsp文件:

 

  1. <%@ taglib uri=”/WEB-INF/raqsoftReport.tld” prefix=”report” %>  
  2. <html>  
  3. <body topmargin=0 leftmargin=0 rightmargin=0 bottomMargin=0>  
  4. <report:html name=”report1″ srcType=”file” reportFileName=”wangge.rpx”…/>  
  5. </body>  
  6. </html> 

 

 

可以看到,在这个jsp中用到一个<prefix:html>标签来发布html报表,与struts标签使用类似,其中reportFileName就是需要发布的报表文件名,发布报表的同时,实现了导出,分页,打印功能

jc1

如果把WEB应用比作一台机器,那报表就是这台机器诸多功能模块里的一块,tag标签就是一个个小零件,你把这个小零件扣在哪个jsp文件中,报表就在哪里展现。 

jc2

报表作为中间件集成到其他应用系统里,与这个应用系统就成为了一个整体,但也有分家的做法,比如业界比较常见的servlet应用—— 

jc3

在这里,报表应用是一个独立的应用,在其他应用页面里嵌入一个JFrame,然后通过url请求报表的servlet,报表名作为参数传递给报表应用,报表应用将计算以后生成的html报表返回。

那这个时候,我们的程序猿要问了,浏览报表明白了,那如果报表需要传参呢? 别着急,我们再来模拟一下两种集成方式在给报表传参上有啥区别:

中间件方式

我们还是拿润乾报表的tag标签来看:

 

  1. <%@ taglib uri=”/WEB-INF/raqsoftReport.tld” prefix=”report” %>  
  2. <html>  
  3. <body topmargin=0 leftmargin=0 rightmargin=0 bottomMargin=0>  
  4. <report:html name=”report1″ srcType=”file” reportFileName=”wangge.rpx”  
  5. params=“arg1=123;arg2=abc;……“  
  6. …  
  7. />  
  8. </body>  
  9. </html> 

 

 

Tag标签中有个params属性,可以通过这个属性给参数赋值,如果参数值灵活变化,当然属性值也可以通过变量传递,这个不多说,程序猿都懂的。

Servlet的方式

JFrame中请求报表servlet的URL就要改成:

http://ip:port/report/reportservlet?参数=报表&arg1=123&arg2=’abc’&…

这时,我知道我们经验丰富的程序猿又要质疑了:首先,引入了JFrame来加载报表,多一次数据请求;再次,参数在url里都是明文显示的,安全报警啊,特别集成权限时会比较麻烦!除此之外,web服务与报表服务在不同的进程里,不管是不是在同一台物理服务器,都会多占用硬件资源,当应用出现异常时,排错也麻烦,增加运维难度。所以,润乾报表虽然也支持servlet发布报表的方式,但我们也不建议大家这样使用。 

前面我们讲了润乾报表作为中间件集成,那么这个中间件到底集成了什么到应用系统中?很简单,就是jar包,xml配置文件及jsp的tag描述文件tld。

Jar包引入到应用程序中,不仅提供了tag标签零代码计算展示、打印报表,也为开发者在自己的项目中自行调用报表API接口实现报表的计算,分页,导出,打印等过程提供了方便,例如使用代码计算发布一个报表:

 

  1. //读报表  
  2. String reportFile = “C:/reportFiles/wangge.rpx”;  //绝对路径或相对当前程序启动路径  
  3. ReportDefine rd = (ReportDefine)ReportUtils.read( reportFile );  
  4. //计算报表  
  5. Context cxt = new Context();  //构建报表引擎计算环境  
  6. //…………………….. //其它辅助代码,例如往报表引擎传递参数,传递数据库连接参数等ReportDefine rd = (ReportDefine)ReportUtils.read( reportFile );  
  7. Engine engine = new Engine(rd, cxt);  //构造报表引擎  
  8. IReport iReport = engine.calc();  //运算报表  
  9. //输出到网页,展现报表  
  10. String htmlText = ReportUtils.toHTMLString(iReport,”report1″,request);  //生成html语法  
  11. request.setAttribute(“htmlText”, htmlText); //保存到request里,方便页面上显示  

 

当然,这里只是讲一个简单例子,API属于进阶集成,更深入的学习请参考润乾的开发教程。这例子虽然简单,但我相信大家已经体会到了她的灵活性、轻量性,而单一的servlet URL方式集成如果要二次开发,仅两个系统的数据通讯就是一大难题。 所以基于这种方式集成的报表,要么由开发者想办法解决,要么就是把报表服务做成了一个平台——囊括了数据决策展示、权限管理、报表管理等等看起来牛叉,但跟自己业务系统相结合时又是鸡肋的一堆子业务系统。

便利、灵活、轻量为报表开发节约成本提供了基础,随着业务的提升,高效、高可用性也是考核报表系统的重要部分。因此集群也是集成部署的一个重要环节,那接下来我们继续来看,这两种集成方式在集群上又有啥区别,先上两个结构图—— 

中间件嵌入到web应用里,与web应用是一个整体,所以web应用做完集群,那么报表也就做完了集群。 

jc4

而Servlet URL的方式,那集群就相当于分成了两套,各自做自己的集群,也就是报表是一个集群,web应用是一个集群。

jc5

从以上的部署结构可以看出,中间件的方式在集群上更简单些。所需要的配置及硬件资源都要少不少。

到此报表的集成基本就讲完了,优缺点都做了一个比较,您的应用需要哪一种呢? 

责任编辑:庞桂玉 来源: 润乾
相关推荐

2011-04-14 14:23:06

软件测试测试

2012-02-22 09:32:58

云计算微软Azure

2011-05-25 19:37:47

2021-07-30 07:28:15

Kafka消息引擎

2009-07-03 14:16:30

JSP Servlet

2013-10-12 13:26:08

设计加载

2010-08-10 15:08:17

UPS电源评测

2018-04-02 15:10:17

ToastSnackbarAndroid

2013-04-28 09:50:02

PHPMySQL

2015-09-01 15:12:45

JavaHashMap那点事

2023-12-21 20:53:15

2012-06-11 15:02:53

ASP.NET

2019-07-01 14:55:44

应用安全web安全渗透测试

2011-08-31 10:15:48

桌面管理软件

2011-08-30 14:59:34

Qt数据库

2013-11-01 14:33:32

王军Testin手游KPI

2015-05-29 09:37:04

2013-04-09 10:03:29

iOS6.0旋转兼容

2010-05-31 10:11:02

2019-10-30 09:56:56

内存屏障变量
点赞
收藏

51CTO技术栈公众号