润乾报表参数模板本地保存查询条件功能实现方案

一、需求背景

在日常报表使用过程中,用户经常需要反复输入相同的查询参数进行报表查看。每次打开报表都要重新输入参数,为此,我们需要实现以下功能:
1、在参数模板增加【保存条件】按钮,将当前查询参数保存到本地,下次打开报表时自动加载
2、新增【开启 / 关闭 / 清除本地参数】控制按钮,支持重新加载参数模板。

1png

2png

二、实现原理

核心采用 浏览器 Cookie 存储报表查询参数,通过 Cookie 参数的读写、开关控制,结合 JSP 页面嵌入按钮和 提供的 JS 函数,完成前端交互与参数加载逻辑。
(润乾最新包 (20260520 日期之后的包) 已新增 Cookie 参数读写、功能开关判断工具方法,如有需要的用户可联系技术获取最新 jar 包)
1、存储介质:浏览器 Cookie(本地存储,不占用服务器资源,且不影响其他用户);
2、优先级由参数在 URL 字符串中的拼接顺序决定,后者覆盖前者。

三、JSP 修改

1、加载 Cookie 保存的本地参数
打开 report\web\webapps\demo\reportJsp 目录下的 showReport.jsp 增加以下代码,加载本地 Cookie 存储的参数,同时获取功能开关状态:

//如果当前浏览报表启用过cookie保存参数,此办法将加载cookie保存本地查询参数
	param.append(ReportUtils2.getCookieParams (request, report));
	boolean cookieEnabled = ReportUtils2.cookieEnabled (request, report);
	//cookie保存本地查询参数优先级和ur1参数优先级取决于谁在后面
    //此时url参数优先,会覆盖cookie保存值。

2、添加功能控制按钮
同样在 showReport.jsp 中添加以下代码:

<a href="javascript:disableSetCookies()" class="easyui-linkbutton enabledCookie" style="display:<%= cookieEnabled ? "" : "none" %>;vertical-align:middle;padding:0px 8px;">关闭本地参数</a>
<a href="javascript:cleanCookies( form1 )" class="easyui-linkbutton enabledCookie" style="display:<%= cookieEnabled ? "" : "none" %>;vertical-align:middle;padding:0px 8px;">清除本地参数</a>
<a href="javascript:enableSetCookies()" class="easyui-linkbutton disabledCookie" style="display:<%= cookieEnabled ? "none" : "" %>;vertical-align:middle;padding:0px 8px;">开启本地参数</a>

点击下载 showRpeort.jsp 示例文件。

showReportzip

四、报表设计

以 demo 数据源中的员工表为例,通过姓名动态查询员工信息。

1、编辑报表数据集 sql 并设置数据集参数

SELECT * FROM 员工表 where 姓名 = ? or ? is null

3png

2、定义报表参数 arg1,参数类型默认为字符串即可

4png

3、设计报表

5png

报表保存为 1.rpx,且放在 reportFiles 目录下

4、编辑参数模版

增加数据集 SELECT 姓名 FROM 员工表,且设置 C2 的 web 变量名称为 arg1

6png

参数模版保存为 1_arg.rpx,并和 1.rpx 保存在同一目录下。

5、发布即可查看效果。

报表示例下载:

reportFileszip