资讯专栏INFORMATION COLUMN

Web报表工具FineReport的JS API开发(二)

freewolf / 2050人阅读

摘要:如果报表嵌在网页的中,在外获取对象如下常用方法方法说明获取指定单元格中的控件获取指定名字的控件获取指定名称的扩展控件,返回一个数组表单预览或参数界面,都有一个对象。

上次介绍FineReport的JS API中的第一类开发--FR,这次就来介绍一下FS和contentWindow类的开发。
1 FS
FS是数据决策系统中的js接口,比如说FS.tabPane.addItem,先介绍几类操作:
1.1 FS.Trans.signOut()
退出决策平台系统
1.2 FS.tabPane._doCloseTab(FS.tabPane._getSelectedTab())
关闭当前决策平台的标签
1.3 FS.tabPane.addItem({title:"baidu",src:"http://www.baidu.com"})
在决策平台中打开新标签页
1.4示例
前面两个接口很简单,这里不再举例说明,下面详细介绍一下第三个接口,即在数据决策系统中打开一个新tab。
1.4.1 描述
数据钻取是使用超级链接实现,打开方式有三种,当前窗口,对话框,新窗口。前面2种方式很好理解,第三种在新窗口中打开,即在浏览器端打开一个新的tab页面,如果是在数据决策系统中使用,希望实现在决策系统框架下新增一个tab页签,而不是在浏览器端重新打开一个窗口,这个该怎么实现呢?
1.4.2 模板
下面以%FR_HOME%demoasicDetailedDrillA.cpt为例,该模板中实现了在当前窗口的钻取功能,下面将在当前窗口打开换成在新的tab页面中打开。
1.4.3 超级链接

打开模板,进入A4单元格的超级链接设置界面,如下图:

将订单明细的钻取修改成在数据决策中打开一个新的tab页面,新tab页面的标题为订单明细。

新增一个JavaScript的超级链接,添加参数ID,参数值为当前单元格的值,即ID=$$$,如下图:

通过
Js代码
window.parent.FS.tabPane.addItem({title:"baidu",src:"http://www.baidu.com"})
实现在新的tab中打开页面。
title:订单明细
src:订单明细模板的路径

具体如下图:

这里要注意,src最后的&符号为参数的传递,即将当前单元格的值传递给参数ID,然后再src的路径后面拼接字符串,将ID参数的值传递给需要打开的新模板中的订单号参数。
代码如下:
Js代码
window.parent.FS.tabPane.addItem({title:"订单明细",src:"${servletURL}?reportlet=demo/basic/DetailedDrillB.cpt&订单号="+ID})

1.4.4 效果查看

2 contentWindow
2.1介绍:
contentWindow是在web页面集成的时候,将FineReport报表嵌入在iframe中,调用报表对象时使用的接口,比如说:document.getElementById("reportFrame").contentWindow,其中document.getElementById("reportFrame")是获取iframe对象,contentWindow是报表对象,相当于html中的window对象。
在普通模板的JS脚本中可以直接使用contentWindow下的属性,如直接使用contentWindow中的contentPane,而不用写contentWindow,这是因为js脚本本身就在FR模板中执行。
网页中使用iframe嵌入报表,如果文档包含框架(frame或iframe标签),框架中嵌入了FR报表,则会创建一个contentWindow对象先获取iframe,再调用contentWindow,然后使用contentWindow下面的属性

var contentWindow = document.getElementById("reportFrame").contentWindow.XXX; 

不论是web页面集成里面还是直接在FR模板之中,contentWindow下面最常用的属性当属contentPane,所以下面将详细介绍contentPane。
contentPane是contentWidow下面的最常用的一个属性,为存放报表内容的容器。

2引用contentPane
在普通模板的JS脚本中直接使用contentPane就能获取到该对象。

如果报表嵌在网页的iframe中,首先在iframe中获取contentWindow,然后获取属性contentPane对象,如下:

var contentPane = document.getElementById("reportFrame").contentWindow.contentPane;  

比如,需要在网页中获取报表填报页面的一个按钮,并执行点击事件:

document.getElementById("reportFrame").contentWindow.contentPane.getWidgetByName("控件名").fireEvent("click") 

2.2.1 contentPane常用属性
parameterEl
返回对象参数界面
curLGP
返回curLGP对象,只有填报预览及表单预览下才有
currentPageIndex
当前所在页,只有分页预览才有
reportTotalPage
总页数,只有分页预览报表才有
zoom
缩放比例
2.2.2 contentPane常用方法
方法
说明
appendReportRC(num)
在选中行后面插入num行,只有填报表才可以用
deleteReportRC()
删除指定行,只有填报表才可以用
deleteRows(param)
批量删除param所在记录,param为一窜单元格坐标的字符串数组
emailReport()
邮件发送
exportReportToExcel("指定格式")
参数为page时分页导出;simple原样导出;sheet分页分sheet导出
exportReportToImage()
输出图片
exportReportToPDF()
输出pdf
exportReportToWord()
输出word
fireEvent()
触发事件
appletPrint()
applet打印
flashPrint()
flash打印
getWidgetByName()
获取填报页面的控件
getCellValue(cell)/getCellValue(col,row)
获取单元格值,只有填报下有
gotoFirstPage()
跳转到第一页,只有分页预览报表有
gotoLastPage()
跳转到最后一页,只有分页预览报表有
gotoPreviousPage()
跳转到上一页,只有分页预览报表有
gotoNextPage()
跳转到下一页,只有分页预览报表有
gotoPage(num)
跳转到指定num页,只有分页预览报表有
importExcelData()
在线导入excel,只有填报表才可以用
on()
监听
pdfPrint()
pdf打印
printPreview()
打印预览,只有数据分析时才有
pageSetup()
页面设置,只有数据分析才有
scale(str)
缩放,str为"+"时放大,为"-"时缩小
setCellValue(cell,null,value)/setCellValue(col,row,value)
给单元格赋值,只有填报表才有
verifyReport()
数据校验,只有填报表才可以用
writeReport()
校验并提交报表,只有填报表才可以用

