利用快逸报表内置JS函数实现页码跳转功能
02.01.2010 by hewei - 0 Comment - 0Posted in web报表
Web应用开发中一个很普遍的需求就是页码的跳转,快逸报表已经为项目开发人员提供了起始页,下一页,上一页,最后页的功能,节省了人工编写的复杂度,当然,如果想直接跳转到某一页,就需要稍微做一点工作了,我们知道快逸报表内置的javascript函数中有一个_toPage( )函数,此函数的语法为:tag中的name属性+_toPage( N),N为页数。下面就简单的做一个例子实现这一效果。
(注:更多的函数说明请参考 应用开发教程以及应用开发手册中的网页脚本控制一章节)
首先看一下效果图:

实现步骤:
1:首先制作一张报表,报表属性设置为按行分页,每页十五行,如图所示:

2:写jsp页面发布此报表,jsp代码如下:
<!-
< %@ taglib uri=”/WEB-INF/runqianReport4.tld” prefix=”report” % >
< %
//以下代码是将常用的jsp中input元素拼为字符串
String tpagestr = “< input type=\”text\” style=\”width:30px;\” value=\”\” name=\”atpage\” id=\”atpage\”>< input type=\”submit\” value=\”go\” onclick=\”aa();\” >”;
%>
< html>
< head>
< title>快逸报表输入跳转页数跳转< /title>
< h2 align=”center” >快逸报表输入跳转页数跳转< /h2>
< /head>
< script type=”text/javascript” >
//定义名为aa的js函数,当点击value为”go”的按钮时调用
function aa(){
//获得定义ID为atpage输入框的值
var tpagenum = document.getElementById(”atpage”).value;
//调用快逸内置的_toPage()函数,将获得的值传入即可实现转到某一页
try{report1_toPage(tpagenum);}
catch(e){}
return false;
}
< /script>
< table align=”center”>
< tr >< td>
< %== 以下是用tag标签发布报表==% >
< report:html name=”report1″ reportFileName=”moreData.raq”
< %== userFuncBarElements是自定义的功能条中的功能元素,引入我们自定义的Html元素 ==%>
userFuncBarElements=”"
width=”-1″
/ >
< /td>< /tr>
< /table>
< /html>
总结:快逸报表内置了很多很实用的js函数供开发者调用,可以实现诸如此类的需求,熟练使用快逸报表中的内置js函数可以使开发变得更快速简单。
原文链接:利用快逸报表内置JS函数实现页码跳转功能



















点击类别ID后,效果图如下:
从上面的两个图片中可以看出点击报表头时,类别ID从由小到大排序变为了从大到小排序!二:实现思路:快逸报表中数据集函数可以传入参数,从而控制对某一字段的排序,通过宏和参数以及超链接的结合使用,可以动态为数据集函数传入不同的参数,实现了点标题点击标题实现列表排序。三:实现步骤: 1:首先看报表模版以及参数和宏的设置下图是报表模版及参数设置:
下图为报表模版和宏的设置:

