- frameset,以frameset的形式显示报表。这个界面包含一些frame,如页面导航,报表主体在其中的一个frame中显示;使用形式:
http://localhost:8080/birtApp/frameset?__report=报表文件路径&参数=........ - run,报表以一个单独的html页面或pdf显示,由于这种形式没有frmaeset,因此使用者必须自己提供相应的参数,如报表参数,页号等。使用形式:
http://localhost:8080/birtApp/run?__report=报表文件路径&参数=........
对于以上2个动作,以下列出可用的参数:
选项 | 说明 |
---|---|
__format | 报表输出格式:html或pdf,缺省是html。对于frameset不起作用。 |
__isnull | 指明一个参数是null,常用于字符串类型。如果提供参数且值为空: - 对于日期和数字类型,BIRT会将它们当作null处理。 - 对于字符串,BIRT会将它作为空字符串。因此,为了说明某个字符串是null,通常写为:__isnull=参数。 |
__locale | 本地化选项,缺省是jvm的locale。 |
__report | 报表设计文件路径。 |
报表参数 | 报表参数参数值对,形式:参数名=参数值。对于frameset,直接在地址栏中输入参数名=参数值后回车,不会影响报表结果。虽然,此时选择"运行报表"时,弹出的参数值已经改变。 |
中文传参:
1.之前看网上有人发帖说有个解决办法是“在viewservlet.jar下找到org/eclipse/birt/report/utility下找到ParameterAccessor.class文件,现在要修改这个文件的源代码,
你可以在你从CVS中签出的源代码中的org.eclipse.birt.report.viewer/birt/WEB-INF/classes/org/eclipse/birt/report/utility文件夹中找到ParameterAccessor.java文件,在这个java文件中找到这行:
public static final String UTF_8_ENCODE = "UTF-8"; //$NON-NLS-1$
将这行改为
public static final String UTF_8_ENCODE = "GBK"; //$NON-NLS-1$
然后将这个编译好的class文件压缩到viewservlets.jar的同等目录下,替换原来的文件”,本人也试了这种方法,但没见凑效,不过上面的解决方法好像是在birt2.1的环境下,这个没仔细试,也许对birt2.1有效吧。
2.在JSP中调用BIRT报表时,传的参数中有中文字符,即URL中包含中文字符,这时在BIRT端接收到的参数拼SQL语句后发现中文字符被转码,造成SQL中的条件不正确。
因为在JSP中调用BIRT是在一个JS脚本中,因此要想办法在JS中先将中文转成UTF-8,并且在BIRT获取参数后再将UTF-8转换回中文即可。
实现代码:
页面JS:
Var mychecktype = “中文”;
sqlWhere+="and t.CHECK_TYPE = '"+escape(encodeURI(mychecktype))+"'";
BIRT脚本:
sql+=decodeURI(mycondition);
3.jsp页面:
window.open('frameset?__report=reports/pz_report.rptdesign&__format=HTML&cphParameter='+escape(encodeURI(cph)));
birt 的Script中的initialize中这样写
var cph = params["cphParameter"].value
params["cphParameter"].value = decodeURI(cph);
4.修改tomcat--->conf---->server.xml
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8"
redirectPort="8443" />
其中: URIEncoding="UTF-8"是加上去的,之前没有
注意:JSP页面的编码和server.xml中的URIEncoding要一致。