??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久久久久久久久久电影,国产日本在线视频,久久亚洲一区二区三区四区http://www.aygfsteel.com/junky/category/18948.htmlzh-cnTue, 27 Feb 2007 22:08:19 GMTTue, 27 Feb 2007 22:08:19 GMT60BIRTQ基?Eclipse 的报??http://www.aygfsteel.com/junky/archive/2007/01/03/91658.htmljunkyjunkyWed, 03 Jan 2007 15:44:00 GMThttp://www.aygfsteel.com/junky/archive/2007/01/03/91658.htmlhttp://www.aygfsteel.com/junky/comments/91658.htmlhttp://www.aygfsteel.com/junky/archive/2007/01/03/91658.html#Feedback1http://www.aygfsteel.com/junky/comments/commentRss/91658.htmlhttp://www.aygfsteel.com/junky/services/trackbacks/91658.html
胡键 , 西安交通大学硕?br />
2006 q?3 ?22 ?br />几乎在各U应用中Q报表都h其不可替代的作用。各cL表Y件也是争奇斗艻I如今Eclipse也推Z自己的报表框ӞBIRT。现在,让我们不妨看看它到底提供了什么样的功能,以及特点是什么?/div>
对于扩展Eclipse的功能,首先当然是M载对应的pluginQBIRT也不能例外。BIRT的下载地址Q?a >http://download.eclipse.org/birt/downloads/Q当前版本是2.0。BIRT依赖于Eclipse的其它几个pluginQGEF和EMFQ,׃我用的是Eclipse WTPQ这是Eclipse的WEB开发工PQ在q个工具中那些plugin都已预装Q因此直接下载birt-report-framework-2_0_0.zip好了。如果没有这些pluginQ请下蝲?/div>
下蝲之后Q安装非常简单:只需解压然后对应的features和plugins目录中的内容复制到Eclipse对应的目录下卛_。且慢,q只是完成了对于BIRT的基本安装。下一步就是去下蝲BIRT需要的W三方Y件包Q?/div>
  需要的jar文g 复制位置Q都在plugins目录下)
Apache Axis axis.jar
axis-ant.jar
commons-discovery-0.2.jar
jaxrpc.jar
saaj.jar
wsdl4j-1.5.1.jar
org.eclipse.birt.report.viewer_version/birt/WEB-INF/Lib
iText 1.3 itext-1.3.jar org.eclipse.birt.report.engine.emitter.pdf_version/lib
prototype.js v1.4.0 prototype.js v1.4.0 org.eclipse.birt.report.viewer_version/birt/ajax/lib
自此QBIRT的安装大功告成。启动EclipseQ在"project wizard"中会出现一个BIRT的项目类型?/div>



回页?/font>


在用之前,了解一些关于BIRT的基本概念,会对用非常有益:
  • 数据源:数据的来源,或提供者。如xml数据源、jdbc数据源等?
  • 数据集:数据集合Q它必须与数据源兌Q可以理解ؓ查询的结果?
  • 报表以及报表,报表可视为是针对一l数据集的表现Ş式,而报表项q是q个表现形式的某个具体的单元。它们之间的关系Q与H体和控件的关系非常cM。报表、数据集、数据源三者间的关p:数据?--- 数据?--- 报表?
  • 报表参数Q查询参数的表现形式Q用它可以构徏更灵zȝ报表?
  • 模板和库Q主要用于复用报表设计,提高报表开发的效率?/li>
本文中的例子都采用jdbc数据源,q是最常见的用情形,其中涉及的数据关pL一个典型的多对多关p:


首先Q让我们来看看一?Hello World"U别的应用:"列出所有用?Q以便可以快速的了解BIRT。ؓ了完成这一dQ我们需要:
A. 通过目向导Q创建BIRT工程。工E创建完毕之后,昄BIRT?报表设计"视图。由于此时没有报表,其它几个视图Q如"数据资源理?Q不可用?/div>

B. 在项目上炚w标右键,选择Q?new -> 报表"。在报表cd中,选择"I白报表"?/div>
C. 创徏新报表后Q数据视囑֏用。在"数据资源理?中创建报表所需要的jdbc数据源。根据向|可以方便的添加jdbc驱动、数据库url、用户名和密码?/div>
D. 在指定的数据源上Q创建数据集Q这一步完成生数据集的查询。在BIRT中支?U数据集Q基于查询语句和Z存储q程。在本例中用前者,对应的查询语句是Q?code>

F. 选择预览Q就可以看到报表q行的实际结果了。或在报表上点击鼠标右键Q选择Q?报表 -> q行报表"?/div>
非常单,一个显C所有用户信息的报表完成了。在此基之上Q让我们再来完成一些其它具有挑战性的dQ?/div>
1.格式化:q是一个内容广泛的主题Q常见的需求:
需?/th> 解决办法Q以上ؓ例)
昄报表列头Z?/th> 如:userid昄?用户标识"?br />选择"userid"Q输?用户标识"?/td>
讄报表外观 选择对应的报表项Q通过"属性编辑器"调整?/td>
对于报表数据列进行处?/th> 如:userid和usernameQ显C成QuseridQusername。双击row["userid"]Q出?表达式生成器"Q输入:
分页 选择"?Q在"属性编辑器"中,选择"分页W?Q在"分页W间?中输入分大?/td>
늜和页?/th> 在报表设计页Q选择"主页"Q在其中讄늜和页脚?/td>
2.排序Q一U变通的做法是:数据集排序之后Q如在对应的SQL语句中用order byQ再昄。除此之外,也可以在报表设计时来完成Q?/div>
A. 选择表,此时属性编辑器下方会出C表相关的选择c?/div>

B. 选择"排序"Q在对应的页面中选择"d"按钮之后Q出玎ͼ


C. 选择需要进行排序的列,以及排序方式?/div>
3.计算列:通过"数据集编辑器"来完成。进?数据集编辑器?Q选择"计算?Q输入对应的"列名U??数据cd"?表达??/div>
4.报表参数Q它为报表的产生带来了极大的灉|性。报表参C定是与含参数的查询对应的Q否则失M意义。现在,以上需求改为列?用户标识大于某一输入的所有用?Q?/div>
A. ~辑数据集,修改SQLQ?code>

C. ?数据资源理?视图Q创建报表参敎ͼ"用户标识"?/div>
D. 选择"?Q在"属性编辑器"中选择"l定"。此Ӟ会出现刚才在数据集中定义的参?id"。在"?列,选择报表参数"用户标识"Q?/div>

E. q行报表Ӟ此时会出现报表参数的输入框,填写值后卛_现报表结果?/div>
本例虽然只定义了一个报表参敎ͼ但是BIRTq没有这L限制。我们可以创建多个参敎ͼ做法很简单:首先Q查询有多个参数Q定义数据集的参数时Q按照查询中参数出现的顺序定义;最后,d需要的报表参数?/div>
5.分组Q以上ؓ例:用h地址分组?/div>
A. 选择"?Q点击鼠标右键,选择"插入l?。这里有两个选择Q?在上??在下??/div>
B. 选择L一U,弹出分组资料H体。填写其中的Q?名称"?分组依据"。在本例中,"分组依据"是addr列?/div>
C. 选择预览Q或q行报表Q查看结果?/div>
子报表是另一U最常见的报表,以上ZQ列出所有用Pq列出每个用h购买的项目,以及目数。ؓ了完成这U父子关pȝ报表Q需要:
A. 创徏新报表和数据源?/div>
B. 创徏数据集userQ用SQLQselect user.userid,user.username,user.addr from user?/div>
C. 创徏数据集itemsQ用SQLQ?/div>
select item.itemid,item.itemdesc,item.price,user_item.count from item,user_item where item.itemid= user_item.itemid and user_item.userid= ?
												

同时在数据集items上创建参数userQ它对应SQL中的参数?/div>
D. ?Palette"视图拖入"列表"到报表中Q在"属性编辑器"?l定"中Q选择数据集ؓuser。它用来昄主表的信息,在本例中是用户信息?/div>
E. ?Palette"视图拖入"|格"?列表"?明细数据"中,讄|格??列,它用来存?用户姓名"?用户地址"。在"数据资源理?视图Q选择数据集userQ将username和addr分别拖入|格?列中?/div>
F. ?数据资源理?视图Q选择数据集itemsQ将它拖?列表"?明细数据"中,位于刚刚插入的网g斏V此ӞBIRT会生成数据集items对应???/div>
G. 选择刚刚生成??Q在"属性编辑器"?l定"中Q会出现在items中定义的参数。修改它的|row["userid"]。于是,父子报表发生了联系?/div>
H. 选择预览Q或q行报表Q就可以看到l果了?/div>
很遗憾,到目前ؓ止,另一U最常见的报?交叉?q不被BIRT支持。但是,BIRT的官方网站已明确表示Q将在未来的版本中支持它?/div>
俗话_"一N千言"。没有图的报表是枯燥Q且~Z表现力的。在本例中,我们用图表来表示Q每个用L消费L?/div>
A. 创徏新报表和数据源?/div>
B. 创徏数据集chartQ用SQLQ?/div>
select user.username,round(sum(item.price*user_item.count),2) from item, user_item, user where item.itemid= user_item.itemid and user.userid= user_item.userid group by user.username
												

C. ?Palette"视图拖入"图表"到报表中Q此时会弹出"~辑图表"H体?/div>
D. ?选择图表cd",选择图表cd?条Ş?。在"选择数据",使用数据集chartQ同旉中username列,其拖入"cdxpd"。对于统计列Q同样将其拖?cdypd"。在"图表格式",分别为x和ypdQ填写相应的昄名称?/div>
E. 选择预览Q或q行报表Q即可看到统计图表?/div>
可以使用脚本Q是BIRT的一大特艌Ӏ在BIRT中,数据源、数据集和报表项Q都可以书写脚本。具体做法:选择数据源、数据集和报表项L一U对象,然后选择"脚本"面。如选择数据源user后,对应的脚本输入页面:


