润乾集算报表应用开发之参数输入

参数对于报表的重要性不言自明,润乾集算报表支持两种参数输入方案,可以使用集算报表设计参数模板联合报表一同发布,还可以自定义参数输入后与报表结合。二者并没有显著的差异,前者在开发使用上更加方便快捷,而后者则在灵活性上更胜一筹,用户在使用集算报表参数输入时可以根据实际需要进行选择。

下面就上述两种参数输入方式的使用分别来看一下。

使用参数输入模板

集算报表提供了“参数模板”的报表类型,使用参数模板可以制作参数输入表单,而且其内置了多种编辑风格,如下拉树、下拉日历、列表框、下拉数据集等。使用时可以参照下面的步骤:

  1、定义参数模板

新建参数模板类型报表,可以使用新建向导进行选择,也可以通过报表属性进行修改,新建的参数模板保存为orders_arg.rpx。

定义参数模板内容,主要包括表单样式、查询内容等信息。

右键单元格设置编辑风格,设置B2和D2为下拉日历,F2为编辑框。

在设计器中右侧的属性面板中设置单元格变量名称,用于数据报表接收参数。这里设置B2格变量名b_date、D2为e_date、F2为orderID。

   2、编辑数据报表

   新建数据报表,保存报表名称为orders.rpx,在数据报表中定义参数,其中用于接收参数输入的参数名应与参数模板中变量名一致。

设置报表数据集,这里要根据订购日期起止和订单ID来过滤数据,数据集SQL为:

SQL中的问号与参数要一一对应,包括名称和位置。

有时希望报表初次加载(不输入参数)时查询所有数据,此时需要修改SQL为:

SELECT *  FROM 订单

where (订购日期>=? or ? isnull)

and (订购日期<=? or ? isnull)

and (订单ID>? or ? isnull)

同时参数部分也要做相应修改:

设置报表表达式,完成数据报表制作。

   3、编写发布报表JSP页面

集算报表安装后自带了一个完整的web应用demo,在[安装目录]\report\webapps下可以找到。该应用中的reportJsp目录下自带showReport.jsp为发布报表的页面,用户可以直接使用,其中主要包括如下内容,当用户自定义页面发布带有参数的报表时使用。

报表部署可以参考润乾集算报表部署的相关文档,发布带有参数模板的报表时定义的JSP至少包含如下内容。

   (1)参数处理部分,通过request接收参数模板传递的参数,将参数拼接成 参数名1=参数值1;参数名2=参数值2;…的格式:

EnumerationparamNames = request.getParameterNames();

if(paramNames!=null){

while(paramNames.hasMoreElements()){

String paramName =(String) paramNames.nextElement();

StringparamValue=request.getParameter(paramName);

if(paramValue!=null){

//把参数拼成name=value;name2=value2;.....的形式

param.append(paramName).append("=").append(paramValue).append(";");

}

}

}

    (2)发布参数模板部分,使用集算报表提供的<report:param>标签发布参数报表,该标签中带有很多属性,使用时至少应包含name、paramFileName(模板名称)和params(参数):

<report:paramname="form1" paramFileName="orders_arg.rpx"

needSubmit="no"

params="<%=param.toString()%>"/>

    (3)发布数据报表部分,联合参数模板一同发布的数据报表采用集算报表提供的<report:html>标签,其包含的的众多属性中必须使用的属性如下:

<report:htmlname="report1" reportFileName="orders.rpx"

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

/>

最后报表在页面上展现:

【附】完整JSP代码:

<%@page contentType="text/html;charset=GBK" %>
<%@taglib uri="/WEB-INF/raqsoftReport.tld" prefix="report"%>
<%@page import="java.util.*"%>
<html>
<bodytopmargin=0 leftmargin=0 rightmargin=0 bottomMargin=0>
<%
         request.setCharacterEncoding("GBK" );
         StringBuffer param=new StringBuffer();
         
         Enumeration paramNames =request.getParameterNames();
         if(paramNames!=null){
                   while(paramNames.hasMoreElements()){
                            String paramName =(String) paramNames.nextElement();
                            StringparamValue=request.getParameter(paramName);
                            if(paramValue!=null){
                                     //把参数拼成name=value;name2=value2;.....的形式
                                     param.append(paramName).append("=").append(paramValue).append(";");
                            }
                   }
         }
%>
<tableid="rpt" width=100% height=100%>
                   <tr><td=top height=100%>
                   <tableid="param_tbl"><tr><td>
                            <report:paramname="form1" paramFileName="orders_arg.rpx"
                                     needSubmit="no"
                                     params="<%=param.toString()%>"
                            />
                   </td><td><ahref="javascript:_submit( form1 )"><imgsrc="../images/query.jpg" border=nostyle="vertical-align:middle"></a></td>
                   </tr></table>
         </td></tr>
         <tr><td=top height=100%>
                   <report:htmlname="report1" reportFileName="orders.rpx"
                            params="<%=param.toString()%>"
                   />
         </td></tr>
