Web報表工具FineReport的JS API開發(二)

上次介紹FineReport的JS API中的第一類開發--FR,此次就來介紹一下FS和contentWindow類的開發。html

1 FSweb

FS是數據決策系統中的js接口,好比說FS.tabPane.addItem,先介紹幾類操做:瀏覽器

1.1 FS.Trans.signOut()框架

退出決策平臺系統this

1.2 FS.tabPane._doCloseTab(FS.tabPane._getSelectedTab())spa

關閉當前決策平臺的標籤code

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

在決策平臺中打開新標籤頁htm

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.3 引用curLGP

在cpt模板的JS腳本中可使用contentPane.curLGP來獲取該對象。

若是報表嵌在網頁的iframe中,在iframe外獲取curLGP對象以下:

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

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.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;
相關文章
相關標籤/搜索