反馈已提交

网络繁忙

JS实现决策报表缓存上一次浏览器查询参数

  • 文档创建者:weibw
  • 历史版本:6
  • 最近更新:TW 于 2024-04-22
  • 1. 概述

    1.1 版本

    报表服务器版本
    11.0

    1.2 问题描述

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

    456f4d1c-3ff5-49c6-b2e2-5bda47307341.gif

    1.3 解决方案

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

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

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

    注2:不支持移动端

    2. 示例一:para控件参数

    2.1 保存参数

    1. 打开需要配置的模板,点击参数栏中「查询」按钮。

    2. 点击「添加事件」添加一个「点击」事件。

    3. 在事件编辑框中添加参数,并写入对应的JavaScript脚本。

    2022-12-11_14-16-27.png

    其中,参数名为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));

    2.2 从缓存中读取参数

    • 打开需要配置的模板,点击右上角「组件设置」中「para」组件。

    • 点击「添加事件」添加一个「初始化后」事件。

    • 在事件编辑框中添加参数,并写入对应的JavaScript脚本。

    2022-12-11_14-35-07.png

    其中,参数名为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]); })
    };

    3. 示例二:body控件参数

    3.1 保存参数

    1. 打开需要配置的模板,选中需要缓存的控件。

    2. 点击「添加事件」添加一个「编辑结束」事件。

    3. 在事件编辑框中添加参数,并写入对应的JavaScript脚本。

    注:如果需要缓存的控件是多个,那么需要重复上述操作到每个控件中。

    2022-12-11_14-46-36.png

    其中,参数名为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));

    3.2 从缓存中读取参数

    • 点击右上角「组件设置」中「body」组件。

    • 点击「添加事件」添加一个「初始化后」事件。

    • 在事件编辑框中添加参数,并写入对应的JavaScript脚本。

    2022-12-11_14-51-05.png

    其中,参数名为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)

    4. 模板下载

    注1:如果需要缓存的控件中存在联动的先后顺序关系,在定义widgetsKeys变量时也必须按照联动的先后顺序。

    注2:如果控件的数据字典查询时耗时较长,需要适当增加延时进行赋值。

    1)示例一:

    点击下载模板:决策报表-参数栏.frm

    2)示例二:

    点击下载模板:决策报表-报表内.frm

    附件列表


    主题: 数据准备

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持