.net系統獲取報表值
1. 問(wèn)題描述
.net系統,怎么實(shí)現跨平臺獲取報表里面單元格的值,并對值進(jìn)行計算呢?
2. 解決方案
通過(guò)Axis2將一個(gè)java類(lèi)(實(shí)現了獲取報表里面單元格的值)部署成一個(gè)WebService,非java系統如.net系統通過(guò)URL訪(fǎng)問(wèn)該WebService,獲取到報表里某單元格的值。
WebService:是一個(gè)應用組件,能夠為其他應用程序提供數據與服務(wù)。其他應用程序通過(guò)Internet來(lái)訪(fǎng)問(wèn)并使用這項在線(xiàn)服務(wù)。
Axis2:是WebService的框架,用于建立和部署WebServices。
3. 實(shí)現步驟
下面以部署到Tomcat服務(wù)器為例:
3.1 安裝Axis2
下載axis.2.war文件,放到%tomcat_home%\webapps下。重新啟動(dòng)tomcat服務(wù)器,會(huì )在webapps目錄下生成axis2文件夾。在瀏覽器地址欄中輸入http://localhost:8080/axis2/,出現如下圖效果,則表示Axis2安裝成功。
下面我們來(lái)實(shí)現一個(gè)簡(jiǎn)單的Finereport類(lèi),通過(guò)參數來(lái)獲取報表gettingstarted.cpt里面第幾行第幾列單元格的值,并把值轉換成double類(lèi)型,代碼如下:
1. import java.io.File;
2. import java.io.FileNotFoundException;
3. import com.fr.base.FRContext;
4. import com.fr.base.dav.LocalEnv;
5. import com.fr.report.ResultReport;
6. import com.fr.report.ResultWorkBook;
7. import com.fr.report.WorkBook;
8. import com.fr.report.io.TemplateImporter;
9.
10. public class Finereport {
11. public double createnumber(int col,int row) throws FileNotFoundException, Exception {
12. double r = 0;
13. try {
14. // 讀取模板
15. File cptfile = new File(
16. "D:\\FineReport_6.5.4\\WebReport\\WEB-INF\\reportlets\\gettingstarted.cpt");
17. TemplateImporter tplimp = new TemplateImporter();
18. WorkBook workbook = tplimp.generateWorkBook(cptfile);
19. /*
20. * 生成參數map,注入參數與對應的值,用于執行報表 該模板中只有一個(gè)參數country,給其賦值China
21. * 若參數在發(fā)送請求時(shí)傳過(guò)來(lái),可以通過(guò)req.getParameter(name)獲得
22. * 獲得的參數put進(jìn)map中,paraMap.put(paraname,paravalue)
23. */
24. java.util.Map paraMap = new java.util.HashMap();
25. paraMap.put("province", "江蘇");
26. // 首先需要定義執行所在的環(huán)境,這樣才能正確讀取數據集信息
27. String envPath = "D:\\FineReport_6.5.4\\WebReport\\WEB-INF";
28. FRContext.setCurrentEnv(new LocalEnv(envPath));
29. // 使用paraMap執行生成結果
30. ResultWorkBook result = workbook.execute(paraMap);
31. // 使用結果如轉換成double型
32. ResultReport rt = result.getResultReport(0);
33. String s = rt.getDefaultBlock().getCellValue(col-1, row-1).toString(); //通過(guò)參數獲取報表某列某行的值,由于col和row是從0開(kāi)始的,因此要將參數的值-1。
34. r = Double.valueOf(s).doubleValue();
35. return r;
36. } catch (Exception e) {
37. e.printStackTrace();
38. }
39. return r;
40. }
41. }

3.3 用POJO方式發(fā)布WebService
把報表環(huán)境下面的fr-server-6.5.jar包和fr-third-6.5.jar包放到%tomcat_home%\webapps\axis2\lib下;在%axis2%\WEB-INF下新建pojo文件夾;在pojo文件夾里放入剛定義的Finereport.class類(lèi)文件,就將Finereport類(lèi)發(fā)布成了WebService。
3.4 在.net系統中訪(fǎng)問(wèn)WebService

