当前位置:首页 > 云服务器 > 正文

finereportjs参数包含哪些?怎么设置

参数传递方式

在 FineReport 中,前端 JS 脚本可以通过多种方式接收和传递参数,常见方式包括:

finereportjs参数包含哪些?怎么设置 第1张

  • URL 参数:在报表访问链接后添加 &参数名=参数值,JS 中使用 FR.URLParameter 或 this.options.params 获取。
  • 控件参数:通过报表控件(如文本框、下拉框)绑定参数,JS 中通过 this.options.form.getWidgetByName("控件名") 获取控件值。
  • 数据集参数:在 SQL 或存储过程中使用 ${参数名},JS 可通过 FR.remoteEvaluate() 或 contentPane.getCellValue() 获取数据集结果。
  • 全局参数:在报表设计器 模板参数 中定义,JS 通过 contentPane.getParameter("参数名") 读取。

常用 JS 参数 API

方法 / 属性 说明
contentPane.getParameter("name") 获取指定模板参数的值
contentPane.setParameter("name", value) 设置模板参数值(触发报表刷新)
this.options.form.getWidgetByName("wname") 获取控件对象,用于读写控件值
FR.URLParameter 获取当前 URL 中的参数集合
FR.remoteEvaluate("表达式") 远程计算报表表达式,返回结果
contentPane.getCellValue(1, 2, 3) 获取单元格值(行列位置)
contentPane.setCellValue(1, 2, 3, "newVal") 设置单元格值
contentPane.parameterCommit() 触发参数提交,重新查询报表

在报表设计中的应用

  • 动态过滤:通过 JS 实时修改参数值,配合 setParameter() 或 parameterCommit() 实现联动查询。
  • 控件联动:监听控件值变化事件,用 JS 获取其他控件参数,动态更新数据集。
  • 自定义校验:在提交前校验参数格式,使用 FR.remoteEvaluate() 判断数据是否存在。
  • 导出控制:通过 contentPane.exportReportToXXX() 等参数控制导出格式与范围。
  • 图表交互:传递参数到图表数据源,实现点击图表钻取或跳转。

参数类型与注意事项

  • 字符串:直接传递,注意 URL 编码。
  • 数值:传递时保持数字格式,JS 中可用 parseInt / parseFloat 转换。
  • 日期:建议使用 yyyy-MM-dd 格式,或通过 FR.Date 工具类处理。
  • 数组/多值:参数名相同但值不同,在 URL 中重复出现,JS 中获取为数组。
  • 布尔值:true / false,在 JS 中可直接使用。
  • 参数名区分大小写,建议全小写或驼峰一致。
  • 在 afterLoad 或 beforeLoad 事件中操作参数要留意报表加载状态。


相关问题与解答

问题1:在 FineReport 中,如何通过 JS 获取当前报表的 URL 参数?

finereportjs参数包含哪些?怎么设置 第2张

答:可以在报表的 加载结束 事件中添加脚本,使用 FR.URLParameter 获取全部参数对象,var params = FR.URLParameter; 然后通过 params["参数名"] 读取具体值。FR.URLParameter 返回的是一个对象,键为参数名,值为字符串或数组(多值情况),也可以使用 this.options.params 获取传递给报表的参数,但 FR.URLParameter 更直接获取 URL 上的原始参数。

finereportjs参数包含哪些?怎么设置 第3张

问题2:为什么使用 contentPane.setParameter() 后报表没有立即刷新?

答:setParameter() 仅修改内存中的参数值,不会自动触发报表查询,如果需要刷新,必须显式调用 contentPane.parameterCommit() 或 contentPane.refresh(),在 parameterCommit() 之后,报表会重新加载数据并应用新参数,如果参数是控件绑定的,直接修改控件值(如 setValue())并调用控件的 fireEvent("valueChanged") 也可以触发联动刷新,但 setParameter() + parameterCommit() 是最直接的方式。

0