参数查询前报表不显示

前言

大家还在为不进行条件查询数据报表不显示这个需求苦苦挣扎着实现吗?以往我们用的方法都是在参数模板(参数报表)中增加一个标志位参数,主报表若能接收该参数,证明已经进行了查询,否则认为初次加载,再拼给数据集一个恒假的sql让其查不出数据。若需要初次加载将整个主表隐藏,则还要写行隐藏表达式。如果存在多张这样的报表,工作量还是有点大的~~

是否存在一种简单、通用的方法解决上述问题呢?答案是肯定的。

分析

先了解一下集智平台中的报表的参数传递过程,首先在参数报表中输入参数点击查询,此时在内存中创建一个存有所有参数信息的参数缓冲池,该缓冲池的idreportParamsId变量标识,报表引擎根据reportParamsId去内存中取相应参数值,最后计算得出查询结果。

这个过程给了我们很好的启示,既然点击查询才会产生这个参数缓冲池,不查不创建,那就可以根据参数缓冲池的创建状态来判断是否是初次加载了。

实现

在发布报表的标签前面增加如下判断:

<%

String reportParamsId=request.getParameter(“reportParamsId”); //取得参数缓存的标识号

if(!”".equals(reportParamsId) && reportParamsId != null){

%>

<table align=”center” width=”100%” height=”100%”>

<tr><td>

<report:html name=”report1″ reportFileName=”<%=report%>”

funcBarLocation=”top”

needPageMark=”yes”

generateParamForm=”no”

params=”<%=param.toString()%>”

/>

</td></tr>

</table>

<%

}

%>

当参数缓存ID为空时,不发布主报表。

说明

此方法较通用,适用于要求页面初次加载时主报表完全不显示的需求,若要求主表存在但不查询数据,还应使用原始的动态宏判断的方式。

本文标签: