官方js文档:FVS支持的JS接口汇总 – FineReport帮助文档 – 全面的报表使用教程和学习资料
1、FVS接口对象是:duchamp
2、触发组件的刷新以及组件之间的传参(对控件也有效):
(1)duchamp.getWidgetByName(“report1”).refresh() 刷新
(2)duchamp.getWidgetByName(“report1″).refresh({area:”xxxx”}) 刷新+传参
3、表格块的分页以及分页按钮的设置
(1)在对应的表格块中引入数据,设置根数据的条件设置为分页,判断语句为 :&A1 % 展示数据量 = 0
(2)自定义的切换按钮绑定JS事件:
第一页:duchamp.getWidgetByName(‘表格1’).gotoFirstPage();
上一页:duchamp.getWidgetByName(“XXX”).gotoPreviousPage();
下一页:duchamp.getWidgetByName(‘XXX’).gotoNextPage();
最后一页:duchamp.getWidgetByName(‘表格1’).gotoLastPage();
4、全屏相关
(1)duchamp.requestFullscreen():页面全屏
(2)duchamp.exitFullscreen():退出全屏(如果按F11进入全屏模式,则失效)
5、页面整体刷新:duchamp.reload()
6、FVS多页面情况下报表默认的切换按钮的相关设置:
(1)duchamp.setPageButtonDisplayPolicy(“always”):永远显示
(2)duchamp.setPageButtonDisplayPolicy(“hover”):鼠标悬浮显示
(3)duchamp.setPageButtonDisplayPolicy(“never”):不显示
7、FVS多页面情况下自定义切换按钮:
(1)duchamp.previousStory({area:”XXX”}):跳转到上一页并传参
(2)duchamp.nextStory({area:”XXX”}):跳转到下一页并传参
8、在js中使用FineReport软件函数从数据库中依据参数动态的获取数据

其中FR.remoteEvaluate(xxx)可以运行FineReport内置的一些函数,SQL()就是内置的请求数据库的函数。其中值得注意的是,SQL中双引号需要用反斜杠来转义,否则会出现问题。案例中plant_code是从下拉框中动态获取的值。
9、下拉框的动态联动
(1)下拉框的名称要和想要使用的动态参数名称保持一致
(2)在子下拉框中用到的资料集有使用的父下拉框的名称作为参数时,如果父下拉框的内容发生变化,子下拉框的内容也会同步发生变化
(3)报表中下拉框的名称会作为参数存在!!!
(4)在模板参数中设置和下拉框同名的参数时,这个参数的值会作为下拉框的默认值
(5)在js中可以通过duchamp.getWidgetByName(“LINE_INPUT”).refresh({“LINE_INPUT”:rms_line});的方式来调整下拉框的默认值
(6)下拉框如果设置了默认值,那么无论下拉框进行了何种内容变化,默认值一直都会在下拉框选项当中。想要让其消失,可以在父下拉框编辑完成后,通过js动态的修改子下拉框的默认值(如上述方式)
(7)鼠标悬浮在下拉框时,会出现下拉框内容的提示,这一点是无法避免的。目前不可以拿掉,官方主要是考虑到值太长显示不全的问题。
10、获取当前页面中的所有组件(可进行遍历)
duchamp.getAllWidgets().forEach(widget => {widget.setVisible(false);})
其中widget就是遍历后各个组件对象,可以使用FR内置的组件函数来对其进行相关操作
11、报表块中的图表获取单元格的值
正常情况下我们在同一个报表块中想要获取到单元格的值只要输入单元格行列即可,例如A1、B1、C1等等。但是在报表块打图表中,我们使用上述方法会得到null,拿不到具体的值!面对这个情况,需要使用“报表块名称~单元格地址”的方式来获取,例如container~A1、container~B1……
12、在图表特性中设置js,用这个js给内容设置点击事件时要注意的问题
图表特性中定义的js脚本,会在点击的时候执行,如果你在脚本中给内容设置了点击事件,那么这个点击事件需要在第一次点击完成后,才会被挂载到对应的内容上,再次点击后才生效。这里要注意一个问题,每一次点击图表都相当于再次执行一下js脚本,这就意味着,你会反复给内容绑定点击事件,你每次点击都会多一个点击事件,因此你需要在你绑定前先清空点击事件。
$("div[data-name='OUTPUT_HOUR_CONTAINER'] .waffle-borderless-sticker .column rect").each(function() {
$(this).off('click');
$(this).click(function() {
var index = $(this).index();
console.log('当前点击的元素索引是: ' + index);
});
});
13、柱状图点击具体分类,弹出对应分类的详情内容

14、鼠标悬浮单元格,单元格字体样式变化(对全部单元格有效)
duchamp.getWidgetByName('style_container').addEffect('setCellFont',{
style: {
bold: true,
fontSize: 30,
color: 'red'
},
trigger: 'mouseover',
single: true
});
15、设置对应报表块的特定单元格的字体样式
单元格目前没有办法监听移入移出事件,当前onMouseMoveInCell,onMouseMoveOutCell,不支持对单元格的监听,只能监听整个报表块的动作,同时onMouseMoveOutCell非常非常难用!
setStyle中具体设置可查:https://help.fanruan.com/finereport/doc-view-4863.html#7e9e23ff0029b59c
duchamp.getWidgetByName("style_container").getCell(1,1).setStyle({
fontSize: 30,
color: '#000'
});
16、FVS通过js触发弹窗
duchamp.closeDialog(); // 关闭弹窗
duchamp.doHyperlinkByPost({
"url": cc+"?viewlet=ASSY_OUTPUT_HOUR_DETAIL.frm",
"para": {
"PLANT_CODE":PLANT_CODE,
"LINE_NAME":LINE_CODE,
"WORK_SECTION":WORK_SECTION,
},
"target": "_dialog",
"feature": {
"width": 400,
"height": 250,
"title": "Output損失明細"
}
});