1. 概述
1.1 問題描述
決策系統目錄頁面顯示的是報表節點,點擊報表節點就會在右側網頁的 iframe 中顯示出報表,在點擊該節點的時候也會傳遞一些參數給網頁,比如時間和用戶信息等。現在希望 iframe 中的報表能夠獲取到主頁面中傳遞過來的參數,直接填入報表預覽頁面中。
例如:實現點擊網頁鏈接help/page_demo/geturlpara.html?report=doc/Parameter/MultiValue/MultiValue.cpt&area=華東&province=江蘇&city=無錫,報表可以直接獲取并填入這些參數:
1.2 實現思路
點擊報表節點打開一個網頁,網頁對應的 URL 如:/工程名/xxx.html?para=paravalue,在網頁加載時先通過 JS 獲取 URL 中的參數值,嫁接在 iframe 的 src 後,形成最終的報表路徑。
2. 示例
2.1 制作HTML文件
制作 HTML 文件,代碼如下所示,并将該文件放到設計器安裝路徑%FR_HOME%/webapps/webroot/help/page_demo/geturlpara.html下。
注:該 HTML 文件已經合到設計器 exe 中,用戶可以直接使用。
将報表生成網頁時,給網頁添加 onload 事件,首先獲取 URL 中的參數,然後嫁接到 iframe 的 src 上,或者通過獲得的參數拼接出完整的報表 URL 賦給 iframe 的 src。
HTML 代碼:
<html>
<head>
<title>FineReport Demo</title>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<script type="text/javascript" src="/webroot/decision/view/report?op=emb&resource=finereport.js"></script>
<script type="text/javascript">
function autoLoad(){
//返回從問号 (?) 開始的 URL(查詢部分)
var paraString = location.search;
//多個參數用&分隔,将參數字符串轉爲數組,使每個參數值存於一個數組元素中
var paras = paraString.split("&");
//每個數組元素中"="後面的值即參數值
var reportName = paras[0].substr(paras[0].indexOf("=") + 1);
var area = paras[1].substr(paras[1].indexOf("=") + 1);
var province = paras[2].substr(paras[2].indexOf("=") + 1);
var city = paras[3].substr(paras[3].indexOf("=") + 1);
//使用獲取的參數值拼接出最終的url
var reportURL = "/webroot/decision/view/report?viewlet=" + reportName + "&area=" + area + "&province=" + province + "&city=" + city;
//URL 中可能包含中文或特殊字符因此需要進行編碼轉換,注意需要先引入 finereport.js
reportURL = encodeURI(reportURL);
//将新的報表路徑賦給報表所在 iframe 的 src
document.getElementById("reportFrame").src = reportURL;
}
//加載網頁時調用autoLoad方法
window.onload = autoLoad;
</script>
</head>
<body>
<iframe id="reportFrame" width="900" height="400"></iframe>
</body>
</html>
2.2 決策系統添加鏈接
決策系統選擇管理系統>目錄管理>管理目錄>添加鏈接,新增一個鏈接形式的報表節點。
鏈接路徑爲:help/page_demo/geturlpara.html?report=doc/Parameter/MultiValue/MultiValue.cpt&area=華東&province=江蘇&city=無錫
2.3 效果查看
點擊新生成的報表節點後,鏈接路徑中的參數就傳遞到報表中了。