<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
       :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
    最近的項(xiàng)目中使用了Crystal Report作為報(bào)表工具,與Jasper Report不同,在報(bào)表的靈活性和開發(fā)速度上要?jiǎng)俪龊芏啵坏┯蒙暇筒辉敢鈸Q其他了。
    在Web application中使用CR,主要可以通過兩種方案實(shí)施:
    一種是將rpt文件嵌入application中,該方案實(shí)施簡(jiǎn)單、快速,最重要的不受license限制,是普通項(xiàng)目開發(fā)的絕佳選擇。我們可以直接去Business Objects上面下載一個(gè)已經(jīng)集成了CR開發(fā)插件的Eclipse,或者只下載插件也可以。利用該插件中的開發(fā)向?qū)В梢苑浅H菀椎倪M(jìn)行開發(fā)了。
    生成HTML報(bào)表也是相當(dāng)?shù)暮?jiǎn)單,我們可以通過CR提供的標(biāo)簽庫(kù)生成:
    <%@ 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,然后作為一個(gè)javabean供表現(xiàn)層使用:
        /**
         * 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;
        }

    非標(biāo)簽方式生成HTML報(bào)表
    <%@ 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進(jìn)行報(bào)表開發(fā)。所有的rpt都在server上,application 可以通過包括Enterprise account,LDAP,Windows NT(如果是Window服務(wù)器)等多種方式登陸Server讀取報(bào)表。該方案中rpt可以提供多個(gè)應(yīng)用使用,并且方便管理及二次開發(fā),但是license非常貴,因此,主要是應(yīng)用在大型項(xiàng)目中。
    其中最簡(jiǎn)單的便是使用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地址。
    在此方案中,可以使用一個(gè)iFrame直接將Server中生成的報(bào)表包含進(jìn)來(CR enterprise portlet就是這樣干的)。

    評(píng)論

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

    2007-05-04 17:57 by 我們走在JAVA的光明大道上
    很好的經(jīng)驗(yàn)!謝謝分享

    # re: Web application 中使用Crystal Report(一)  回復(fù)  更多評(píng)論   

    2007-12-20 17:37 by Alan.xiao
    通過eclipse的插件打開一個(gè)用crystal reporst 10做的報(bào)表,提示要連接數(shù)據(jù)庫(kù),因此通過它的數(shù)據(jù)庫(kù)資源管理器連接了sql server,結(jié)果發(fā)現(xiàn)只能看到數(shù)據(jù)庫(kù)中的表,存儲(chǔ)過程看不到,所以它把那張報(bào)表里面的數(shù)據(jù)按名字對(duì)應(yīng)表里面去了,而實(shí)際上本應(yīng)對(duì)應(yīng)一個(gè)存儲(chǔ)過程的,所以顯示數(shù)據(jù)庫(kù)中沒有該表。請(qǐng)問您,這是怎么回事,該如何解決

    # re: Web application 中使用Crystal Report(一)  回復(fù)  更多評(píng)論   

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

    # re: Web application 中使用Crystal Report(一)  回復(fù)  更多評(píng)論   

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

    報(bào)表已經(jīng)存在,我目前要做的是在jsp中生成,而這樣做需要輸入?yún)?shù),輸入?yún)?shù)就需要“報(bào)表源”,得到報(bào)表源就需要“jdbc數(shù)據(jù)源”,而原來的的報(bào)表是通過DSN連接的數(shù)據(jù)庫(kù),所以不得已重新配置,結(jié)果配好數(shù)據(jù)源后發(fā)現(xiàn)沒法讀取數(shù)據(jù)庫(kù)中的存儲(chǔ)過程。

    (要是能截圖就好了)

    # re: Web application 中使用Crystal Report(一)  回復(fù)  更多評(píng)論   

    2007-12-20 17:52 by Alan.xiao
    只有存儲(chǔ)過程,沒有改名字的table,但因?yàn)槟莻€(gè)插件讀不到存儲(chǔ)過程,就把那個(gè)當(dāng)table了,而該table又不存在,所以就報(bào)錯(cuò)啦

    # re: Web application 中使用Crystal Report(一)  回復(fù)  更多評(píng)論   

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

    # re: Web application 中使用Crystal Report(一)  回復(fù)  更多評(píng)論   

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

    要使用 Java Reporting Component 創(chuàng)建報(bào)表源,必需指定要查看或?qū)С龅膱?bào)表所在的位置。將使用相對(duì)或絕對(duì)路徑指定報(bào)表位置。而且,為使 Java Reporting Component 正確地為報(bào)表檢索數(shù)據(jù),必須通過 JNDI 正確指定報(bào)表的數(shù)據(jù)源,或必須依據(jù) JDBC 數(shù)據(jù)源設(shè)計(jì)報(bào)表。

    # re: Web application 中使用Crystal Report(一)  回復(fù)  更多評(píng)論   

    2007-12-20 18:08 by 回樓上
    或者,你可以嘗試用JDBC數(shù)據(jù)源新建一個(gè)使用到stored proc的非常簡(jiǎn)單的報(bào)表,看看在你的application里面能否正確運(yùn)行。
    主站蜘蛛池模板: 波霸在线精品视频免费观看| 久久久久久99av无码免费网站| 中文字幕久精品免费视频| 成年男女男精品免费视频网站 | 我要看免费的毛片| 国产大片91精品免费观看男同| 亚洲一区二区三区国产精品| 亚洲综合一区国产精品| 日本视频免费高清一本18| 亚洲福利精品一区二区三区| 久久久久久亚洲av成人无码国产| 亚洲一区电影在线观看| 国产婷婷成人久久Av免费高清 | 1区1区3区4区产品亚洲| 亚洲久热无码av中文字幕| 57pao国产成视频免费播放 | 久久精品国产精品亚洲下载| 亚洲av永久中文无码精品综合| 中文在线免费观看| 免费看男女下面日出水视频| 亚洲av午夜精品无码专区| 99久久精品国产免费| 青青青国产免费一夜七次郎| 亚洲免费网站在线观看| 日本一道本不卡免费| 亚洲欧洲∨国产一区二区三区| 亚洲黄色激情视频| 黄色成人免费网站| 亚洲宅男永久在线| 免费无码AV一区二区| 免费看美女被靠到爽| 日本亚洲色大成网站www久久| a毛片在线免费观看| 毛茸茸bbw亚洲人| 亚洲中文无码卡通动漫野外| 国产高清免费视频| 亚洲精品无码MV在线观看| 91av免费在线视频| 永久久久免费浮力影院| 亚洲另类激情综合偷自拍| 免费网站看av片|