上次介绍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%\demo\basic\DetailedDrillA.cpt为例,该模板中实现了在当前窗口的钻取功能,下面将在当前窗口打开换成在新的tab页面中打开。

1.4.3 超级链接

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

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

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

通过

window.parent.FS.tabPane.addItem({title:"baidu",src:"http://www.baidu.com"})  

实现在新的tab中打开页面。

title:订单明细

src:订单明细模板的路径

具体如下图:

这里要注意,src最后的&符号为参数的传递,即将当前单元格的值传递给参数ID,然后再src的路径后面拼接字符串,将ID参数的值传递给需要打开的新模板中的订单号参数。

代码如下:

 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. 2引用contentPane

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

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

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

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

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

FineReport的填报预览及表单预览下contentPane下都会有一个curLGP对象,即current logicpane。

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()

校验并提交报表,只有填报表才可以用

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这个控件:

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)

获取指定名字的控件

Web报表工具FineReport的JS API开发(二)的更多相关文章

  1. Web报表工具FineReport的JS API开发(一)

    很多报表软件可以利用JS接口来实现更多更复杂的功能.以FineReport为例,开放了大量的JS API给用户,根据执行JS的主体不同可以将分为三大类:FR.FS和contentWindow. 在js ...

  2. Web报表工具FineReport的JS开发之字符串

    在报表开发过程中,有些需求可能无法通过现有的功能来实现,需要开发人员二次开发,以FineReport为例,可以使用网页脚本.API接口等进行深入的开发与控制. 考虑到JS脚本开发的使用较多,这里先先简 ...

  3. web报表工具FineReport的JS编辑框和URL地址栏语法简介

    JS编辑框: 1.FineReport的js. 作为一款BS产品,browser端的JavaScript是必不可少的. FineReport中的js是已经调用了finereport.js的. 大家知道 ...

  4. web报表工具FineReport使用中遇到的常见报错及解决办法(二)

    web报表工具FineReport使用中遇到的常见报错及解决办法(二) 这里写点抛砖引玉,希望大家能把自己整理的问题及解决方法晾出来,Mark一下,利人利己. 出现问题先搜一下文档上有没有,再看看度娘 ...

  5. web报表工具FineReport常用函数的用法总结(日期和时间函数)

    web报表工具FineReport常用函数的用法总结(日期和时间函数) 说明:凡函数中以日期作为参数因子的,其中日期的形式都必须是yy/mm/dd.而且必须用英文环境下双引号(" " ...

  6. web报表工具FineReport最经常用到部分函数详解

    之前分别列出来了finereport常用的文本.时间函数的解释,这里应广大朋友的要求,整理了finereport最常用到的一些函数! SUM SUM(number1,number2,-):求一个指定单 ...

  7. web报表工具FineReport经常使用函数的使用方法总结(日期和时间函数)

    web报表工具FineReport经常使用函数的使用方法总结(日期和时间函数) 说明:凡函数中以日期作为參数因子的,当中日期的形式都必须是yy/mm/dd.并且必须用英文环境下双引號(" & ...

  8. Web报表工具FineReport二次开发JS之字符串

    在报表开发过程中,有些需求可能无法通过现有的功能来实现,需要开发人员二次开发,以FineReport为例,可以使用网页脚本.API接口等进行深入的开发与控制. 考虑到JS脚本开发的使用较多,这里先先简 ...

  9. Web报表工具FineReport中JavaScript的使用

    报表软件FineReport采用的是jQuery v1.9.2框架,jQuery是一个快速的,简洁的JavaScript库,能让用户更方便地处理HTML documents.events,实现动画效果 ...

随机推荐

  1. xhtmlConformance与xhtml脚本呈现

    此配置节只有一个属性——mode,该特性为 ASP.NET 应用程序指定 XHTML 呈现模式.它包含三个值 要让此配置生效,需要把<pages>配置节中的controlRendering ...

  2. Artificial intelligence(AI)

    ORM: https://github.com/sunkaixuan/SqlSugar 微软DEMO: https://github.com/Microsoft/BotBuilder 注册KEY:ht ...

  3. HttpClient通过Post上传多个文件

    public static String sendFilesPost(String url, String fileNames) { HttpClient httpClient = null; Htt ...

  4. Java动态代理全面分析

    代理模式 解说:给某一个对象提供一个代理,并由代理对象控制对原对象的引用: 代理模式需要以下几个角色: 1  主题:规定代理类和真实对象共同对外暴露的接口: 2  代理类:专门代理真实对象的类: 3 ...

  5. Java实现Mysql数据库自动备份

    最近项目中有一个这样的需求,要求定时备份数据库.看了一些网上的资料,了解到主要思路是是使用java中的Runtime类的exec()方法,可以直接调用windows的cmd命令,参数就是Mysql的备 ...

  6. 用好spring mvc validator可以简化代码

    表单的数据检验对一个程序来讲非常重要,因为对于客户端的数据不能完全信任,常规的检验类型有: 参数为空,根据不同的业务规定要求表单项是必填项 参数值的有效性,比如产品的价格,一定不能是负数 多个表单项组 ...

  7. UML常用图

    序列图 活动图

  8. Atitit.atiagent  agent分销系统 代理系统 设计文档

    Atitit.atiagent  agent分销系统 代理系统 设计文档 1. 启动项目1 2. 首也2 3. 登录功能2 4. 用户中心2 5. 充值查询3 6. 授权下级代理4 7. 我的提成5 ...

  9. Bootstrap之栅格系统

    bootstrap 移动优先 中文官网  http://www.bootcss.com/ 1.基本模板 <!DOCTYPE html> <html lang="en&quo ...

  10. javascript中的prototype和constructor

    构造函数 我们知道,ECMAScript5中的Object.Array.Date.RegExp.Function等引用类型都是基于构造函数的,他们本身就是ECMAScript5原生的构造函数.比如,我 ...