</table>
</body>
</html>

自定义参数输入

用户自定义参数输入时,需要自己定义查询表单,设置查询条件等信息。如仍以上述查询报表为例,使用自定义参数输入可参考如下步骤:

   1、定义参数输入表单

<formaction="showReport.jsp?rpx=orders.rpx" method="post">

<p>订购日期起:<input type="text"name="b_date" /></p>

<p>订购日期止:<input type="text"name="e_date" /></p>

<p>订单ID大于:<input type="text"name="orderID" /></p>

<input type="submit"value="查询" />

<form>

其中参数name应与数据报表中参数名一致,这里参数输入均为文本框。

   2、编辑数据报表

编辑数据报表与使用参数输入模板中数据报表一致,此处不再赘述。

   3、定义发布报表页面

(1)接收参数表单传递的参数:

EnumerationparamNames = request.getParameterNames();

if(paramNames!=null){

while(paramNames.hasMoreElements()){

String paramName =(String) paramNames.nextElement();

StringparamValue=request.getParameter(paramName);

if(paramValue!=null){

//把参数拼成name=value;name2=value2;.....的形式

param.append(paramName).append("=").append(paramValue).append(";");

}

}

}

这里仍然要将参数拼成参数名=参数值;…的形式,这样数据报表才能正常接收。

(2)发布数据报表:

<report:htmlname="report1" reportFileName="orders.rpx"

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

/>

最后访问参数输入页面,输入条件即可得到数据报表的查询结果。

【附】完整JSP代码:

1、参数输入界面query.jsp

<html>
<bodytopmargin=0 leftmargin=0 rightmargin=0 bottomMargin=0>
<formaction="show.jsp" method="post">
         <p>订购日期起:<input type="text" name="b_date"/></p>
         <p>订购日期止:<input type="text" name="e_date"/></p>
         <p>订单ID大于:<input type="text"name="orderID" /></p>
         <input type="submit"value="查询" />
<form>
</body>
</html>

2、报表发布页面show.jsp

<%@page contentType="text/html;charset=GBK" %>
<%@taglib uri="/WEB-INF/raqsoftReport.tld" prefix="report"%>
<%@page import="java.util.*"%>
<html>
<bodytopmargin=0 leftmargin=0 rightmargin=0 bottomMargin=0>
<%
         request.setCharacterEncoding("GBK" );
         StringBuffer param=new StringBuffer();
         
         Enumeration paramNames =request.getParameterNames();
         if(paramNames!=null){
                   while(paramNames.hasMoreElements()){
                            String paramName =(String) paramNames.nextElement();
                            StringparamValue=request.getParameter(paramName);
                            if(paramValue!=null){
                                     //把参数拼成name=value;name2=value2;.....的形式
                                     param.append(paramName).append("=").append(paramValue).append(";");
                            }
                   }
         }
%>
<tableid="rpt" width=100% height=100%>
         <tr><td=top height=100%>
                   <report:htmlname="report1" reportFileName="orders.rpx"
                            params="<%=param.toString()%>"
                   />
         </td></tr>
</table>
</body>
</html>

集算报表中使用参数模板非常方便,通过报表设计器中的向导即可快速完成;而当应用中已有或者需要自定义的参数输入界面时,集算报表也支持与自定义页面联合发布,非常灵活。

时间: 2024-11-17 03:23:49

润乾集算报表应用开发之参数输入的相关文章

润乾集算报表应用开发之页面嵌入

润乾集算报表作为纯JAVA报表可以很方便嵌入到J2EE页面中使用,目前集算报表提供了多种发布方式供用用户将报表嵌入到JSP页面时使用.集算报表中报表有参数报表和数据报表两种,下面来看一下这两类报表的页面嵌入方式. 参数报表 由于参数报表大多数都和数据报表联合发布查询数据,所以这里只介绍联合使用方式(单独发布与数据报表一样).参数报表嵌入页面时使用的标签为<report:param>,该标签的主要属性有name.paramFileName和params,name指定了参数表单的名称,paramF

润乾集算报表使用远程HTTP数据源的示例

