JS实现决策报表缓存最后一次查询条件
问题描述
决策报表在打开时希望参数控件的值可以默认是上一次页面关闭前最后一次查询所选择的值。
解决方案
每次点击查询后将参数值保存到浏览器缓存中(适用于控件在参数栏内),或每次控件值发生改变后将参数值保存到浏览器缓存中(适用于控件在报表体内)。
报表打开时从浏览器缓存中将参数值读取出来并赋值给对应的控件。
注:该方案仅支持同一台电脑下读取缓存,不同电脑缓存的结果也不一致。
示例一:参数栏版
保存参数
- 打开需要配置的模板,点击参数栏中「查询」按钮。
- 点击「添加事件」添加一个「点击」事件。
- 在事件编辑框中添加参数,并写入对应的JavaScript脚本。
其中,参数名为fr_name
,参数值为公式formletName
。
JavaScript 代码如下:
var localStorageObj = {};
var widgetsKeys = ["AREA", "PROVINCE", "CITY"]; // 指定需要缓存的参数及参数顺序
widgetsKeys.forEach(
key => {
localStorageObj[key] = _g().getParameterContainer().getWidgetByName(key).getValue();
}
)
// 将参数名与参数值拼接成JSON对象并转换成字符串缓存到浏览器缓存中,将fr_name参数encodeURL后转为Base64编码作为缓存的key值
localStorage.setItem(btoa(encodeURI(fr_name)), JSON.stringify(localStorageObj));
从缓存中读取参数
- 点击右上角「组件设置」中「para」组件。
- 点击「添加事件」添加一个「初始化后」事件。
- 在事件编辑框中添加参数,并写入对应的JavaScript脚本。
其中,参数名为fr_name
,参数值为公式formletName
。
JavaScript 代码如下:
var storage = localStorage.getItem(btoa(encodeURI(fr_name)));
if (storage) {
var storageJson = JSON.parse(storage);
var widgetsKeys = ["AREA", "PROVINCE", "CITY"]; // 指定需要默认赋值的参数及参数顺序
widgetsKeys.forEach(key => { _g().getParameterContainer().getWidgetByName(key).setValue(storageJson[key]); })
};
示例二:报表体内版
保存参数
- 打开需要配置的模板,选中需要缓存的控件。
- 点击「添加事件」添加一个「编辑结束」事件。
- 在事件编辑框中添加参数,并写入对应的JavaScript脚本。
注:如果需要缓存的控件是多个,那么需要重复上述操作到每个控件中。
其中,参数名为fr_name
,参数值为公式formletName
。
JavaScript 代码如下:
var localStorageObj = {};
var widgetsKeys = ["AREA", "PROVINCE", "CITY"]; // 指定需要缓存的参数及参数顺序
widgetsKeys.forEach(
key => {
localStorageObj[key] = _g().getWidgetByName(key).getValue();
}
)
// 将参数名与参数值拼接成JSON对象并转换成字符串缓存到浏览器缓存中,将fr_name参数encodeURL后转为Base64编码作为缓存的key值
localStorage.setItem(btoa(encodeURI(fr_name)), JSON.stringify(localStorageObj));
从缓存中读取参数
- 点击右上角「组件设置」中「body」组件。
- 点击「添加事件」添加一个「初始化后」事件。
- 在事件编辑框中添加参数,并写入对应的JavaScript脚本。
其中,参数名为fr_name
,参数值为公式formletName
。
JavaScript 代码如下:
setTimeout(function () {
var storage = localStorage.getItem(btoa(encodeURI(fr_name)));
if (storage) {
var storageJson = JSON.parse(storage);
var widgetsKeys = ["AREA", "PROVINCE", "CITY"]; // 指定需要默认赋值的参数及参数顺序
widgetsKeys.forEach(key => { _g().getWidgetByName(key).setValue(storageJson[key]); })
};
}, 100)
模板下载
注1:如果需要缓存的控件中存在联动的先后顺序关系,在定义widgetsKeys变量时也必须按照联动的先后顺序。
注2:如果控件的数据字典查询时耗时较长,需要适当增加延时进行赋值。
1)示例一:
点击下载模板:决策报表-参数栏.frm
2)示例二:
点击下载模板:决策报表-报表内.frm
分类:
FineReport功能实现
标签:
Finereport
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)