autobig分页标签使用时在oracle环境下的宏应用

问题描述

报表采用autoBig分页方式发布时,不能导出excelpdf,导出word正常,更换jsphtml发布正常,jsp发布别的报表也是正常的。

同时还发现使用Hsqldemo数据库报表正常,但使用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}, 这样是可以的
3SQL中的最外层的关键字select/from/where/group by/order by必须存在,不能使用宏替换

解决方案

采用“把数据集中select后面的字段用宏代替,后面fromwhere都固定下来”方式,就可以正常发布预览、导出报表了。autBig支持导出wordpdfexcel20032007openxml

标签: