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

finereport内置js如何实现数据查询,有哪些常用方法

全局对象 FR

FineReport 内置了一个全局的 FR 对象,封装了常用的系统级方法,可在任意 Web 端事件中直接调用。

方法 说明 示例
FR.Msg.alert(title, msg) 弹出提示框 FR.Msg.alert(“提示”, “保存成功”)
FR.Msg.confirm(title, msg, callback) 弹出确认框,回调中处理确认逻辑 FR.Msg.confirm(“警告”, “确认删除?”, function(v){})
FR.Msg.toast(msg) 右下角轻提示 FR.Msg.toast(“加载完成”)
FR.remoteEvaluate(formula) 远程调用服务器端公式并返回结果 FR.remoteEvaluate(“=sum(A1:A10)”)
FR.location 获取或设置当前页面 URL FR.location = “/webroot/decision”


contentPane 对象

contentPane 是报表内容面板的核心对象,几乎覆盖了报表交互开发的所有场景,可在「Web 端事件」「单元格 Web 属性事件」「参数面板事件」中使用。

数据读写

方法 说明 示例
contentPane.getCellValue(cell) 获取单元格值 contentPane.getCellValue(“A1”)
contentPane.setCellValue(cell, value) 设置单元格值 contentPane.setCellValue(“A1”, 100)
contentPane.getCellValue(col, row) 按行列号获取值 contentPane.getCellValue(0, 0)
contentPane.setCellValue(col, row, value) 按行列号设置值 contentPane.setCellValue(0, 0, “abc”)

控件操作

方法 说明 示例
contentPane.getWidgetByName(name) 按名称获取控件对象 contentPane.getWidgetByName(“combo”)
widget.getValue() 获取控件值 var v = widget.getValue()
widget.setValue(val) 设置控件值 widget.setValue(“北京”)
widget.setVisible(true/false) 设置控件可见性 widget.setVisible(false)
widget.setEnable(true/false) 设置控件是否可用 widget.setEnable(false)

报表操作

方法 说明
contentPane.gotoFirstPage() 跳转首页
contentPane.gotoLastPage() 跳转末页
contentPane.gotoPage(n) 跳转第 n 页
contentPane.printPreview() 打印预览
contentPane.exportReport() 导出报表
contentPane.refresh() 刷新报表
contentPane.parameterCommit() 提交参数查询

事件绑定

通过 contentPane.on(eventName, callback) 可以绑定以下常用事件:

事件名 触发时机
afterload 报表加载完成后触发
cellselect 选中单元格时触发
cellclick 点击单元格时触发
beforeprint 打印前触发
afterprint 打印后触发

示例:

contentPane.on("cellselect", function() { var col = contentPane.curCell.getColumn(); var row = contentPane.curCell.getRow(); var val = contentPane.getCellValue(col, row); FR.Msg.toast("选中单元格值:" + val); });


this 对象

在控件事件或单元格事件中,this 指向当前控件或当前对象本身。

参数面板相关

在参数面板事件或控件事件中,可通过以下方式操作参数:

属性/方法 说明 适用场景
this.options.form 获取当前表单对象 决策报表(frm)中
this.getValue() 获取当前控件值 控件事件中
this.setValue(val)

设置当前控件值

finereport内置js如何实现数据查询,有哪些常用方法 第1张

控件事件中
this.setVisible(b) 设置当前控件可见性 控件事件中
this.options.location 获取当前单元格位置信息 单元格事件中
方法 说明 示例
this.options.form.getWidgetByName(name) 获取参数面板控件 this.options.form.getWidgetByName(“city”)
contentPane.parameterEl 获取参数面板元素对象 contentPane.parameterEl.getWidgetByName(“city”)
_g().parameterCommit() 触发参数查询(全局写法) _g().parameterCommit()


决策报表(frm)专用

决策报表中使用 _g() 获取报表全局对象,常用方法如下:

方法 说明
_g().getWidgetByName(name) 获取 body 中的控件
_g().getWidgetByCell(name) 获取单元格中的控件
_g().parameterCommit() 提交参数
_g().loadParameter() 加载参数面板


常用场景示例

根据下拉框值动态控制控件可见性

var region = this.getValue(); var cityWidget = this.options.form.getWidgetByName("city"); if (region == "华东") { cityWidget.setVisible(true); } else { cityWidget.setVisible(false); }

点击单元格弹出确认框并跳转

contentPane.on("cellclick", function() { var cellVal = contentPane.getCellValue(contentPane.curCell); FR.Msg.confirm("提示", "确认查看 " + cellVal + " 详情?", function(isConfirm) { if (isConfirm) { FR.location = "/webroot/decision/url/report?name=" + cellVal; } }); });

finereport内置js如何实现数据查询,有哪些常用方法 第2张

报表加载后自动填充单元格

contentPane.on("afterload", function() { var today = new Date().toLocaleDateString(); contentPane.setCellValue("A1", today); });


注意事项

  • FR.remoteEvaluate 调用公式时需以 开头,且服务器端需开启「公式服务」。
  • contentPane 仅在 CPT 报表中可用,决策报表(frm)中应使用 _g()
  • 控件事件中 this 指向控件本身,单元格事件中 this 指向单元格对象,需注意区分。
  • 使用 setCellValue 修改值后,若需触发计算,需手动调用 contentPane.refresh() 或相关重算方法。
  • 内置 JS 方法区分大小写,如 getCellValue 不可写成 getcellvalue。


相关问题与解答

在 FineReport 决策报表(frm)中如何获取 body 上的控件并设置其值?

在决策报表中,使用 _g().getWidgetByName("控件名") 获取 body 上的控件,然后调用 setValue() 方法设置值,示例代码如下:

var widget = _g().getWidgetByName("title_label"); widget.setValue("2024年度销售报表");

如果是在参数面板的控件事件中,也可以使用 this.options.form.getWidgetByName("控件名") 来获取参数面板上的控件。


FR.remoteEvaluate 调用数据集函数时返回值为空,可能的原因有哪些?

可能的原因包括:

  • 公式未以 开头,正确写法应为 FR.remoteEvaluate("=ds1.select(字段名)")。
  • 服务器端未开启公式服务,需在「服务器 → 服务器配置 → 公式配置」中检查。
  • 数据集名称或字段名称拼写错误,需与模板数据集定义一致。
  • 调用的公式中使用了不可用的函数或存在权限限制,建议在服务器端日志中查看具体报错信息。
  • 如果在分页预览或数据分析模式下,部分公式可能不可用,需确认调用场景是否支持。

finereport内置js如何实现数据查询,有哪些常用方法 第3张

0