Web报表工具FineReport的JS API开发(二)
上次介绍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)
var contentPane = document.getElementByID('reportFrame').contentWindow.contentPane.curLGP.form;  
2.5.2 form常用属性及方法:
| 属性或方法 | 说明 | 
| name_widgets | form中的所有控件集合 | 
| getValueByName(name) | 获取指定名字控件的值 | 
| getWidgetByName(name) | 获取指定名字的控件 | 
Web报表工具FineReport的JS API开发(二)的更多相关文章
- Web报表工具FineReport的JS API开发(一)
		很多报表软件可以利用JS接口来实现更多更复杂的功能.以FineReport为例,开放了大量的JS API给用户,根据执行JS的主体不同可以将分为三大类:FR.FS和contentWindow. 在js ... 
- Web报表工具FineReport的JS开发之字符串
		在报表开发过程中,有些需求可能无法通过现有的功能来实现,需要开发人员二次开发,以FineReport为例,可以使用网页脚本.API接口等进行深入的开发与控制. 考虑到JS脚本开发的使用较多,这里先先简 ... 
- web报表工具FineReport的JS编辑框和URL地址栏语法简介
		JS编辑框: 1.FineReport的js. 作为一款BS产品,browser端的JavaScript是必不可少的. FineReport中的js是已经调用了finereport.js的. 大家知道 ... 
- web报表工具FineReport使用中遇到的常见报错及解决办法(二)
		web报表工具FineReport使用中遇到的常见报错及解决办法(二) 这里写点抛砖引玉,希望大家能把自己整理的问题及解决方法晾出来,Mark一下,利人利己. 出现问题先搜一下文档上有没有,再看看度娘 ... 
- web报表工具FineReport常用函数的用法总结(日期和时间函数)
		web报表工具FineReport常用函数的用法总结(日期和时间函数) 说明:凡函数中以日期作为参数因子的,其中日期的形式都必须是yy/mm/dd.而且必须用英文环境下双引号(" " ... 
- web报表工具FineReport最经常用到部分函数详解
		之前分别列出来了finereport常用的文本.时间函数的解释,这里应广大朋友的要求,整理了finereport最常用到的一些函数! SUM SUM(number1,number2,-):求一个指定单 ... 
- web报表工具FineReport经常使用函数的使用方法总结(日期和时间函数)
		web报表工具FineReport经常使用函数的使用方法总结(日期和时间函数) 说明:凡函数中以日期作为參数因子的,当中日期的形式都必须是yy/mm/dd.并且必须用英文环境下双引號(" & ... 
- Web报表工具FineReport二次开发JS之字符串
		在报表开发过程中,有些需求可能无法通过现有的功能来实现,需要开发人员二次开发,以FineReport为例,可以使用网页脚本.API接口等进行深入的开发与控制. 考虑到JS脚本开发的使用较多,这里先先简 ... 
- Web报表工具FineReport中JavaScript的使用
		报表软件FineReport采用的是jQuery v1.9.2框架,jQuery是一个快速的,简洁的JavaScript库,能让用户更方便地处理HTML documents.events,实现动画效果 ... 
随机推荐
- Effective java笔记(三),类与接口
			类与接口是Java语言的核心,设计出更加有用.健壮和灵活的类与接口很重要. 13.使类和成员的可访问性最小化 设计良好的模块会隐藏起所有的实现细节,仅使用API与其他模块进行通信.这个概念称为信息隐藏 ... 
- Java异常处理机制 try-catch-finally 剖析
			Java拥有着强大的异常处理机制,最近初步学习了下,感觉内容还是挺多的,特此来将自己的理解写出来与大家分享. 一. 在Java代码code中,由于使用Myeclipse IDE,可以自动提醒用户哪里有 ... 
- 【夯实PHP系列】PHP正则表达式
			一. 概述 1. 正则表达式的测试地址: http://tool.chinaz.com/regex/ 二.具体的常用正则表达式 1. 邮箱正则表达式: 1)\w[-\w.+]*@([A-Za-z0-9 ... 
- ExtJS关于组件Component生命周期
			extjs组件生命周期大体分为3个阶段:初始化.渲染.销毁. 第一阶段:初始化 初始化工作开始于组件的诞生,所有必须的配置设定.事件注册.预渲染处理等都在此时进行. 1.应用组件的配置: 当初始化一个 ... 
- ABP 初探 之User、Role、Permission数据库设计 (EntityFramework 继承的另一种使用方法)
			最近群里(134710707)的朋友都在讨论ABP源码,我把最近学习的内容记录下来,同时也分享给大家,希望正在研究ABP源码的朋友有一定帮助. 上篇介绍ABP的多语言,本篇主要介绍权限的数据库设计,用 ... 
- Javascript 创建对象方法的总结
			最近看了一下<Javascript高级程序设计(第三版)>,这本书很多人都推荐,我也再次郑重推荐一下.看过之后总得总结一下吧,于是我选了这么一个主题分享给大家. 使用Javascript创 ... 
- SVG简介
			最近遇到SVG这个名词,于是查阅资料,做个笔记. 前言 图片的数字化.将图片存储为数据有两种方案. 位图.也被称为光栅图.即是以自然的光学的眼光将图片看成在平面上密集排布的点的集合.每个点发出的光有独 ... 
- 1-2 nodejs小节 文件读取
			1.表达式 在命令行输入 node回车后,可以在后边输入相应的表达式,进行运算操作 2.阻塞文件读取 var data=fs.readFileSync('input.txt', 'utf-8') ... 
- 对CVE-2014-6271 [破壳漏洞] 的一次不太深入的跟踪
			@firtst:有些事,该你遇到的始终会遇到!2013年,Struts2远程代码执行漏洞闹的满城风雨时,当时还对此一无所知:2014年4月,HeartBleed掀起波涛汹涌时,较快对此予以关注,晚上跑 ... 
- 使用ArcGIS JavaScript API 3.18 加载天地图
			对于中国开发者在创建GIS应用的时候,往往比较头疼的是底图资源的缺乏.其实国家测绘地信局就提供一个很好的免费资源:天地图.使用ArcGIS API的开发人员可以直接利用该资源作为地图应用的底图. Ar ... 
