1. 概述
1.1 應用場景
超連結傳參時,如果一個參數有多個英文逗號隔開的值,怎麼實現點選之後子表可以將這些值相關的資料一起顯示出來呢?效果如下圖所示:
1.2 實現思路
主表正常設定超連結傳參,子表如果是資料集參數, SQL 語句要使用 in 來查詢傳入的多個值,子表如果是範本參數,要用 split() 公式設定過濾條件。
本文範例的子表是資料集參數,範本參數的設定會在本文 2.1 節簡單提及。
2. 範例
本文範例:主表超連結傳入的參數為10001,10002,點選超連結後,子表顯示訂單號為10001和訂單號為10002的資料。
2.1 設計子表
1)開啟範例範本:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doctw\SpecialSubject\HyplinkReport\訂單明細表.cpt
或者點選此處直接下載範例範本:訂單明細表.cpt
2)修改 SQL 語句,利用 in 來查詢傳入的多個值,得出相應的資料。
注:建議使用方案二的 SQL 語句,統一為需要查詢的的參數加上引號,防止因資料型別不匹配而導致查詢失敗。
方案一:當傳入參數型別為整數型態時,在 in 列表中的值可不加引號,直接查詢。
SELECT * FROM 訂單明細 WHERE 訂單ID in (${訂單號})
方案二:當傳入參數型別為字串或日期時,在 in 列表中的值需要加上引號。
SELECT * FROM 訂單明細
WHERE 1=1
${if(len(訂單號) == 0,"","and 訂單ID in ('" SUBSTITUTE(訂單號,",","','") "')")}
公式說明如下:
('" SUBSTITUTE(訂單號,",","','") "')" 將傳入參數中的英文逗號更換為','字,即為傳入參數中的每個值單獨加上引號。範例傳入的參數值為10001,10002,最終更換為('10001','10002')
${if(len(訂單號) == 0,"","and 訂單ID in ('" SUBSTITUTE(訂單號,",","','") "')")} 表示定義一個資料集參數 訂單號。
點選超連結,當傳入參數 訂單號 不為空時,連接上 and條件,即and 訂單ID in ('" SUBSTITUTE(訂單號,",","','") "')" ,使用傳入的訂單號進行查詢。
3)將該範本儲存到 %FR_HOME%\webapps\webroot\WEB-INF\reportlets\doctw\SpecialSubject\HyplinkReport\ 路徑下,重命名為:參數傳遞多值子表.cpt
注:這個範例的子表用的是資料集參數,如上設定即可,但是如果您用的是範本參數,需要按照下圖設定過濾條件:
這個過濾條件的運算子必須是「包含於」,公式為:=split($訂單號,",")
2.2 設計主表
1)建立普通報表,建立內建資料集 ds1 ,其中訂單ID欄位裏有 2 個英文逗號隔開的值,如下圖所示:
2)如下圖設計表格,將資料集欄位拖到對應儲存格中。
3)選中 A2 儲存格,設定網路報表型別的超連結,連結到上面的子表,設定參數訂單號,其值為公式=$$$,如下圖所示:
2.3 效果預覽
2.3.1 PC 端
儲存主表,分頁預覽後超連結效果如 1.1 節應用場景中所示。
2.3.2 行動端
App 與 HTML5 端效果相同,如下圖所示:
3. 範本下載
完成範本參見:
%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doctw\SpecialSubject\HyplinkReport\參數傳遞多值主表.cpt
%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doctw\SpecialSubject\HyplinkReport\參數傳遞多值子表.cpt
點選下載範本: