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

finereport的js有哪些功能?,怎么用?

常见使用场景

FineReport 中的 JavaScript 主要应用于以下场景:

  • 报表加载时执行初始化逻辑(如参数赋值、默认值设置)
  • 响应控件事件(如点击、变更、下拉选项)
  • 实现图表交互(点击、悬停、钻取)
  • 自定义按钮、超链接触发复杂业务逻辑
  • 动态修改报表内容(隐藏行、列、单元格样式)
  • 与后端数据库或服务通信(通过 FR 提供的远程调用方法)
  • 控制报表参数、获取或修改参数值

常用 API 与方法

方法/对象 说明 示例
contentPane.parameterEl.getParameter(parName) 获取参数对象 var p = contentPane.parameterEl.getParameter("year");
contentPane.parameterEl.setParameter(parName, val) 设置参数值 contentPane.parameterEl.setParameter("year", "2024");
contentPane.parameterEl.commit() 提交参数,触发报表查询 contentPane.parameterEl.commit();
contentPane.curLGP.setCellValue(sheet, col, row, value) 修改单元格值 contentPane.curLGP.setCellValue(0, 1, 2, "新值");
contentPane.curLGP.writeReport() 刷新报表 contentPane.curLGP.writeReport();
FR.Chart 图表对象,可绑定事件、获取系列 FR.Chart.fireEvent("chart1", "click", ...)
FR.doHyperlinkByPost(url, params) 执行超链接跳转(POST) FR.doHyperlinkByPost({url: "报表.cpt", params: {a: 1}});
FR.remoteEvaluate(script, callback) 远程执行服务器端脚本 FR.remoteEvaluate("return 1+1", function(r){alert(r);});
this.options.value 获取当前控件值(在控件事件中) var v = this.options.value;
FR.Message.show(msg) 弹出提示消息 FR.Message.show("保存成功");
FR.msg(msg) 简化消息提示(新版本建议使用 FR.Message) FR.msg("提示信息");

事件绑定方式

报表事件

模板 > 报表块属性 > 事件 中可添加:

  • 加载前(beforeLoad)
  • 加载后(afterLoad)
  • 渲染前(beforeRender)
  • 渲染后(afterRender)

控件事件

选择控件,在 属性 > 事件 中添加:

finereport的js有哪些功能?,怎么用? 第1张

  • 编辑前(beforeEditor)
  • 编辑后(afterEditor)
  • 值变更(valueChanged)
  • 点击(click)等

图表事件

选择图表,在 图表属性 > 事件 中支持:

  • 点击、双击、悬停、鼠标移出等
  • 常用方法:FR.Chart.on("chartID", "click", function(data) { ... })

参数获取与设置示例

获取参数值(报表加载后)

设置参数并查询

contentPane.parameterEl.setParameter("year", "2025"); contentPane.parameterEl.commit();

图表交互示例

给图表添加点击事件

FR.Chart.on("chart1", "click", function(evt, data) { var seriesName = data.seriesName; var category = data.category; var value = data.value; FR.Message.show("点击了系列:" + seriesName + ",分类:" + category); // 跳转示例 FR.doHyperlinkByPost({ url: "/report?reportlet=detail.cpt", params: { category: category } }); });

控件联动示例

下拉框A变更时,更新下拉框B的选项

finereport的js有哪些功能?,怎么用? 第2张

// 在A的 valueChanged 事件中编写 var aVal = this.options.value; var b = contentPane.parameterEl.getParameter("B"); b.setOptions([{value: "1", text: "基于A的选项1"}, {value: "2", text: "基于A的选项2"}]); // 如果希望清空B并重新加载 b.setValue(""); b.commit();

动态修改单元格内容

var lg = contentPane.curLGP; lg.setCellValue(0, 1, 2, "新文本"); // 参数:sheet索引,列,行,值 lg.writeReport(); // 刷新显示

远程调用(服务器端脚本)

FR.remoteEvaluate("return new Date()", function(result) { FR.Message.show("服务器时间:" + result); });

注意事项

  • 大部分 JS 需在报表加载完成后执行(如 afterLoad 事件中)。
  • 获取控件值时,建议使用 this.options.value(在控件事件中),或 contentPane.parameterEl.getParameter("name").getValue()。
  • 图表事件中的 data 对象包含 seriesName、category、value 等属性,具体取决于图表类型。
  • 避免在加载前事件中做耗时操作,可能影响报表渲染速度。


相关问题与解答

问题1: 如何在 FineReport 中使用 JavaScript 隐藏或显示某个单元格?

解答: 可以通过修改单元格的样式或行高/列宽实现,例如在报表加载后事件中:

// 隐藏第2行(行索引从0开始) contentPane.curLGP.setRowHeight(0, 1, 0); // 参数:sheetIndex, rowIndex, height // 或隐藏列 contentPane.curLGP.setColumnWidth(0, 2, 0); // 若要显示,将高度/宽度设为正数即可

也可以使用 contentPane.curLGP.removeRow(0, 1) 删除行,但不可逆,建议使用调整高度/宽度方式。

问题2: 在 FineReport 中,如何通过 JavaScript 实现点击按钮后导出当前报表为 Excel?

解答: 在按钮的超链接或点击事件中调用内置导出动作:

// 方法1:直接用超链接,类型选择“JavaScript”,输入: FR.exportToExcel({ url: "导出接口", format: "excel", // 或 "excel2007", "csv", "pdf" 等 fileName: "自定义文件名" }); // 方法2:使用 FR 封装的导出方法(需在决策平台或报表中配置) FR.doExport({ url: contentPane.servletURL, format: "excel", isExcel: true }).then(function() { FR.Message.show("导出成功"); }); // 注意:实际导出需要服务器端支持,若在外部URL调用,需提供完整servlet地址。

建议使用设计器自带的“导出”按钮,或通过超链接-类型-导出直接配置,更简单可靠。

finereport的js有哪些功能?,怎么用? 第3张

0