weixin_45501423 2023-05-23 11:17 采纳率: 0%
浏览 168

finereport怎么使用js传参至数据集

finereport 数据集中不执行 ${IF(GREPARRAY($fine_role,ITEM = "xxx")="xxx","AND DEPT_NAME IN ('A','B','C','D','E','F')","")} ,请问是什么原因

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-23 14:33
    关注
    • 这篇文章:FineReport常用js语法 也许有你想要的答案,你可以看看
    • 除此之外, 这篇博客: FineReport中js的一些用法总结中的 决策报表 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 1、参数界面

      • 获取参数界面的控件名为address的控件

        _g().parameterEl.getWidgetByName('address')
        
      • 获取参数界面的控件名为address的值

          _g().parameterEl.getWidgetByName('address').getValue(); 
        
      • 赋值

           _g().parameterEl.getWidgetByName('address').setValue("987");
        

      2、 获取报表名为REPORT0的当前页 – 需在函数里进行,如:

      setTimeout(function() {

       alert(_g().options.form.getWidgetByName("REPORT0").currentPage)
      

      },1000)

      3、跳转报表名为REPORT0到报表到指定第4页面 – 需在函数里进行,如:

      setTimeout(function() {

        _g().options.form.getWidgetByName("REPORT0").gotoPage(4);
      

      },1000)

      4、 调用对应的事件比如按钮Search

      _g().parameterEl.getWidgetByName("Search").fireEvent("click")  单击事件
      

      系统参数 (https://help.fanruan.com/finereport/doc-view-250.html)

      // 报表当前访问的页码

      $$page_number

      // 报表的总页数

      $totalPage_number

      报表刷新方法总结(https://help.fanruan.com/finereport/doc-view-1857.html?source=1)

      1、 定时刷新(间隔)

      setInterval("self.location.reload();",10000); //10000ms即每10s刷新一次页面
      

      2、 定时刷新(倒计时,只加载一次)

      setTimeout("self.location.reload();",10000); //10000ms即每10s刷新一次页面
      

      3、 清空定时(清空的是定时器对应的id),setTimeout同理

      var id = setInterval("self.location.reload();",10000);
      clearInterval(window.tag)
      

      问题:

      1、问:定时页面加快?

      答:因为定时器没有清除,所以定时器累加执行了,导致每次查询以后,变快了。只要每次查询后,页面加载的时候清除原本的定时器

      if(window.tag!=null){
          window.clearInterval(window.tag);
      }
      
      window.tag=setInterval(function(){.......},1000)
      
    • 以下回答由chatgpt基于相关博客总结生成:

      回答:

      finereport支持通过JS动态传递参数至数据集,下面提供一个代码示例来实现:

      1. 在finereport报表设计器中,创建一个数据集并设置查询参数,格式如下:

      sql select * from table where column = :parameter

      1. 在报表中打开JS编辑器,可以使用Ajax来请求数据集,设置参数,代码示例如下:

      javascript var param = "value"; // 设定动态参数 var url = "report.do?op=fr_query"; // 数据集请求的url地址 var data = {"dataStores": {}, "parameters": {"parameter": [param]}, "resid": "dataset ID", "subReport": {}}; // 将参数加入到data中 var result = null; // 保存数据结果的变量 // 发送Ajax请求 $.ajax({ type: "POST", url: url, data: JSON.stringify(data), contentType: "application/json; charset=utf-8", dataType: "json", async: false, success: function (msg) { result = msg.dataStores.storeName.rowSet.primary; // 将返回结果赋值给result变量 } }); return result; // 返回数据结果

      说明: * 上面的dataStores和subReport是返回数据的格式,可以在finereport的文档中了解详细信息 * 这个例子中使用的是JQuery库来发送Ajax请求,需要先引入该库

      1. 在finereport报表设计器中调用JS代码,将返回的数据填充到报表中即可。

      这样就可以动态指定参数,通过JS将参数传递给数据集,实现在查询时动态指定参数的功能。

      注意:以上代码仅供参考,实际使用需要根据具体情况进行调整。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月23日