autobig分页标签使用时在oracle环境下的宏应用
问题描述
报表采用autoBig分页方式发布时,不能导出excel和pdf,导出word正常,更换jsp用html发布正常,jsp发布别的报表也是正常的。
同时还发现使用Hsql的demo数据库报表正常,但使用ORACLE数据库则会报错:
: 产生数据工厂: com.runqian.report4.dataset.SQLDataSetFactory 失败错误来源:: 数据集ds1中,第2个参数SQL异常。
at com.runqian.report4.model.CalcReport.calcDataSet(Unknown Source:326)
at com.runqian.report4.model.CalcReport.calcDataSet(Unknown Source:298)
at com.runqian.report4.usermodel.Engine.calc(Unknown Source:117)
at com.runqian.report4.cache.lIlIIIIlIIIIlIlI.getReport(Unknown Source:137)
at com.runqian.report4.cache.ReportCache.getReport(Unknown Source:173)
at com.runqian.report4.tag.AutoBigTag.doStartTag(Unknown Source:325)
at org.apache.jsp.jsp.scdl_jsp._jspx_meth_report_autoBig_0(scdl_jsp.java:111)
at org.apache.jsp.jsp.scdl_jsp._jspService(scdl_jsp.java:72)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:95)
进一步对报表模板进行检查,发现报表的数据集是使用宏整个代替SQL语句的方式,这与autoBig标签对于Oracle数据库的自动分页的大报表,在数据集的SQL中使用宏的约束相悖:
1、不能用宏代表整个SQL语句
2、不能用宏代表整个where语句,比如
macro1=”where id>5″, SQL写成select * from table ${macro1}, 不允许这样用
如果macro1=”id>5″, SQL写成select * from table where ${macro1}, 这样是可以的
3、SQL中的最外层的关键字select/from/where/group by/order by必须存在,不能使用宏替换
解决方案
采用“把数据集中select后面的字段用宏代替,后面from、where都固定下来”方式,就可以正常发布预览、导出报表了。autBig支持导出word、pdf、excel(2003、2007、openxml)。