標籤:報表 潤乾報表 動態資料源 集算報表
經常會遇到一些報表需要根據不同的情況(參數)串連不同的資料來源從而完成相應的資料的展現,也就是經常說的動態資料源報表。報表工具通常的做法有兩種,一是不同的情況載入不同的資料來源串連參數,如:url、driver、username、password等;二是利用已配置的多個串連池,根據不同情況選擇。這裡通過一個執行個體,說明潤乾報表的實現過程及改進方案。
報表說明
應用中需要通過參數控制報表串連的資料來源,當參數flag為1時串連資料來源一(db1),否則串連資料來源二(db2)。
潤乾報表實現
首先根據flag參數為context設定不同資料來源(這裡以兩個hsql資料庫為例):
String flag=request.getParameter("flag");
Connection con1 = null;
Connection con2 = null;
try{
Driver driver = (Driver)Class.forName("org.hsqldb.jdbcDriver").newInstance();
DriverManager.registerDriver(driver);
con1=DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/runqianDB","sa","");
con2=DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/demo","sa","");
}catch (Exception e){
e.printStackTrace();
}
Context cxt= new Context();
String defDsName =cxt.getDefDataSourceName ();
if ("1".equals(flag) || "1"==flag){
cxt.setConnection(defDsName,con1);
}else{
cxt.setConnection(defDsName,con2);
}
將cxt存入request:
request.setAttribute("myContext", cxt );
以context方式發布報表:
<report:htmlname="report1"
contextName=”myContext”
/>
通過使用潤乾報表的API可以完成動態資料源報表,詳盡的API的確為應用開發人員提供了諸多便利。不過,由於上面的做法我們看到都需要依賴Java編程,修改維護性很差,對一般報表開發維護人員都是不小的挑戰。
這種情況下,如果採用潤乾公司基於潤乾報表引擎開發的集算報表,則可以非常方便完成動態資料源報表需求,集算報表內建了用於處理報表資料來源準備的集算器,在集算器中編寫處理動態資料源的代碼比較簡單。
集算報表實現
編寫集算指令碼
使用集算指令碼編輯工具完成計算指令碼,並為報表輸出計算後結果集:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/45/F6/wKioL1PteBGxqkHyAAFVQZ0N_9w697.jpg" style="float:none;" title="1.jpg" alt="wKioL1PteBGxqkHyAAFVQZ0N_9w697.jpg" />
A1:根據參數flag值決定串連哪個資料來源(db1和db2為資料來源名稱)
A2:執行sql取數
A3:關閉串連
A4:將結果集返回報表
報表調用
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/45/F6/wKioL1PteBLTYH3nAAE5lbuNa80476.jpg" style="float:none;" title="2.jpg" alt="wKioL1PteBLTYH3nAAE5lbuNa80476.jpg" />
在集算指令碼中處理動態資料源後,將結果輸出給報表範本,報表範本使用時就好像在使用一個資料來源一樣,從而簡化了報表開發。此外,集算器指令碼允許使用者分步編寫計算邏輯,並且代碼比較簡單(相對Java和sql來說),從而提升了報表開發和維護效率。