报表知识库 
      
 
       
     参数传递那些事
在报表设计好后,往往需要向报表中传递参数,参数是如何传递给报表的呢?标签发布的报表参数传递可以分为下面三种情况
缺省参数输入页面式
为了方便用户快速体验报表的功能,当用户的关注点不在于参数录入页面而在于报表时,润乾的tag标签提供了generateParamForm属性,只要置为yes就可以自动生成参数录入表单,方便用户快速体验报表。
<report:html name="report1" 
      ...... 
      generateParamForm="yes" 
      ...... 
      /> 
      报表设计如下

 
      描述内容为自动生成参数表单输入框的介绍内容,发布报表的jsp代码如下 
      <table align=left> 
      <tr><td> 
               <report:html  
                       name="report1" 
                       reportFileName="report_0.raq" 
                       generateParamForm="yes" 
                       /> 
      </td></tr> 
      </table> 
      页面展现效果如下:

 
      参数模板式
用润乾报表设计的参数模板,需要利用参数模板的tag进行发布,其自动与结果页面的报表关联。因此,比较简单的做法是把参数模板tag和结果报表tag写到一个页面里。如下所示:
<report:param name="form1" paramFileName="test_arg.raq" /> //参数模板tag
<report:html name="report1" //结果报表tag
srcType="file" 
      reportFileName="test.raq" 
      generateParamForm="no" 
      /> 
      注意:以上两种方式都没有接收参数拼成串的代码。这是因为参数表单也是报表,用户在输入完参数并点击“查询”后,报表系统把参数存放在了参数缓存池中,查询报表根据参数池ID从参数池中取参数值,所以不需要写代码手动拼参数串了。 
      自定义参数输入式
如果用户自己定义参数输入页面,那么集成流程包括:设计参数页面——〉在接收页面中写代码接收参数——〉在接收页面里把参数拼成串传给tag
//用户自定义的参数输入页面 
      <form method=get name="form1" id="form1" action="<%=request.getContextPath()%>/jsp/test.jsp"> 
       <table><tr style=" "> 
      <td>部门ID</td><td><input type="text" id="deptid" name="deptid" /></td>
<td>  
      <input type="submit" value="提交" />
</td> 
       </tr></table> 
      </form> 
      <table align=left> 
      <tr><td> 
               <%//接收参数代码 
               StringBuffer param=new StringBuffer(); 
       
      Enumeration paramNames = request.getParameterNames(); 
      if(paramNames!=null){ 
               while(paramNames.hasMoreElements()){ 
                       String paramName = (String) paramNames.nextElement(); 
                       String paramValue=request.getParameter(paramName); 
                       if(paramValue!=null){ 
      //把参数拼成name=value;name2=value2;.....的形式
                 param.append(paramName).append("=").append(paramValue).append(";"); 
                       } 
               } 
      } 
                    %> 
      </td></tr> 
      <tr><td> 
               <report:html name="report1" 
                       srcType="file" 
                       reportFileName="report_0.raq" 
                       funcBarLocation="top" 
                       exceptionPage="/jsp/myError.jsp" 
                       generateParamForm="yes" 
                       params="<%=param.toString()%>" 
               /> 
      </td></tr> 
      </table> 
      页面展现效果如下

 
      此时,jsp中必须满足:
1.参数个数必须与要显示的报表所设计的参数个数一致(如未输入则使用报表设计时填的缺省值),参数名称也大小写相同。
2.在test.jsp中用request.getPararmeter(“***”)来取得各参数,并把参数拼成润乾报表能支持的参数串。
3.把拼成的参数串通过html标签中的params属性传递到报表中。
 
标签式发布报表参数传递可以分为上面说的三种方式,api方式展现报表,可以在context类中或者ReportDefine类中设置参数值
附注:
参数模板提交的参数,保存在报表系统的参数池中,并没有存在request里,因此如果使用参数模板,要在结果页面里引用参数值,必须要报表的参数池中读取,而不应该从request里获得。从参数池中取参数代码如下:
<%  
      String reportParamsId=request.getParameter("reportParamsId"); //取得参数缓存的标识号 
      //从参数缓存池中取得的参数保存于一个Hashtable中
Hashtable params = null; 
      if(!"".equals(reportParamsId) && reportParamsId != null){ 
      params = com.runqian.report4.view.ParamsPool.get( reportParamsId ); 
      } 
      //接下来我们以参数名为key,直接从Hashtable中取参数模板中的传递的参数值
String paramValue = (String) params.get("appellation"); 
      out.println("取得的参数值是:"+paramValue);
%> 
       
     
       标签: 
      参数传递