birt调用存储过程
A. 如何使用并调试Birt的Scripted Data Source
Birt支持各种类型的Data Source,我们比较熟悉的当时是从sql语句或者存储过程中获取数据集的方式,Birt同时提供了一项非常有用的功能,就是能够从java Bean中获取数据集,并展示。网上相关的资料比较少,说的也不十分详细,再次我把相关的内容整理一下。
步骤1. 创建数据集,选择Scripted Data Source 这一项,名称可以随便起
步骤2.创建DataSet,这步也比较普通
需要注意上面的三个红色部位,第一个标示你要引用步骤一里面创建的Scripted Data Source,第二个框标示你的数据源类型,第三个框是你DataSet的名称,It's not important.
步骤3.编辑DateSet的属性
点击Add增加需要输出的column,可以增加多个,其中比较重要的是前两个属性:名称和数据类型。
步骤4.编写Javabean。
在这里我们把JavaBean的名字叫做 SimpleClass
步骤5.把编译好的类,连同包路径,一起放到Eclipse的Birt插件下面
比如我的就是在
c:\software\Birt2.6.2\plugins\org.eclipse.birt.report.viewer_2.6.2.r262_v20110214\birt\WEB-INF\classes\SimpleClass.class,
当然你的类如果带有包,比如com.kick.h3c.SimpleClass, 那么你必须把整个的com包都放到classes下面
步骤7.给DataSet编程
选中刚刚创建好的DateSet,点击界面里面的Script Tab页,首先是给Open方法编程。切记,一定要选中DataSet,然后再编程。
请看,CF创建了一个Javabean在Birt里面的类,然后调用这个类的readData()方法。这样,在birt创建报表的时候,会首先打开这个类,并调用对应的方法,当然,如果这个方法需要参数,还可以像下面的注释一样调用。
到最关键的的步骤,给Fetch方法编程,在这里,必须要返回一个boolean型的变量。每取一行数据,这个fetch函数就会被调用一次。
在这里,有朋友要问,要是我返回的Vector里面不是数组,是个Hibernate的映射出来的对象怎么办? Good question. 在这里你可以这样干
row["Clear User"] = c.get(numb).getClearUserId() ;
row["Clear Event"] = c.get(numb).getClearEventId() ;
最后把DataSet拖到layout里面,然后看看结果吧。 Hope this is clear enough. THX.
B. 关于birt报表数据拼合问题
用birt的话来说就是一个table需要用3个sql来写对么?横的还是竖的?
横的就把他拆成3个list,竖的就在后面拼,
birt本身的嵌套用过么?这个也能解决一部分问题。
最后实在没办法就只能写存储过程了。
把数据抽取到一个适合这个list的表里,然后一条sql完事。
C. birt 全局数据源怎么建
BIRT中貌似无法建立多个报表公用的全局数据源,必须通过其他程序(如JAVA)为BIRT提供数据源,可以通过集算器建立统一数据源供报表调用,而且当数据库变化时只需要更改脚本即可。BIRT调用集算脚本相当于调用数据库的存储过程,在使用和维护上都比较简单。
D. birt 建立静态参数下拉框怎么显示所有的数据
这是避免中文乱码你只要加个方法把中文编译成字符就能够了。
E. 关于birt 报表结合 web项目,采用script数据源的问题
我4月份刚开发完了一个BIRT项目。我也用的是BIRT 4.2,然后我有很多birt报表用的也是script datasource。
你用的什么服务器?我用的tomcat和jboss,两个都可以顺利跑在windows和linux环境,绝对没有java heap space。
1.首先你的服务类,就是从数据库读数据的java class绝对不应该放在WEB-INF\lib下面。你apps打包打得对吗?
2.至于你的页面跑不出来,我想问数据量多少?在sql里面跑那个query要用多久?
3.你留个邮箱我可以给你例子。
F. 一张birt报表为什么在PLSQL的referenced by里有多个存储过程,而且报表只展现了其中一个存储过程的效果
在webrpt的web模块下的WEB-INF目录中同样在WEB-INF目录中新建文件夹platform,并将治安大队长李军的头盔被男主人的儿子用洋叉扎了一个坑,胳膊砸得淤青
G. birt中将csv文件作为数据集时,如何传递参数呢
我得做法是这样的,首先传递一个TADODataSet类型给DLL,然后在DLL中有一个quickReport控件,我将该控件的Dataset属性设为传递的参数,然后调用preview,结果第一次预览没有问题,可是当我第二次调用浏览时就报内存出错,然后程序中止,不知如何是好,请各位高手指教??(我是用LoadLibrary动态调用Dll也不行)