FineReport的填报预览及表单预览下contentPane下都会有一个curLGP对象,即current logicpane。
2.3 引用curLGP
在cpt模板的JS脚本中可以使用contentPane.curLGP来获取该对象。
如果报表嵌在网页的iframe中,在iframe外获取curLGP对象如下:

var contentPane = document.getElementById("reportFrame").contentWindow.contentPane.curLGP;

2.3.1 curLGP常用属性:
属性
说明
currentTDCell
填报预览,当前焦点所在单元格
dirtyCell
填报预览,编辑过的单元格
write
填报预览,返回write对象
form
表单预览或参数界面,返回form对象

2.3.2 curLGP常用方法
方法
说明
getCellValue(cell)/getCellValue(col, row)
获取指定格子的值,只有填报下有
setCellValue(cell, null, value)/setCellValue(col, row, value)
设置指定格子的值,只有填报下有

2.4 write
填报预览时,curLGP下有一个write对象。
2.4.1 引用write
在cpt模板的JS脚本中可以使用contentPane.curLGP.write来获取该对象。
如果报表嵌在网页的iframe中,在iframe外获取write对象如下:

var contentPane = document.getElementByID("reportFrame").contentWindow.contentPane.curLGP.write; 

2.4.2 write常用方法
方法
说明
getWidgetByCell(cell)
获取指定单元格中的控件
getWidgetByName(name)
获取指定名字的控件
getWidgetsByName(name)
获取指定名称的扩展控件,返回一个数组

2.5 form
表单预览或参数界面,都有一个form对象。
2.5.1引用form
在cpt模板的JS脚本中可以使用this.options.form来获取该对象,如获取参数界面下拉框p1这个控件:
Js代码
var widget=this.options.form.getWidgetByName(p1)
如果报表嵌在网页的iframe中,在iframe外获取form对象如下:

var contentPane = document.getElementByID("reportFrame").contentWindow.contentPane.curLGP.form; 

2.5.2 form常用属性及方法:
属性或方法
说明
name_widgets
form中的所有控件集合
getValueByName(name)
获取指定名字控件的值
getWidgetByName(name)
获取指定名字的控件

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/78991.html

相关文章

  • FineReportJS如何自定义按钮导出

    FineReport支持多种不同的导出方式,直接使用FineReport内置导出按钮可以非常快捷方便的来对各种格式的输出,但是我们在web页面集成中的时候,往往只想将报表内容嵌入到iframe中,而工具栏以及工具栏上的按钮都会隐藏掉,而使用web页面自定义的按钮,那么,此时,这种自定义按钮如何实现导出呢? showImg(https://segmentfault.com/img/bVJR1H?w=...

    wujl596 评论0 收藏0
  • 报表工具JS开发--字符串

    摘要:它将在中查找与相匹配的子字符串,然后用来替换这些子串。这里举个字符串替换的例子结果将返回字符串的查找方法用于检索字符串中指定的子字符串,他将返回中第一个与相匹配的子串的起始位置。其中是起始,提取长度为的新字符串。 在报表开发过程中,有些需求可能无法通过现有的功能来实现,需要开发人员二次开发,以FineReport为例,可以使用网页脚本、API接口等进行深入的开发与控制。考虑到JS脚本开...

    pakolagij 评论0 收藏0
  • FineReport中如何制作树数据集来实现组织树报表

    摘要:问题描述,组织树报表中由与父来实现组织树报表,若层级数较多时,对每个单元格设置过滤条件和形态会比较繁琐,因此提供了一种特殊的数据集树数据集,只需要简单的设置就能自动递归出层级,方便的实现如下图组织树报表图一图二构建树新建报表,添加数据集新建 问题描述FineReport,组织树报表中由id与父id来实现组织树报表,若层级数较多时,对每个单元格设置过滤条件和形态会比较繁琐,因此FineR...

    vvpale 评论0 收藏0
  • FineReport中如何安装移动端H5插件

    摘要:移动端报表使用方法安装好插件后,在浏览器中调用时,需要在报表路径后面加上参数。另外移动端的插件,图表是只支持显示新图表。 HTML5报表插件安装及使用编辑 插件安装插件网址以及设计器插件安装方法和服务器安装插件的方法可以官网上面搜索,这里就不做详细介绍了。 移动端HTML5报表使用方法安装好插件后,在浏览器中调用时,需要在报表路径后面加上参数op=h5。但是PC端不完全支持H5效果。移...

    bovenson 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<