首页 > 其他分享 >JS实现决策报表缓存最后一次查询条件

JS实现决策报表缓存最后一次查询条件

时间:2022-12-11 15:45:42浏览次数:70  
标签:控件 缓存 报表 JS 参数 key var name

问题描述

决策报表在打开时希望参数控件的值可以默认是上一次页面关闭前最后一次查询所选择的值。

解决方案

每次点击查询后将参数值保存到浏览器缓存中(适用于控件在参数栏内),或每次控件值发生改变后将参数值保存到浏览器缓存中(适用于控件在报表体内)。

报表打开时从浏览器缓存中将参数值读取出来并赋值给对应的控件。

注:该方案仅支持同一台电脑下读取缓存,不同电脑缓存的结果也不一致。

示例一:参数栏版

保存参数

  1. 打开需要配置的模板,点击参数栏中「查询」按钮。
  2. 点击「添加事件」添加一个「点击」事件。
  3. 在事件编辑框中添加参数,并写入对应的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));

从缓存中读取参数

  1. 点击右上角「组件设置」中「para」组件。
  2. 点击「添加事件」添加一个「初始化后」事件。
  3. 在事件编辑框中添加参数,并写入对应的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]); })
};

示例二:报表体内版

保存参数

  1. 打开需要配置的模板,选中需要缓存的控件。
  2. 点击「添加事件」添加一个「编辑结束」事件。
  3. 在事件编辑框中添加参数,并写入对应的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));

从缓存中读取参数

  1. 点击右上角「组件设置」中「body」组件。
  2. 点击「添加事件」添加一个「初始化后」事件。
  3. 在事件编辑框中添加参数,并写入对应的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

标签:控件,缓存,报表,JS,参数,key,var,name
From: https://www.cnblogs.com/weibw162/p/16973745.html

相关文章

  • 封装工具类解决缓存问题
    满足以下需求基于StringRedisTemplate封装一个缓存工具类,满足下列需求:方法1:将任意Java对象序列化为json并存储在string类型的key中,并且可以设置TTL过期时间方法2:将......
  • 操作系统如何更新dns缓存?
    1、window环境:hosts文件位置:C:\windows\system32\drivers\etc刷新方式:win+r,输入CMD,回车在命令行执行:ipconfig/flushdns#清除DNS缓存内容。ps:ipconfig/displa......
  • 关于angularJS压缩混淆后形参改变导致代码报错的问题
    问题angularJS1.3版本之前,有全局控制器的说法($scope),这个全局控制器会导致在js编译时进行压缩,会将scope变成简短的单词,导致报错。在demo.js中控制器第二个参数有两种......
  • 如何查看服务器的Raid缓存等配置的情况
    摘要最近总遇到同一批机器的IO不一样的情况.感觉可能跟硬件设备和Raid卡的设置不一样有关系.所以今天学习研究了下storcli的命令.希望能够进行一些数据的收集.Storc......
  • go解析未知json
    使用go语言写一段代码,将未知结构的json解析出来  这里是一个例子: packagemainimport("encoding/json""fmt")funcmain(){v......
  • 前端开发系列023-基础篇之JavaScript和JSON(扩展)
    title:'前端开发系列023-基础篇之JavaScript和JSON(扩展)'tags:-javaScript系列categories:[]date:2017-06-2008:20:13本文输出JSON搜索和JSON转换相关的内容......
  • 前端开发系列022-基础篇之JavaScript和JSON(进阶)
    title:'前端开发系列022-基础篇之JavaScript和JSON(进阶)'tags:-javaScript系列categories:[]date:2017-06-1908:20:13在[javaScript和JSON](http://wendingd......
  • Node.js Event Loop 的三大常见理解误区和正确概念辨析
    Node.jsEventloop监控器。高的frequency和低的持续时间是最理想的eventloop状态。上图显示三点半到五点半之间,eventloop的frequency骤降,然后duration居高......
  • Node.js Event Loop 处理的几大周期介绍
    Node.jsEventLoop处理的几大周期如下图所示:Timer:通过setTimeout()或setInterval()安排的一切都将在这里处理。IO回调:这里将处理大部分回调。由于Node.js......
  • js之操作文件| 12-5
    在HTML表单中,可以上传文件的唯一控件就是​​<inputtype="file">​​。注意:当一个表单包含​​<inputtype="file">​​时,表单的​​enctype​​必须指定为​​multipart/f......