报表的数据来源多种多样,有时会接收来自HTTP服务器的数据进行报表展现,一般报表工具只能通过报表自定义数据源使用高级语言(如JAVA)进行处理,实现较为复杂.集算报表简单地通用集算器接收HTTP数据源完成报表展现.这里通过一个实例说明. 学生成绩信息存储在远程的JSON格式文件中,其所在HTTP服务器对外提供统一HTTP访问接口,现需要读取学生成绩信息开发报表,汇总学生成绩并按总成绩排名.报表样式如下: JSON文件中包含班级.编号.姓名.学科.成绩等信息,格式如下: [ { "class&qu

润乾集算报表交互分析之多层自动钻取

交互分析过程中报表多层钻取的情况很常见,如从一级汇总数据钻取到二级汇总数据,从二级汇总数据钻取到三级汇总数据-.,钻取时可以从表格到表格,也可以从统计图到统计图.开发这类报表时如果每个层级都需要制作不同的报表,在层数较多时,无论对于开发还是维护都是很麻烦的事,如果能制作一个通用的模板完成所有层级报表的展现则事半功倍. 润乾集算报表通过内置的集算引擎可以快速完成多层钻取通用报表模板的开发.下面通过一个示例说明使用过程. 多层钻取往往在一个维度上逐级细化,如这里我们以订单表中5个地区层级为例(可以扩

润乾集算报表优化应用结构之可挂接算法

在报表项目中,有些报表的数据计算方法会经常改变.例如:某企业员工的实际工资是通过绩效得分计算出的,算法经常变动,需要在不改动其他代码的情况下用新算法替换旧算法.如果用Java来实现计算的话,虽然可以实现动态可挂接计算模块,但是存在缺乏基础类库.占用多余内存等问题. 采用润乾集算报表可以很好的解决这些问题,实现低耦合.热部署的动态挂接算法.集算报表挂接算法系统结合和其他报表工具+java的系统结构对比图如下: 上图可以看出,java程序必须要编译.打包才能更新.集算脚本是解释执行的,脚本文件同时也

润乾集算报表提升性能之过程优化

报表出现性能问题需要对数据源计算进行优化时,执行路径难以确定从而被干预是阻碍报表优化的难题之一.由于数据库执行路径对开发人员不透明,报表优化需要指定执行路径时,程序员会很难甚至无法干预.而一般报表工具不具备强计算能力,大部分计算仍然要依靠数据库进行,这就导致很多报表优化效果不理想. 不同于一般报表工具,润乾集算报表内置了专门用于数据计算的集算引擎,开发人员可以通过编写集算脚本完成报表数据源准备.与数据库执行SQL路径不可控相比,集算脚本的执行过程是可控的,开发人员可根据实际情况编写或更改计算执行

润乾集算报表多样性数据源之动态SQL传递

大多数情况下报表的数据源SQL都是固定的,但有时也需要动态变动其中某些部分实现动态拼出,比如在报表应用中允许用户通过选择表和字段查询自己关心的报表数据,报表开发时则希望对同类报表(明细或汇总)使用同一模板.这时就需要在报表中接收相应参数拼接出动态SQL进行查询后制作动态报表. 润乾集算报表提供了两种处理动态SQL的方法,使用宏和集算脚本,可以快速完成这类报表,下面举例说明. 使用宏 集算报表提供了宏机制,通过在动态宏中拼接SQL后交由数据集查询结果,最后在报表中使用动态表达式获得字段名和字段值完

润乾集算报表多样性数据源之json

多样性数据源在报表开发中越来越常见,润乾集算报表对多样性数据源的有效支持使得这类报表开发变得非常简单,目前集算报表支持的数据源类型除传统的关系型数据库外,还支持:JSON.HTTP.TXT文本.Excel.Hadoop.mongodb等. JSON作为一种轻量级数据格式应用非常广泛,报表读取json数据源进行报表开发的需求也很常见,另外有些报表还会接收来自HTTP服务器的数据进行报表展现.这里通过例子分别来看一下集算报表使用json数据源和http数据源的过程. 一般JSON数据源 报表说明 学

润乾集算报表呈现输出之表头重复

在报表展现或打印时为了便于查看数据,往往希望报表头在每页中重复出现.润乾集算报表除了可以实现每页均重复同样的表头外,还可以实现分组表头重复,即当分组出现在多页时显示同一分组表头.下面分别来看一下在集算报表中上述两种表头重复如何实现. 一般表头重复 使用集算报表开发时,如果希望分页报表的表头重复显示,只需要将表头的行类型设置为"报表头"即可.如下图: 其第一行类型为: 这样,报表在展现或打印时表头就会在每页中重复,效果如下(页面展现): 第一页                   第二页

润乾集算报表的集算器数据集部署(I)

润乾集算报表提供了集算器数据集,允许用户使用集算器脚本完成数据的进一步计算和加工,为报表提供数据源支持,从而简化报表开发,提升报表性能. 集算器脚本的编辑需要借助第三方集算编辑器(非报表工具)完成,而后嵌入到报表工具和报表应用中完成报表开发和部署. 下面来看一下集算器数据集的使用和以及报表部署过程. 1.开发环境使用 集算报表使用集算器数据集时,首先需要设置集算器授权信息和配置数据源连接(如果需要从数据库中取数). 1.1.设置授权信息 启动集算报表设计器,选择工具-选项,切换到"集算器选项&q