1. 概述
1.1 問題描述
下拉樹控件默認值設置 ,要求默認值必須爲節點的完整路徑。當下拉樹層級較多或下拉樹爲多選且需要設置多個默認值時,填寫節點的完整路徑就會非常複雜。所以在層級較多和需要多個默認值的情況下,如何簡單填寫默認值呢?效果如下圖所示:
1.2 解決思路
通過「自定義函數」實現根據子節點的值找出葉子節點的完整路徑。
注:此方法只能用於構建方式爲「自動構建」的下拉樹控件。
1.3 函數簡介
函數:TREENODEFINDER(param1,param2)
釋義 :
1)param1 爲葉子節點的值,可以是顯示值,也可以是實際值。
傳入單個值時,以 value 格式傳入。
傳入多個值時,以數組格式 ARRAY(value1,value2,.....) 傳入。
value 爲字符串時需要加 "" 。
2)param2 爲構建下拉樹控件的樹數據集名稱,值格式爲“TreeName”。
示例:
單值:TREENODEFINDER("部長","Tree1")
多值:TREENODEFINDER(ARRAY("部長","會計"), "Tree1")
2. 示例
2.1 編寫自定義函數
編寫自定義函數 TREENODEFINDER ,完整代碼詳見:
2.2 編譯自定義函數
2.2.1 生成 class 文件
編譯 2.1中的 TREENODEFINDER 代碼 ,生成類文件 TREENODEFINDER.class 。
注:編譯時需導入 FineReport 工程 JAR 包,包括安裝工程包 %FR_HOME%/lib 下面的所有的包,%FR_HOME%/server/lib 下面的所有包,%FR_HOME%/webapps/webroot/WEB-INF/lib 下面的所有包,還要引入 JDK 的tools.jar。詳情請參見 編譯Java程序
這裏也可以不用編譯,直接使用編譯好的 class 文件,點擊下載并解壓 TREENODEFINDER.class :TREENODEFINDER.7z
2.2.2 導入 class 文件
将編譯生成的 TREENODEFINDER.class 文件複制到%FR_HOME%\webapps\webroot\WEB-INF\classes\com\fr\function目錄下 ,如下圖所示:
2.3 注冊自定義函數
打開設計器,選擇「服務器」>「函數管理器」,增加一個自定義函數 TREENODEFINDER,選擇類com.fr.function.TREENODEFINDER,如下圖所示:
2.4 模板設置
2.4.1 新建模板
新建普通報表。
1)創建數據集「公司部門」,SQL語句爲:
SELECT * FROM 公司部門
如下圖所示:
2)創建樹數據集「Tree1」,如下圖所示:
2.4.2 設置下拉樹控件
在參數面板中添加「下拉樹控件」,點擊控件,在「控件設置」>「屬性」>「數據字典」處,選擇「自動構建」,開始構建下拉樹,如下圖所示:
2.5 設置下拉樹默認值
使用自定義函數 TREENODEFINDER 設置下拉樹默認值。
點擊下拉樹控件,在「控件設置」>「屬性」>「控件值」位置,選擇「公式」,輸入 TREENODEFINDER("部長", "Tree1") ,如下圖所示:
2.6 效果預覽
2.6.1 PC端
保存模板,點擊「分頁預覽」,效果如 1.1 節所示。
2.6.2 移動端
App 及 HTML5 效果如下圖所示:
3. 附件下載
已完成模板可參見:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\function\自定義函數設置下拉樹默認值.cpt 。
點擊下載模板:自定義函數設置下拉樹默認值.cpt
點擊下載并解壓 TREENODEFINDER.class 文件:TREENODEFINDER.7z