3.2 主模板設置
1)打開模板
打開模板:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Advanced\數據鑽取主報表.cpt。
2)修改數據集
為了方便查看數據,我們只取10條數據,因此將sql語句修改為:SELECT * FROM 訂單 limit 10
3)表樣修改
選中一些單元格,點擊合並單元格,設置此單元格的控件類型為網頁框。
表樣如下:

將網頁框控件名定義為:orderdetail,在地址中輸入${servletURL}?
添加一個參數reportlet,值為:doc/SpecialSubject/HyplinkReport/數據鑽取到當前模板子報表.cpt,這樣就可以在網頁框里打開3.1里的模板;
並定義一個參數ID把點擊的訂單ID傳到子模板中,因為第一次預覽模板沒有點擊超級鏈接ID編號,傳遞到子模板參數為空,沒有數據顯示,所以這邊通過判斷默認顯示10001的值,公式:if(len($ID)==0,10001,$ID)
設置的網頁框如下:

4)修改超級鏈接
點擊A2單元格,將網絡報表修改為當前模板的doc\SpecialSubject\HyplinkReport\數據鑽取到當前模板主報表.cpt,以&op=write的方式打開,並將鏈接打開於選擇當前窗口,添加參數ID=$$$,如下圖所示:

5)保存模板
保存模板,具體的模板可參考:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\HyplinkReport\數據鑽取到當前模板主報表.cpt。
3.3 效果查看
點擊填報預覽,即可查看效果,效果如上圖所示。
在線查看示例效果請點擊:
數據鑽取到當前模板主報表.cpt
超級鏈接之如何傳遞參數到網頁中
1. 描述
在制作模板時,可能有時候需要將報表中的參數或者某些值傳遞到自己的網頁中做一些處理,此時要如何將報表中的值傳遞到網頁中呢?

2. 思路
通過設置超級鏈接到網頁並設置參數,然后在網頁中通過request.getParameter("超級鏈接中的參數名")獲取參數即可。
3. 示例
3.1 模板准備
新建數據集ds1:SELECT * FROM 運貨商
按下圖設計模板樣式:

下面要做的是超級鏈接傳遞值設置和網頁中獲取值設置。
3.2 超級鏈接設置
右擊修改所在的D2單元格,點擊超級鏈接,增加一個網頁鏈接,具體設置如下圖:

已完成模板請參照%FR_HOME%\WebReport\WEB-INF\reportlets\doc\SpecialSubject\HyplinkReport\超鏈傳遞網頁參數.cpt
3.3 網頁獲取參數設置
獲取傳遞的參數
- <%
- String ID = request.getParameter("ID");
- String TELEPHONE = request.getParameter("TELEPHONE");
- %>
完整的代碼:
- <%@ page language="java" pageEncoding="GBK"%>
- "-//W3C//DTD HTML 4.01 Transitional//EN">
- <%
- String ID = request.getParameter("ID");
- String TELEPHONE =request.getParameter("TELEPHONE");
- %>
- "350" border="0" cellspacing="1" cellpadding="5px">
- "130">運貨商編碼:"208">"text" id="ID" value="<%=ID %>" disabled/>
- 電話:"text" id="TELEPHONE" value="<%=TELEPHONE %>"/>
將其命名為update1.jsp並保存到%TOMCAT_HOME%\webroot目錄下。
3.4 效果查看
啟動tomcat服務器,預覽模板,點擊超級鏈接即可看到對應的值被傳遞到網頁中了,如上效果圖。
在線查看示例效果請點擊
超鏈傳遞網頁參數.cpt
超級鏈接到網頁傳遞的中文亂碼
1. 問題描述
在使用超級鏈接到網頁傳遞參數時,若值中有中文,會出現亂碼,如下圖所示,那么如何傳遞讓傳遞的中文值不出現亂碼呢?

2. 實現思路
由於FR中的超級鏈接傳遞過來的參數被編碼過了,所以在jsp頁面中獲取該參數時,需要通過java.net.URLDecoder.decode進行解碼。
3. 示例
打開上一節中的模板%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\HyplinkReport\超鏈傳遞網頁參數.cpt
3.1 修改超級鏈接
在超級鏈接中增加一個參數,參數名為NAME,參數值為=B2,如下圖:

已完成模板請參照%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\HyplinkReport\超鏈到網頁傳遞中文轉碼.cpt
3.2 網頁修改
在獲取參數中增加如下代碼:
- String NAME = java.net.URLDecoder.decode(request.getParameter("NAME"),"UTF-8"); //將NAME參數的值進行解碼
注:若ID和TELEPHONE也有中文,也可以通過此方法進行反編碼。
完整代碼如下:
- <%@ page language="java" pageEncoding="GBK"%>
- "-//W3C//DTD HTML 4.01 Transitional//EN">
- <%
- String ID = java.net.URLDecoder.decode(request.getParameter("ID"),"UTF-8");
- String NAME =java.net.URLDecoder.decode(request.getParameter("NAME"),"UTF-8");
- String TELEPHONE = java.net.URLDecoder.decode(request.getParameter("TELEPHONE"),"UTF-8");
- %>
- "350" border="0" cellspacing="1" cellpadding="5px">
- "130">運貨商編碼:"208">"text" id="ID" value="<%=ID %>" disabled/>
- 公司名稱:"text" id="NAME" value="<%=NAME %>"/>
- 電話:"text" id="TELEPHONE" value="<%=TELEPHONE %>"/>
3.3 效果查看
啟動tomcat服務器,預覽模板,點擊超級鏈接,可以看到對應的中文正常顯示了,如下圖:

