1.用birt做出来的报表是不是只能浏览啊,不能编辑
2.主要好外就是开发快,为程序员节省了很多功夫,并可以以不同的文件格式导出
3.在其他brit项目中设计好的rptdesign文件,加载到这个项目中它的样式还有没有作用?
答:经测试,它的样式依然存在,即有作用,(这样以后设计样式的时候就好办了,可以在report design模式下把报表的样式做好,然后直接把生成文件*.rptdesign放到集成了birt运行环境的web项目中就可以直接访问了)
4.我用api的方式导出的报表,为什么只有导出doc是对的,其他的格式xls,pdf,ppt都不对呢,xls和ppt是乱的,pdf都开不开,说是不完整的文件。
有人知道这是怎么回事么?
答:OutputFormat设置的问题。
5.我把一个设计好的表样文件,交给birt隐形(IReportEngine)去解析,生成的是一个只显示报表的页面,以前报表自带的分页,导出工具条都不见了,请问下,我怎么让他能够显示出来了?谢谢大家!
下面是解析表样,生成报表的程序,这样生成出来的报表就是没有工具条的报表。
工具条的显示能够在下面设置吗?
IReportRunnable design = null;
design = engine.openReportDesign(context.getRealPath(designFilePath));
IRunAndRenderTask task = engine.createRunAndRenderTask(design);
task.setAppContext(contextMap);
BirtDataSourceObject birtDataSourceObject = new BirtDataSourceObject();
HTMLRenderOption options = new HTMLRenderOption();
options.setEmbeddable(true);
options.setOutputMasterPageMargins(true);
options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_HTML);
birtDataSourceObject.setResultList(resultList);
options.setOutputStream(outputStream);
task.setRenderOption(options);
6.我现在做的报表,数据集都是一次性把所有数据都取出来了,通过界面的上一页和下一页,我可以得到结果。
现在我想在界面上点击下一页或者上一页时,让BIRT再去数据库查一次,而不是最开始就把所有的数据全出来,想问下有什么办法实现这个功能。谢谢!
7.birt中设置BIRT_HOME
分类: BIRT 2007-03-20 16:54 442人阅读 评论(0) 收藏 举报
缺省情况下BIRT装载BIRT_HOME/plugins目录下的插件(plugin)。
这些插件负责连接数据源,把报表输出到pdf和html,渲染chart图。
BIRT_HOME变量通过EngineConfig类的setEngineHome()方法设置。
BIRT使用Java File API装载插件。
//Engine Configuration - set and get temp dir, BIRT home, Servlet context
EngineConfig config = new EngineConfig();
config.setEngineHome( "C:/Java/Tomcat 5.5/webapps/birt" );
config.setEngineHome( servletContext.getRealPath("/WEB-INF"));
8.将昨天研究birt报表集成的心得写一下
1、将birt的runtime包里的WebViewerExample内容覆盖到自己的项目里,注意web.xml的内容添加到自己的web.xml,axis的wsdd配置文件也注意集成一下
2、由于birt的设计运行环境和自己的项目运行环境不一样,而我的项目的报表数据处理又比较复杂,所以采用了birt访问web service数据,如果birt通过jdbc那就无所谓了
3、birt的设计环境是eclipse内置了一个web项目,在eclipse启动时启动的,期待birt将设计环境和运行期环境整合在一起就好了,做一个classloader应该就可以了吧,不过这样一来以后开发web界面就可以用birt来设计,想想那简直太强悍了
4.集成birt的项目启动特别慢,该怎么进行瘦身了?
9.我在自己已有的web项目中集成了birt,现在想要通过JSP传参数给我的报表,可是不知道该怎样写哦,是不是还要写个serlet之类的才能传过去啊,困惑中。。。,请大家帮忙解决一次下,感激
如果你不使用birt viewer的话,那就是使用api调你的报表,birt api有设置参数的api.
如果使用birt viewer,直接通过url或者使用birt 标签都是可以的。
10.我有一个表 BaseTable,里面包括等级、状态、类型等字段,我需要根据这几个字段分别做一些分类汇总统计工作。
1、我能新建一个dataset,然后在这个dataset的基础上,通过group实现我要的统计吗?还是一定要根据我的统计口径,分别生成dataset?
2、等级、状态、类型其实是数字来的。我在生成饼图的时候,legend能根据这些数字自动转换成中文描述吗?好像通过mappig做不到这点。难道一定要新增一个表,存放这些映射关系,然后通过关联查询才能做到这点?
>>1.说明,访问数据列有三种方式,如上面的row.id,或者可以使用row["id"],或者可以使用row[1],得到的都是数据列id.
>>2.在标题title,x轴,y轴上相应位置上设置字体为:Simsun(Founder Extended)(Simsun即为宋体),便可得到解决。
>>3.分组chart乱码,解决方法:
Advanced->Font->Font family->"Arail Unicode MS"
如果没有选择项,可直接写上去
>>4.要得到多系列的柱形图主要在于数据,要这样的数据才能形成多系列的柱形图:
name-数目-年份:
A 23 2007
A 22 2006
B 15 2007
B 19 2006
C 30 2007
C 41 2006
这样x轴设置成name,y轴设置成数目,分组设置成年份
>>5.怎样在柱形图上显示数字?怎样使数字显示在柱形图的顶端?
方法:在Format Chart选项下,选中Series->Value(Y)Series->把下方的Show Series Labels选项按钮选中即可
要想使数字显示在柱形图的顶端,则还要点击同一页面的Labels按钮,然后在Position下拉框下选择Outside就行了
>>6.why not 说明:
为什么没有使用 birt report viewer
BIRT Report Viewer 貌似做得很周到,提供如浏览,打印,export to CSV ,过滤参数的传入等一系列的快速操作.
然而细心思考过,这个viewer还是存在不少问题:
如不适用的报表传入参数方式(无输入验证,无日期控件);代码复杂,可扩展性差......
发现不少功能形同虚设,所以决心抛弃.
为什么不在.rptdesign里写sql
往往实际项目的业务总是复杂的,不希望将复杂的逻辑通过几个简单的参数传入拼凑sql来实现,再说这样调试sql也是一件麻烦的事情,也不利于SQL管理
所以我们提倡 将查询的商业逻辑放回java Manager类,然后designer负责设计数据如何排列。这样子更适合实际项目.
>>7.运行报表
我理解为编译报表文件。BIRT在渲染报表之前,要将报表编译为.rptdocument,再根据这个文件将报表渲染为HTML格式或PDF格式。
>>8.如何把java代码中参数传递给报表?在报表中又怎样获取这个参数?
答:通过这种方式给报表传参:
HashMap paramMap = new HashMap();
paramMap.put("birtparam1", 1);
paramMap.put("birtparam2", 5);
task.setParameterValues(paramMap);
设置报表参数与传递的参数同名,这样就关联起来了
数据集参数与报表参数绑定
sql语句中的“?”号对应数据集参数
>>9.做交互时在js中获取点击对象的属性值:
Action选择Invoke Script,添写下面的Script代码时,对象的属性要这样查找,不能直接写:
点击fx表达式->在Category里面点击Chart Variables->然后在Sub-Category里面点击Data Points->最后在Double Click to insert里面选择对象的属性,双击它就可以加到上面的表达式中
alert("服务名:" + categoryData + " 值:" + valueData)
>>10.第一次查询时速度特别慢
>>11.关于查询某一时间段的服务的处理试例:
private String getPageSQL(String startDate, String endDate, String serviceName) {
String queryString = " from TaskLog taskLog where taskLog.serviceInstance = " + serviceName;
if((!StringUtil.isEmpty(startDate))&&(!StringUtil.isEmpty(endDate))){
queryString +=" and ((taskLog.startTime>'" +
startDate + "' and taskLog.startTime<'" +
endDate + "') or (taskLog.endTime>'" +
startDate + "' and taskLog.endTime<'" +
endDate + "')) " ;
}else if(!StringUtil.isEmpty(startDate)){
queryString += " and taskLog.startTime>'"+ startDate +"'";
}else if(!StringUtil.isEmpty(endDate)){
queryString += " and taskLog.endTime<'"+ endDate +"'";
}
queryString += " order by taskLog.taskId desc ";
return queryString;
}
>>12.在beforeopen方法中故意拼错某一查询语句,它会在页面上把该查询语句打印出来,自己故意写的错误自己知道,此外还可以看一下其他的错误,不失为一种调试的方法。
>>13.执行成功的时间参数案例:
在data set的beforeopen方法中写下如下代码(注意SQL的拼接):
var startTime = params["startTime"];
var endTime = params["endTime"];
this.queryText += " where testbirt.startTime>='" + startTime + "' and testbirt.startTime<='" + endTime + "'";
数据集中的参数设置成datatime格式,不设默认值
报表参数设置成String格式,默认值为空,非必需
然后把数据集中参数跟报表参数绑定,注意这地方数据类型不匹配,但却能正常运行,这个问题还有待研究。
>>14.Birt的JavaScript脚本简单调试
博客分类: birt
脚本JavaScriptTomcatJava应用服务器
Birt的JavaScript脚本简单调试
Birt中的js脚本不能用alert直接弹出提示,也没法用断点跟踪(至少我没发现)。用一个简单方法可以打印,在脚本里写上(有脚本的地方就可以加上这条语句,比方说dataset的beforeopen方法中)
importPackage(Packages.java.lang);
System.out.println("test===");
就可以再控制台里打印出来,进行简单的调试了。
需要注意的是,必须要把报表部署在tomcat下才能打印,用Preview预览模式不能打印。
调