<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 84, comments - 54, trackbacks - 0, articles - 0
       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Web application 中使用Crystal Report(一)

    Posted on 2007-04-11 23:26 馬達+斯加 閱讀(1755) 評論(8)  編輯  收藏 所屬分類: Java Report
    最近的項目中使用了Crystal Report作為報表工具,與Jasper Report不同,在報表的靈活性和開發速度上要勝出很多,一旦用上就不愿意換其他了。
    在Web application中使用CR,主要可以通過兩種方案實施:
    一種是將rpt文件嵌入application中,該方案實施簡單、快速,最重要的不受license限制,是普通項目開發的絕佳選擇。我們可以直接去Business Objects上面下載一個已經集成了CR開發插件的Eclipse,或者只下載插件也可以。利用該插件中的開發向導,可以非常容易的進行開發了。
    生成HTML報表也是相當的簡單,我們可以通過CR提供的標簽庫生成:
    <%@ taglib uri="/WEB-INF/tld/crystal-tags-reportviewer.tld" prefix="crviewer" %>

    <crviewer:viewer 
    isOwnPage="true" 
    displayGroupTree
    ="false"
    printMode
    ="ActiveX"
    allowDrillDown
    ="false"
    hyperlinkTarget
    ="false"
    displayToolbarViewList
    ="false"
    displayToolbarFindButton
    ="false"
    displayToolbarToggleTreeButton
    ="false"
    displayToolbarCrystalLogo
    ="false"
    reportSourceType
    ="reportingComponent" 
    viewerName
    ="CrystalReport1-viewer" 
    reportSourceVar
    ="CrystalReport1">
    <crviewer:report reportName="Test.rpt" />
    </crviewer:viewer>
    也可以通過自己寫代碼讀取report source,然后作為一個javabean供表現層使用:
        /**
         * Retrieve embedded report source by the specified report name.
         * 
         * 
    @param reportName
         * 
    @return
         
    */

        
    private static IReportSource getEmbeddedReport(String reportName){
            IReportSource reportSource 
    = null;
            String report 
    = CRConstant.EMBEDDED_RPT_FOLDER + reportName + ".rpt";
            ReportClientDocument reportClientDoc 
    = new ReportClientDocument();
            
    try {
                reportClientDoc.open(report, 
    0);
            }
     catch (ReportSDKException e) {
                                
                log.warn(
    "Cant get embedded report source");
                log.error(e.getMessage());
            }

            reportSource 
    = reportClientDoc.getReportSource();
            
    return reportSource;
        }

    非標簽方式生成HTML報表
    <%@ page 
    language
    ="java"
    contentType
    ="text/html; charset=UTF-8"
    pageEncoding
    ="UTF-8"

    %>
    <%@ page import="com.crystaldecisions.reports.reportengineinterface.*"%>
    <%@ page import="com.crystaldecisions.report.web.viewer.*" %>
    <%
     CrystalReportViewer viewer 
    = (CrystalReportViewer)session.getAttribute("crViewer");
    viewer.processHttpRequest(request, response, getServletConfig().getServletContext(), 
    null); 
     
    %>

    另外一種是集成Crystal Enterprise Server進行報表開發。所有的rpt都在server上,application 可以通過包括Enterprise account,LDAP,Windows NT(如果是Window服務器)等多種方式登陸Server讀取報表。該方案中rpt可以提供多個應用使用,并且方便管理及二次開發,但是license非常貴,因此,主要是應用在大型項目中。
    其中最簡單的便是使用Enterprise Account方式登錄了:
        /**
         * Loging Crystal Enterprise server
         *
         
    */

        
    private void createEnterpriseSession() throws SDKException{
            String cms 
    = CRConstant.CMS;
            String userName 
    = CRConstant.AUTH_USERNAME;
            String password 
    = CRConstant.AUTH_PASSWORD;
            String authMode 
    = CRConstant.AUTH_MODE;
            
    try {
                
                ISessionMgr sessionMgr 
    = CrystalEnterprise.getSessionMgr();
                iEnterpriseSession 
    = sessionMgr.logon(userName, password, cms, authMode);
                log.info(
    "Got Enterprise session successfully");
                
            }
     catch (SDKException e) 
                log.warn(
    "Cant log on CMS:\nCMS:" + cms + "\nUserID:"
                        
    + userName + "\nPassword:" + password + "\nAuthMode:"
                        
    + authMode);
                
    throw e;
            }
       
            
        }

    但是,這里特別需要注意的是,CMS的值必須是Enterprise server的名稱,而不能使用IP地址。
    在此方案中,可以使用一個iFrame直接將Server中生成的報表包含進來(CR enterprise portlet就是這樣干的)。

    評論

    # re: Web application 中使用Crystal Report(一)[未登錄]  回復  更多評論   

    2007-05-04 17:57 by 我們走在JAVA的光明大道上
    很好的經驗!謝謝分享

    # re: Web application 中使用Crystal Report(一)  回復  更多評論   

    2007-12-20 17:37 by Alan.xiao
    通過eclipse的插件打開一個用crystal reporst 10做的報表,提示要連接數據庫,因此通過它的數據庫資源管理器連接了sql server,結果發現只能看到數據庫中的表,存儲過程看不到,所以它把那張報表里面的數據按名字對應表里面去了,而實際上本應對應一個存儲過程的,所以顯示數據庫中沒有該表。請問您,這是怎么回事,該如何解決

    # re: Web application 中使用Crystal Report(一)  回復  更多評論   

    2007-12-20 17:48 by 回樓上
    好久沒用了,記得好像cr里面只能看到table,view。碰到很復雜的報表,我們一般是建一個working table,很少用存儲過程。
    另外想問一下,為什么存儲過程的名字會和table一樣呢?一般會避免這種情況才是。

    # re: Web application 中使用Crystal Report(一)  回復  更多評論   

    2007-12-20 17:50 by Alan.xiao
    如果以上描述您不是很理解,那我換個說法:

    報表已經存在,我目前要做的是在jsp中生成,而這樣做需要輸入參數,輸入參數就需要“報表源”,得到報表源就需要“jdbc數據源”,而原來的的報表是通過DSN連接的數據庫,所以不得已重新配置,結果配好數據源后發現沒法讀取數據庫中的存儲過程。

    (要是能截圖就好了)

    # re: Web application 中使用Crystal Report(一)  回復  更多評論   

    2007-12-20 17:52 by Alan.xiao
    只有存儲過程,沒有改名字的table,但因為那個插件讀不到存儲過程,就把那個當table了,而該table又不存在,所以就報錯啦

    # re: Web application 中使用Crystal Report(一)  回復  更多評論   

    2007-12-20 18:00 by 回樓上
    沒有做過這種case,如果沒記錯的話,使用哪個數據源不是在rpt中定義的嗎?

    # re: Web application 中使用Crystal Report(一)  回復  更多評論   

    2007-12-20 18:05 by Alan.xiao
    是啊,是在rpt中定義的,但幫組文檔中有這樣一句話:

    要使用 Java Reporting Component 創建報表源,必需指定要查看或導出的報表所在的位置。將使用相對或絕對路徑指定報表位置。而且,為使 Java Reporting Component 正確地為報表檢索數據,必須通過 JNDI 正確指定報表的數據源,或必須依據 JDBC 數據源設計報表。

    # re: Web application 中使用Crystal Report(一)  回復  更多評論   

    2007-12-20 18:08 by 回樓上
    或者,你可以嘗試用JDBC數據源新建一個使用到stored proc的非常簡單的報表,看看在你的application里面能否正確運行。
    主站蜘蛛池模板: 日本免费一区二区三区| 中国国产高清免费av片| 免费h片在线观看网址最新| 亚洲色欲色欲www在线丝| 在线播放国产不卡免费视频| 免费在线观看理论片| 曰批全过程免费视频观看免费软件| 曰皮全部过程视频免费国产30分钟 | 麻豆国产入口在线观看免费| 成人区精品一区二区不卡亚洲| 无码高潮少妇毛多水多水免费| 亚洲国产乱码最新视频| 免费看片A级毛片免费看| 色欲aⅴ亚洲情无码AV| 亚洲第一永久AV网站久久精品男人的天堂AV | 国产在线不卡免费播放| 日本一区二区三区免费高清在线| 亚洲精品视频在线观看你懂的| 一级毛片aa高清免费观看| 亚洲综合日韩久久成人AV| 91香蕉国产线观看免费全集| 精品亚洲成A人无码成A在线观看| 成人免费毛片观看| 二级毛片免费观看全程| 亚洲人JIZZ日本人| 67194国产精品免费观看| 亚洲色成人WWW永久在线观看| 国产青草视频在线观看免费影院| 色老头综合免费视频| 午夜亚洲www湿好大| 无码中文字幕av免费放| 午夜不卡AV免费| 久久精品亚洲一区二区| 在线观看免费人成视频色| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | a级片在线免费看| 亚洲一区在线观看视频| 亚洲毛片网址在线观看中文字幕| 精品熟女少妇a∨免费久久| 亚洲av综合av一区二区三区| 亚洲乱码国产乱码精品精|