在線查看示例效果請點擊
超鏈到網頁傳遞中文轉碼.cpt
單元格間聯動
1. 描述
在查看報表時,可能某列的數據比較重要或者內容比較多的情況下,希望點擊該行的某個數據時讓其詳細信息單獨顯示在數據的下方,並且不希望查數據庫,此時要如何處理呢?

如上圖,我們點擊訂單號,下面的收貨人地址顯示對應訂單號的貨主城市+貨主地址。
2. 思路
通過給單元格增加超級鏈接-JavaScript,在js中給下面對應的單元格賦值。
3. 示例
下面我們以一個例子為例來看下如何實現效果。
3.1 打開模板
打開模板:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Primary\DetailReport\改變顯示值.cpt
3.2 增加數據列

如上圖所示將貨主地址拖入到H2單元格中,然后點擊高級>自定義顯示將其修改為:貨主城市+$$$,即讓其顯示為"貨主城市+貨主地區",最后將該單元格的列寬設置為0。
注:"貨主城市+$$$"中的貨主城市是數據列。
3.3 固定單元格設置
由於要給單元格賦值並且在擴展數據的下方,因此若要在固定位置顯示值就要做如下幾個設置。
1)每頁顯示固定條數
我們要讓每一頁固定顯示的條數相同,因此要給單元格增加行后分頁的條件屬性。
給A2單元格增加行后分頁的條件屬性,公式條件類型選擇公式,並在公式中輸入:(row()-1)%10 == 0即每頁顯示10條擴展出的數據。
2)重復標題行和結尾行設置
重復標題行:右擊行序號1,選擇設置重復標題行。
重復結尾行:選中3、4行,右擊選擇設置重復結尾行。
最終的表樣如下:

3.4 超級鏈接設置
下面我們要做的就是給A2單元格設置超級鏈接,使點擊A2單元格時,對應的隱藏的H2單元格的內容顯示在B4單元格中。
右擊A2單元格,選擇超級鏈接,點擊JavaScript,具體設置如下圖:

- var display=$("[id^='B13-0']"); //獲取BS端的B13單元格
- display.text(address); //給B13單元格賦值
注:這邊是給BS端對應的單元格賦值,由於A2單元格是擴展的並且固定顯示10行數據,因此在模板中的B4單元格在BS端就是B13單元格了。
3.5 分頁預覽
點擊分頁預覽, 點擊對應的訂單ID可以看到下面的顯示的是對應的詳細收貨人地址,如上效果圖。
已完成的模板可參考:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\HyplinkReport\單元格間聯動.cpt。
在線查看示例效果請點擊
CellsRelate.cpt
數據鑽取並返回
1. 描述
通過主表超級鏈接鑽取到子報表中,希望子報表中有個“返回上一頁”,當主表中有參數時,點擊“返回上一頁”能夠使用之前使用的參數進行查詢數據,且不需要再次點擊查詢按鈕,如下圖所示:

2. 思路
子表中通過設置超級鏈接-JavaScript實現並定義參數,主表中需要將參數界面中的點擊參數前不顯示報表內容勾選掉即可。
3. 示例
下面我們來看下具體的實現過程。
3.1 主報表設置
1)打開模板
打開模板:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Advanced\數據鑽取主報表.cpt。
2)參數設置
增加一個名為orderID的報表參數,設置其默認值為10001,如下圖:

給訂單ID所在的數據列增加一個訂單ID = $orderID的過濾條件,如下圖:

3)參數界面設置
將參數orderID的控件類型設置為下拉框,其實際值與顯示值為訂單表中的訂單ID,如下圖:

標簽值設置為訂單編號,如下圖:

將點擊參數前不顯示報表內容勾去,如下圖所示:

已完成模板請參照%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\HyplinkReport\鑽取並返回主報表.cpt
3.2 子報表設置
1)打開模板
打開模板:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Advanced\數據鑽取子報表.cpt。
2)超級鏈接設置
在某個空白單元格中填入返回上一頁,右擊選擇超級鏈接,點擊增加JavaScript,具體設置如下:

添加如下JS事件:
- location=FR.cjkEncode("?viewlet=doc/SpecialSubject/HyplinkReport/鑽取並返回主報表.cpt&orderID=")+orderID;
已完成模板請參照%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\HyplinkReport\鑽取並返回子模板.cpt
3.3 效果查看
分頁預覽主報表,點擊超級鏈接到子報表后,在點擊返回上一級即返回到主報表中,如上效果圖。