<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综合色区无码一二三区 | 成年女人色毛片免费看| 亚洲色图国产精品| 最近2019中文免费字幕在线观看| 亚洲精品久久久www| 永久免费无码日韩视频| 亚洲人成色7777在线观看不卡 | 久久精品国产亚洲AV电影| a毛片免费播放全部完整| 亚洲精品无码Av人在线观看国产 | 亚洲人成人77777在线播放| 1000部拍拍拍18勿入免费视频软件| 亚洲色欲色欲综合网站| 57pao一国产成永久免费| 亚洲精品第一综合99久久| 日韩黄色免费观看| 日韩毛片一区视频免费| 国产亚洲一区二区精品| 精品无码免费专区毛片| 亚洲人成网站999久久久综合| 免费观看午夜在线欧差毛片| 一区二区三区免费高清视频| 欧洲亚洲国产清在高| 日本免费人成在线网站| 亚洲s码欧洲m码吹潮| 2048亚洲精品国产| 18女人腿打开无遮掩免费| 亚洲无码一区二区三区| 国产精品亚洲玖玖玖在线观看| a级片免费在线播放| 亚洲一区二区三区免费观看| 四虎永久免费观看| 久久久久免费精品国产小说| 伊人久久五月丁香综合中文亚洲| 亚洲国产精品自产在线播放| 亚欧免费一级毛片| 亚洲AV色欲色欲WWW| 国产亚洲人成网站观看| 日韩免费无砖专区2020狼| 在线观看免费黄网站| 久久亚洲国产最新网站|