1. 概述
1.1 需求描述
當填報通過子報表實現時,希望子報表填報成功後,數據能馬上在主報表中顯示出來,通常采用的方法是刷新主報表,要如何設置才能實現子報表填報成功後刷新主報表呢?效果如下圖所示:
1.2 實現思路
在子模板中添加「填報成功」事件,事件内容爲重新加載主模板。
2. 示例
2.1 準備模板
主模板:内置模板 %FR_HOME%\\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\HyplinkReport\Hyperlink5.cpt
子模板:内置模板%FR_HOME%\\webapps\webroot\WEBINF\reportlets\doc\SpecialSubject\HyplinkReport\Hyperlink6.cpt
點擊下載模板:HyperLink5.cpt HyperLink6.cpt
主模板報表樣式如下圖所示:
子模板報表樣式如下圖所示:
示例主模板中 A1 單元格已添加了超鏈接到子模板,用戶參考時超鏈接可按實際應用添加,注意超鏈接需傳遞填報預覽參數op=write 給子模板,如下圖所示:
2.2 子模板添加事件
打開子模板 Hyperlink6.cpt,點擊菜單欄「模板>模板Web屬性」,選擇「填報頁面設置>爲該模板單獨設置」,爲子模板添加一個「填報成功」事件,如下圖所示:
JavaScript 代碼如下:
window.parent.location.reload();
2.3 效果預覽
打開主模板 Hyperlink5.cpt,點擊「分頁預覽」,在主報表中點擊訂單ID,在彈出的對話框子報表中修改數據,點擊提交後,主報表即可自動刷新,效果如 1.1 節所示。
注:不支持移動端。
3. 示例拓展
當主報表有參數查詢時,子報表填報後主報表刷新,會導緻主報表中參數控件中的值無法保留,那如何實現主報表刷新後其查詢參數依舊保留呢,效果如下圖所示:
3.1 修改主模板
1)打開主模板 Hyperlink5.cpt,數據集 ds1修改爲 SELECT * FROM 訂單 where 1=1 ${if(len(客戶ID)=0,""," and 客戶ID='"+客戶ID+"'")} ,如下圖所示:
2)編輯參數面板,将「客戶ID」參數添加到參數面板,并設置控件類型爲「下拉框控件」,如下圖所示:
3)點擊下拉框控件,在「控件設置>屬性>數據字典」處,爲控件綁定 FRDemo 庫中客戶表的字段,如下圖所示:
4)點擊參數面板空白處,在「控件設置>屬性」處,将「點擊查詢前不顯示報表内容」取消勾選,如下圖所示:
5)點擊 A2 單元格 ,在「超級鏈接」處打開要鏈接到子模板的「網絡報表1」,勾選底部「繼承報表的參數」,如下圖所示:
3.2 修改子模板
打開子模板 Hyperlink6.cpt,點擊菜單欄「模板>模板Web屬性」,選擇「填報頁面設置>爲該模板單獨設置」,修改子模板的「填報成功」事件中的 JS 代碼,如下圖所示:
注意需要在事件設置窗口的參數位置添加一個參數ID,值爲公式:$客戶ID
JavaScript 代碼如下:
window.parent.location="http://localhost:8075/webroot/decision/view/report?viewlet=HyperLink5.cpt&客戶ID="+ID;
注:代碼中 URL 路徑對應子模板在報表工程中的路徑,用戶使用時要根據實際報表所在位置修改。
因爲在主模板中勾選了繼承報表的參數,所以預覽時,在子報表中會存在參數「客戶ID」,JS 的作用是重新加載主報表,并将子報表從主報表繼承的參數傳回主報表。
3.3 效果預覽
打開主模板 Hyperlink5.cpt,點擊「分頁預覽」,在主報表中點擊訂單ID,在彈出的對話框子報表中修改數據,點擊提交後,主報表即可自動刷新,且下拉框中保留了查詢參數,效果如第 3 章開頭所示。
注:不支持移動端。