问题描述

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

解决方案

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

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

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

示例一:参数栏版

保存参数

  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实现决策报表缓存最后一次查询条件的更多相关文章

  1. JS调用水晶报表打印翻页按钮事件

    默认的水晶报表打印按钮.翻页按钮太小,并且样式不好调整,考虑自己做一个按钮,然后调用水晶报表的按钮事件. 在实际操作中发现可以在.net按钮的服务器端事件中调用翻页方法: CrystalReportV ...

  2. Web性能优化之动态合并JS/CSS文件并缓存客户端

    来源:微信公众号CodeL 在Web开发过程中,会产生很多的js/css文件,传统的引用外部文件的方式会产生多次的http请求,从而加重服务器负担且网页加载缓慢,如何在一次请求中将多个文件一次加载出来 ...

  3. js生成pdf报表

    由于前台html已经动态生成报表,而且,前台有一个功能,一个date range组件,当你拖动的时候,报表会在不提交到后台的情况下动态变化.因此需要用到js生成生报表: 用到的组件: jquery.j ...

  4. echarts图形报表缓存问题(option数据缓存)

    这几天我在工作中用到了echarts开发报表.每次查询出来的数据都是新的,但是echart展现的图形报表却还是之前的数据.网上找了搜索了很多次也没能解决,后面加了技术群才解决的. 我开始已经确定是报表 ...

  5. node.js与HTML5离线缓存

    最近正学到HTML5的离线缓存,却看到需要配置服务器.一下子就懵了,毕竟服务器的有关配置一般是很复杂的,而node.js的服务器是自己的代码生成的,这下要怎么配置?在网上搜索了很久,都没用关于node ...

  6. js进阶解决浏览器缓存不能自动更新的问题(在ajax的url上带上一个参数,可以是日期,或者是随机数)(随机数Math.random)(取得日期的毫秒数:new Date().getTime();)

    js进阶解决浏览器缓存不能自动更新的问题(在ajax的url上带上一个参数,可以是日期,或者是随机数)(随机数Math.random)(取得日期的毫秒数:new Date().getTime();) ...

  7. QA16复制_新增查询条件,修改批量使用决策

    需求: 增加评估代码,检验类型条件.(检验批中部分检验项目未录结果的检验批显示    注:标准的程序,不支持空结果的查询和使用决策) 1.复制 RQEVAI10 程序 2.因为这是用的QM模块的逻辑数 ...

  8. 本地缓存,Redis缓存,数据库DB查询(结合代码分析)

    问题背景 为什么要使用缓存?本地缓存/Redis缓存/数据库查询优先级? 一.为什么要使用缓存 原因:CPU的速度远远高于磁盘IO的速度问题:很多信息存在数据库当中的,每次查询数据库就是一次IO操作所 ...

  9. SAP 查询分析器,查询报表自动生成,SQL查询测试实现说明(转)

    在日常的SAP开发和应用中,经常需要通过查询SAP数据表来处理日常业务,比如:数据对账.报表SQL测试.SAP查询功能开发等.通过开发SAP查询分析器,SAP实施和开发人员,可以在较短的时间内查询到需 ...

  10. MySQL查询缓存设置提高MySQL查询性能

    首先看看MSYQL逻辑框架:图片来自高性能mysql 如果使用了QueryCache,当查询接收到一个和之前同样的查询,服务器将会从查询缓存中检索结果,而不是再次分析和执行相同的查询.这样就能大大提高 ...

随机推荐

  1. spring boot和redis实现自定义前后分离token认证

    说明:文章部分代码引用自github 本项目地址:https://gitee.com/indexman/redis-token-demo 1.token认证流程 此处以前端页面请求后端用户列表接口为例 ...

  2. Java集合框架学习(四) LinkedHashSet详解

    LinkedHashSet介绍 前面我们介绍了HashSet和TreeSet. LinkedHashSet也是Set接口的一个实现类,同时还继承了HashSet public class Linked ...

  3. Idea:Fetch failed: fatal: Could not read from remote repository

    今天在idea工具中fetch github仓库报错:Fetch failed: fatal: Could not read from remote repository 查了以下需要调整下setti ...

  4. P1481魔族密码 题解(字典树)

    魔族密码 题目背景 风之子刚走进他的考场,就-- 花花:当当当当~~偶是魅力女皇--花花!!^^(华丽出场,礼炮,鲜花) 风之子:我呕--(杀死人的眼神)快说题目!否则---_-### 题目描述 花花 ...

  5. [BUUCTF][Web][极客大挑战 2019]LoveSQL 1

    打开靶机url,页面显示有两个输入框,框中输入123',发现两个框都有sql注入问题 爆出一下错误 You have an error in your SQL syntax; check the ma ...

  6. 项目实战:Qt终端命令模拟工具 v1.0.0(实时获取命令行输出,执行指令,模拟ctrl+c中止操作)

    需求   在Qt软件中实现部分终端控制命令行功能,使软件内可以又好的模拟终端控制,提升软件整体契合度.   Demo演示          运行包下载地址:   CSDNf粉丝0积分下载:https: ...

  7. pyqt5中通过pycharm配置designer(win和mac都适用,修改下designer目录路径即可)

    安装 pip install PyQt5 -i https://pypi.douban.com/simple pip install PyQt5-tools -i https://pypi.douba ...

  8. python部署-nginx部署带docker的https请求

    使用带docker的服务器配置https需要两层web服务器 首先例如使用https://www.Se7eN_HOU.com进行首页访问,首先会先进入到主服务器里面,经过主服务器的Nginx Web服 ...

  9. Spring + JAX-WS : ‘xxx’ is an interface, and JAXB can’t handle interfaces 错误解决方法

    错误栈 Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotatio ...

  10. 手把手带你快速上手香橙派AIpro

    本文分享自华为云社区<香橙派AIpro快速上手指南>,作者:昇腾CANN. 1 前言 作为业界首款基于昇腾深度研发的AI开发板,Orange Pi AIpro无论在外观上.性能上还是技术服 ...