1. 概述
1.1 版本
報表服務器版本 |
---|
10.0 |
1.2 問題描述
客戶的用戶群體較大,涵蓋範圍較廣,爲了數據安全,在數據填報錄入時,需要根據用戶所在的區域,将用戶錄入的數據存入不同的數據庫表中,這些數據表的表結構完全一樣(即表的字段名,字段類型等設置完全一樣)。
如果不同區域使用不同的模板,會加大開發和後期維護的工作量,那麽怎麽才能在一張模板中實現,根據區域的不同,将數據填報至不同的數據庫表中呢?
1.3 解決思路
在 報表填報屬性 添加内置 SQL,選擇數據庫和數據表的時候,在選擇數據庫和數據表名稱的地方直接輸入=$參數。
如下圖所示:
在模板中添加該參數,并給參數賦值(值應該爲數據庫名稱或者數據表名稱),在點擊提交按鈕的時候,将參數值傳遞過來,實現入庫操作。
注1:參數的值爲不同的數據表名稱,那麽所有這些數據表與模板綁定的字段必須完全一樣。
注2:數據庫名稱是指 FineReport 建立的數據連接名稱。
2. 示例
以 FineReport 設計器内置 FRDemo 的「訂單表」和「S 訂單表」爲例,向這兩張表中插入數據。
2.1 模板設計
在 FineReport 設計器中,點擊文件>新建普通報表,參照下圖設計模板:
控件類型與單元格的對應關系如下表所示:
單元格 | 控件類型 | 控件數據字典 | 單元格形态 |
---|---|---|---|
A2 | 數字控件 | 無 | 無 |
B2 | 下拉框控件 | 實際值:客戶表的客戶ID,顯示值:客戶名稱 | 實際值:客戶表的客戶ID,顯示值:客戶名稱 |
C2 | 日期控件 | 無 | 無 |
D2 | 下拉框控件 | 實際值:運貨商表的運貨商ID,顯示值:公司名稱 | 實際值:運貨商表的運貨商ID,顯示值:公司名稱 |
E2 | 下拉框控件 | 實際值:訂單表的貨主地區,顯示值:貨主地區 | 無 |
注:下拉框數據字典和形态的具體設置方式請查看 數據字典
2.2 添加模板參數
在 FineReport 設計器中點擊模板>模板參數 ,添加兩個參數base 和table,默認值爲空。
其中 base 參數用來傳遞數據庫的名稱,table 參數用來傳遞表名,如下圖所示:
2.3 參數設置
1)将 base 參數和 table 參數全部添加到「參數面板」中,base 控件和 table 控件均使用下拉框,如下圖所示:
2)修改 Labelbase 控件的控件值爲數據庫:,如下圖所示:
以相同步驟,修改 Labeltable 控件的控件值爲數據表:。
3)base 參數下拉框的控件值爲FRDemo ,如下圖所示:
4)table 參數下拉框的控件值爲訂單 ,數據字典中類型設置選擇自定義,輸入所有需要填報的數據表的名稱,形成下拉框的下拉選項。
如下圖所示:
2.4 報表填報屬性設置
注:由於參與動态填報的數據庫中的數據表中與單元格綁定的字段都是一緻的,所以随便選擇一組在數據庫中存在的數據庫名和表名稱即可,主要是爲了獲取需單元格綁定的數據表字段。
1)退出參數面板,點擊模板>報表填報屬性,添加内置 SQL,數據庫後面輸入=$base,表後面輸入=$table,會彈出一個參數輸入框,base 參數輸入 FRDemo,點擊确定。如下圖所示:
2)點擊智能添加字段,會彈出一個參數輸入框,base 參數輸入 FRDemo,table 參數輸入訂單。如下圖所示:
3)選擇需要填報入庫的字段,點擊智能添加單元格,将模板總的字段與數據表字段綁定起來,設置「訂單 ID 」爲主鍵,如下圖所示:
2.5 效果查看
注:該方法支持移動端,以 PC 端效果爲例。
保存模板,點擊填報預覽。
如下圖所示,數據庫由於只有一個值,無需選擇,即 base 參數爲 FRDemo。
注:base參數也是可以改變的,只需要給其賦值即可。
1)數據表選擇訂單,點擊查詢,填報一條記錄,提交入庫,即可在訂單表中看到剛剛插入的記錄,而 S 訂單表中則沒有。如下圖所示:
2)數據表選擇 S 訂單,點擊查詢,填報一條記錄,提交入庫,即可在S 訂單表中看到剛剛插入的記錄,而訂單表中則沒有。如下圖所示:
3. 已完成模板
已完成模板可參見:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Form\TypicalApp\DynamicForm.cpt
點擊下載模板:DynamicForm.cpt