上次介紹FineReport的JS API中的第一類開發--FR,這次就來介紹一下FS和contentWindow類的開發。
1 FS
FS是資料決策系統中的js介面,比如說FS.tabPane.addItem,先介紹幾類操作:
1.1 FS.Trans.signOut()
退出決策平台系統
1.2FS.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')
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這個控制項:
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) |
擷取指定名字的控制項 |