输入XML文件的名字,或者点击右边的”选择”按钮,选择xml文件,也可以直接输入xml文件的名字,如下图
然后确定。编辑框中只需要录入XML文件名,可以是绝对路径名,也可以是相对路径名。如果是相对路径,设计器中相对于”配置/选项”中的应用资源路径,WEB发布时,相对于web.xml中配置的ReportFileHome属性中的路径。 第三步,使用设置好的xml数据集设计报表 单元格输入内容如下 A1:ID B1:姓名 C1:性别 D1:出生日期 E1:城市 A2:ds1.select(ID) B2:ds1.name C2:ds1.sex D2:ds1.born E2:ds1.city 单元格内容输入完成,然后把其他没有用到的单元格删除。 至此,报表已经完成。发布报表,启动tomcat,然后在IE中浏览报表。浏览效果如下
如果数据集的类型是xml文件,就可以用上面的制作方法制作报表。
从上图可以看到这是一个多维交叉分组报表,上表头是地区/城市,左表头是日期。 如果想动态改变一下报表的样式,左表头变成地区和城市的分组展现,上表头变成年份和月份的分组展现,并且只通过一张报表,这就需要用文章标题中提到的:利用参数实现行列变换的方法了。 实现思路: 1. 设计单元格表达式根据参数不同而变化,从而实现样式跟随表达式变动。 2.点击一个超链接按钮通过url强制传参给报表中的单元格,从而控制报表的样式。 本文就以此报表为础,做一个可以行列互换的功能(上表头和左表头互换),实现报表在web页面上样式改变。 第一步:设计器中选择配置-参数 给报表增加一个参数,我们把这个参数叫做转换参数,顾名思义,这个参数就是控制行列转换用的。
第二步:修改单元格表达式,让单元格接受参数
我们把C2单元格的表达式修改为: =if(@arg1==’1′,ds1.group(year(订购日期),false,订购日期!=null)+”年”,ds1.group(货主地区,false,货主地区!=null))。 此表达式的意思是:当参数arg1的值为1时,C2单元格的表达式为ds1.group(year(订购日期),false,订购日期!=null)+”年”,否则默认为ds1.group(货主地区,false,货主地区!=null)。 关于快逸报表中if()函数的用法请参考快逸帮助文档中的相关介绍。 据这个逻辑,依照地区与城市之间的关系,年份和月份之间的关系,把单元格的表达式做如下修改: C3:=if(@arg1==’1′,ds1.group(month(订购日期),false)+”月”,ds1.group(货主城市,false)) A4:=if(@arg1==’1′,ds1.group(货主地区,false,货主地区!=null),ds1.group(year(订购日期),false,订购日期!=null)+”年”), B4:=if(@arg1==’1′,ds1.group(货主城市,false),ds1.group(month(订购日期),false)+”月”)。 第三步:修改交叉表头并在其中设置超链接
红色框中的交叉表头区是整张报表的关键,既要在行列转换的时候做到文字跟随变化,又要充当转换控制的按钮。 修改此单元格的表达式为:=if(@arg1==’1′,”分布,运货费,时间”,”时间,运货费,分布”) 然后在此单元格的属性中:
加入超链接属性: if(@arg1==null,”/reportJsp/showReport.jsp?raq=/交叉报表.raq&arg1=1″,”/reportJsp/showReport.jsp?raq=/交叉报表.raq”)
这个超链接的作用就是点击这个单元格,赋予arg参数值,然后通过超链接中的url把参数传递到jsp中的报表里,通过对参数值的判断,来确定超链 接中的url,这样就可以来回转换,防止只能转换一次的情况出现。(超链接也可以设置在其他单元格中,本文中这样做是为了美观且容易理解) 接下来,我们把报表发布到页面上去看效果:
点击设置了超链接的表头单元格后,url自动转换为/reportJsp/showReport.jsp?raq=/交叉报表.raq& arg1=1,强制把参数arg=1传给报表的各个单元格,单元格表达式发生变化,报表样式也随之变化,于是实现了行列互换的效果:
此时,如果想转换到前一种样式,只需再点击一次表头单元格即可。 在这个报表中,我们运用了很多颇具技巧性的方法,例如参数结合超链接的运用,if()函数的运用,往往一些看似很复杂的报表,通过一些技巧性的做法都是可以迎刃而解的。
设置B1单元格的填报属性-编辑风格为下拉数据集,如下图:
B1的单元格变量名为param:
设置B2单元格为超链接为调用JavaScript函数:javascript:getValue(),如下图:
第二步: 需要建立一个jsp,这个jsp是为了展现下拉数据集报表用的。在此jsp上还要包含之前提到的javaScript函数,用来获取下拉数据集的值。 下拉数据集报表的jsp写法:(参考: \quieeReport\documents\zh\学习教程\应用开发\jsp–1.1.1.a.jsp)。 < script launguage=”javascript”> function getValue(){ var B1Vlalue = document.all['report1_B1′].value; //获取B1单元格的值 window.location.href=”test1.jsp?param=”+B1Vlalue; //超链接至test1.jsp } < /script> 第三步: 建立一个上面提到的test1.jsp,这个jsp的作用是用来展现从超链接传递过来的参数。 test1.jsp的写法: < %@ page contentType=”text/html;charset=GBK”%> < %@ taglib uri=”/WEB-INF/runqianReport4.tld” prefix=”report”%> < html> < head> < title>例子jsp< /title> < /head> < body> < % String param = request.getParameter( “param”); //通过request取超链接中的参数 out.println(”传递过来的参数是:”+param); //展现到页面中 %> < /body> < /html> 在页面上展现的效果: 1.选择下拉数据集数据的界面:
2.传参后的效果展示界面:
例子中仅仅是把传递过来的参数用jsp作了简单的展现处理,实际应用中jsp文件是发布报表的载体,jsp接受到的参数会被传到报表中作相应的计算并最终展现相应的报表,如接受的参数为”颖静”报表就会自动计算并显示”颖静”的相关信息。 通过超链接传参,简单灵活,调试方便。在一些参数表单和主报表不在一张jsp上的时候,用参数池的方式取参数会比较繁琐,用超链接的方式可以轻而易举的把参数通过地址栏传递到目标jsp,再通过目标jsp获取参数,用不同的方法实现了同样的传参功能。 附注:参数传递的方法教程:设计器-帮助-学习教程-应用开发教程-2.1.2 参数