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

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

  • 这篇文章: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将参数传递给数据集,实现在查询时动态指定参数的功能。

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