选择对应的事Ӟ然后在下方的脚本输入框中输入脚本卛_。如对于W一个例子,我们需要统计用户地址?No.5 St."的用hQ?/div>
A. 选择数据集,然后选择"脚本"Q进入数据集的脚本编辑窗口?/div>
B. 选择事g"afterOpen"Q在脚本H口内输入:count=0;
C. 选择事g"onFetch"Q在脚本H口内输入:if( row["addr"]== "No.5 St.") count++;
D. 选择报表Q在脚本H口选择事g"onRender"Q输入:this.caption=count;
E. 预览Q或q行报表后,会在报表的标题输出count的数倹{?/div>
另外QBIRT也支持用java来作为报表项的事件处理程序。具体做法,请参见BIRT的帮助文档?/div>
除了脚本使开发者可以自定义报表的行为外QBIRTq提供了库和模板机制来重用设计,加快报表的开发。在TheServerSide上有一相当详l的文档Q?a >Using Eclipse BIRT Report Libraries and Templates?/div>



回页?/font>


BIRT与现有应用的集成非常单,׃BIRT主要是web应用Q本节以web应用Zq行说明?/div>
1. 从Eclipse BIRT官方|站下蝲birt-runtime-2_0_0.zip?/div>
2. 解压之后Q只需要其中的web view example目录下的内容?/div>
3. 复制以下W三方Y件包到web view example目录Q?/div>
  需要的jar文g 复制位置
Apache Axis axis.jar
axis-ant.jar
commons-discovery-0.2.jar
jaxrpc.jar
saaj.jar
wsdl4j-1.5.1.jar
WEB-INF/Lib
iText 1.3 itext-1.3.jar Plugins/org.eclipse.birt.report.engine.emitter.pdf/lib
prototype.js v1.4.0 prototype.js v1.4.0 ajax/lib
4. web view example目录发布到web容器中,如tomcatQ改名:birtApp?/div>
5. 启动tomcatQƈ讉KbirtApp。在首页中选择"View Example"Q如果成功发布,pȝ提C成功?/div>
6. 发布设计完成的报表文Ӟ在birtApp中创建reports目录Q用于存放报表设计文件?/div>
7. 在应用中通过Q?a href="http://localhost:8080/birtApp/frameset?__report=" target="_blank">http://localhost:8080/birtApp/frameset?__report=报表文g路径Q就可以讉K报表了?/div>
q个web应用支持2个动作:
对于以上2个动作,以下列出可用的参敎ͼ
选项 说明
__format 报表输出格式Qhtml或pdfQ缺省是html。对于frameset不v作用?/td>
__isnull 指明一个参数是nullQ常用于字符串类型。如果提供参CgؓI: - 对于日期和数字类型,BIRT会将它们当作null处理?- 对于字符ԌBIRT会将它作为空字符丌Ӏ因此,Z说明某个字符串是nullQ通常写ؓQ__isnull=参数?/td>
__locale 本地化选项Q缺省是jvm的locale?/td>
__report 报表设计文g路径?/td>
报表参数 报表参数参数值对QŞ式:参数?参数倹{对于framesetQ直接在地址栏中输入参数?参数值后回RQ不会媄响报表结果。虽Ӟ此时选择"q行报表"Ӟ弹出的参数值已l改变?/td>
虽然本节所说的是针对web应用的集成,但是q种Ҏ同样也可与非web应用集成。此Ӟ我们可以采取一U变通的ҎQ在非web应用中用内嵌的web容器Q如jettyQ也可达到同L效果。这U做法和Eclipse的做法类伹{还记得在报表设计时使用"报表 -> q行报表"吗?那个弹出的窗体,实际是一个web面?/div>



回页?/font>


与一些老牌报表软g相比QBIRT可能仍显E嫩。然而,它也不乏其独C处,如脚本控制、库和模ѝ加之有世界领先的报表厂商Actuate支持Q实际上BIRT的ROMQReport Object ModelQ就是Actuate捐献的,我们有充分的理由对BIRT的前景表CZ观?/div>



回页?/font>






回页?/font>


胡键Q西安交通大学硕士,2000q毕业后一直从事Y件开发?002q开始用JavaQ在qx的项目开发中l常采用OpenSource的工P如Ant、Maven、Hibernate、Struts{,目前正在研究信息集成斚w的规范和技术。可以通过jianhgreat@hotmail.com与他取得联系Q或讉K个hblogQ?a >http://blog.donews.com/foxgem/?/div>



junky 2007-01-03 23:44 发表评论
]]> վ֩ģ壺 | | ³ľ| | | | | | մ| | ̽| | | ̨| | | Է| | ׺| Ͱ| | | | | ӱʡ| ȫ| »| | ˷| | | Դ| | ׷| | | ¡Ң| Դ| Ӧ| | |