FineReport與上海普元集成方案
1. 上海普元EOS Studio介紹
客戶(hù)使用EOS Studio跟報表服務(wù)器集成,EOS Studio是基于J2EE、Eclipse等開(kāi)放的技術(shù)和平臺是高性能的開(kāi)發(fā)工具,圖形化的SOA服務(wù)設計與服務(wù)裝配:支持Top-Down模式的服務(wù)設計、裝配與實(shí)現,也支持Bottom-Up模式的先實(shí)現功能,再封裝為服務(wù)的模式;因此可以跟我們報表進(jìn)行緊密集成。
2. FineReport與上海普元集成步驟
2.1 復制目錄
把我們的報表%FineReport_HOME%\WebReport\WEB-INF目錄下面的reportlets,resources文件夾拷貝到EOS Studio:apache-tomcat-5.5.20\webapps\eos-default\WEB-INF安裝目錄下。把classes下面的類(lèi)和lib下面的fr-server-6.5.jar,fr-third-6.5.jar文件放到項目里面的classes文件和lib文件里面。
2.2 整合web.xml文件
只需要在已有工程的web.xml中添加相應的servlet與servlet-mapping子元素。將%FineReport_HOME%/WebReport/WEB-INF下的web.xml中的部分復制到項目安裝目錄下的web.xml中,在最后一個(gè)servlet之后插入:具體可參考tomcat服務(wù)器文檔章節。
2.3 模板集成
在EOS Studio項目中的jsp頁(yè)面,把我們的報表嵌套進(jìn)去,就可以通過(guò)iframe的形式實(shí)現,集成代碼放到之上,代碼如下:
1. <iframe id="reportFrame" src="/eos-default/ReportServer?reportlet=reportlet=/gettingstarted.cpt " width = 100% height = 80%></iframe>



金蝶服務(wù)器的部署
在金蝶Apusic應用服務(wù)器上部署FineReport應用的步驟,如下分為手動(dòng)部署和運用管理控制臺部署的兩種方式。以下我們以Apusic-6.0為例講解。
1. 實(shí)現步驟
1.1 手動(dòng)部署FineReport
創(chuàng )建工程
把FineReport_6.5安裝目錄下的WebReport文件拷貝到%Apusic-6.0_HOME%\domains\mydomain\applications下,即完成了獨立部署。

1.2 瀏覽效果
啟動(dòng)金蝶Apusic應用服務(wù)器,等待服務(wù)就緒后,然后啟動(dòng)瀏覽器,在地址欄中輸入http://localhost:6888/WebReport/ReportServer?reportlet=gettingstarted.cpt ,
能成功訪(fǎng)問(wèn)到報表,則表明FineReport應用部署成功:
打開(kāi)金蝶Apusic應用服務(wù)器管理控制臺
啟動(dòng)金蝶Apusic應用服務(wù)器,在瀏覽器中輸入http://localhost:6888/admin,登陸管理控制臺,用戶(hù)名和密碼均為admin。
登陸之后,展開(kāi)J2EE應用,可以看到之前已經(jīng)手動(dòng)部署好的WebReport應用。



再點(diǎn)擊“完成”,即可看到部署好的WR工程。
啟動(dòng)瀏覽器,在地址欄輸入http://localhost:6888/WR/ReportServer?reportlet=gettingstarted.cpt ,能成功訪(fǎng)問(wèn)到報表,則表明FineReport應用部署成功:
部署在Linux金蝶服務(wù)器下的問(wèn)題解決方案
1. 問(wèn)題描述:
FineReport部署在Linux金蝶服務(wù)器下,服務(wù)器開(kāi)啟,訪(fǎng)問(wèn)報表報錯,報錯信息如下:
Http Status 500
500 內部服務(wù)器錯誤
服務(wù)器遇到了一個(gè)內部錯誤而無(wú)法完成請求。
java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11.XToolkit
2. 分析:
如上錯誤的意思是什么?為什么會(huì )發(fā)生如上這種錯誤呢?
報如上的錯誤是因為找不到awt相關(guān)的包,而awt(即抽象窗口工具包),是一個(gè)用于實(shí)現圖形用戶(hù)界面的類(lèi)庫。
出現如上錯誤的原因是:在linux下,用的是linux操作系統所提供的圖形庫。由于不同的操作系統的圖形庫所提供的功能是不一樣的(在Windows系統下是有AWT的)。所以在linux下,服務(wù)器使用的JDK是沒(méi)有awt相關(guān)的包,而這里FR在運行調用工程的時(shí)候,需要awt的相關(guān)包的。因此,需要在linux下加入awt的圖形用戶(hù)界面的相關(guān)類(lèi)。
注意:由于不同的操作系統的圖形庫所提供的功能是不一樣的,在一個(gè)平臺上存在的功能在另外一個(gè)平臺上則可能不存在。
3. 解決方案:

打開(kāi)之后,配置好JAVA_HOME變量,并添加下圖中框選的兩行配置信息:JAVA_OPTS=-Dfile.encoding=UTF-8 -Djava.awt.headless=trueexport JAVA_OPTS


聯(lián)系客服