潤乾報表 動態改變數據源


經常會遇到一些報表需要根據不同的情況(參數)連接不同的數據源從而完成相應的數據的展現,也就是經常說的動態數據源報表。

實現動態數據源有多種方法:具體說兩種使用過的方法:
第一種:使用腳本集算器法

使用集算腳本編輯工具完成計算腳本,並為報表輸出計算后結果集:

 

 A1:根據參數dbname參數值決定數據源

 A2:編寫查詢SQL

    A3:執行sql取數

    A4:關閉連接

    A5:將結果集返回報表 

優點:開發簡單,理解方便。缺點:必須 集算器授權

第二種:TAG標簽
1、導包

 

1 <%@ page import="com.raqsoft.report.usermodel.Context"%>
2 <%@ page import="com.raqsoft.report.view.*"%>
3 <%@ page import="com.raqsoft.report.util.*"%>
4 <%@ page import="com.raqsoft.report.model.ReportDefine"%>
5 <%@ page import="com.raqsoft.report.usermodel.DataSetMetaData"%>
6 <%@ page import="com.raqsoft.report.usermodel.DataSetConfig"%>

 

 

2.編寫更換數據源的方法

 1 <%!
 2     public static ReportDefine changeDataSource(String filePath, String dataSourceName){
 3         ReportDefine rd = null;
 4         try{
 5             rd = (ReportDefine)ReportUtils.read(filePath);//讀取報表
 6             DataSetMetaData dsmd = rd.getDataSetMetaData(); //取數據集元數據
 7             for(int i=0; i<dsmd.getDataSetConfigCount(); i++){//遍歷數據集
 8                 DataSetConfig dsc = dsmd.getDataSetConfig( i );//數據集配置 數據集的抽象定義
 9                 dsc.setDataSourceName( dataSourceName );//設置數據集引用到的數據源名稱
10                 dsmd.setDataSetConfig( i, dsc);//修改數據集配置
11             }
12             rd.setDataSetMetaData(dsmd);//設置數據集元數據
13             ReportUtils.write(filePath, rd);//保存修改后的rd文件
14         }catch(Exception e){
15          return null;
16         }
17         return rd;
18     }
19 %>

 

3.調用換取數據源方法

 1     //獲取數據源名稱
 2     String dbname = request.getParameter("dbname");
 3     
 4     //動態設置報表中數據集的數據源
 5     String reportPath = request.getRealPath("/WEB-INF/reportFiles/"+report);
 6     ReportDefine rd = changeDataSource(reportPath, dbname);
 7     
 8     //把 ReportDefine 放在Request 中,方便取用
 9     String rptName = "RPT_"+Double.toString(Math.random());
10     request.setAttribute(rptName,rd);

 

 4.發布報表

使用defineBean方式發布報表,有參數模版包括參數模版

 1 <report:param name="form1" 
 2     srcType="defineBean"
 3     beanName="<%=paramsFileName%>"
 4     needSubmit="no"
 5     params="<%=param.toString()%>"
 6     hiddenParams="<%=param.toString()%>"
 7     needImportEasyui="no"
 8     resultContainer="reportContainer"
 9     resultPage="<%=resultPage%>"
10 />
11 
12 <report:html name="report1" 
13     srcType="defineBean"
14     beanName="<%=rptName%>"
15     funcBarLocation="no"
16     needScroll="<%=scroll%>"
17     generateParamForm="no"
18     params="<%=param.toString()%>"
19     exceptionPage="/reportJsp/myError2.jsp"
20     appletJarName="/raqsoftReportApplet.jar"
21     scrollWidth="100%" 
22     scrollHeight="100%"
23     needImportEasyui="no"
24     printedRaq="<%=exportReportName%>"
25 />

 

優點:只使用報表即可 缺點:編寫復雜,不易懂

以上實測有效。以下為了解方法,未實踐。

第三種:使用API方式

參考連接地址:http://blog.sina.com.cn/s/blog_8910bc4f0100ugyd.html

第四種:潤乾報表實現(官方論壇方法)

參考地址:http://bbs.raqsoft.com.cn/portal.php?mod=view&aid=394


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM