现在的位置: 首页 > 综合 > 正文

Crystal Reports CRS方式Web开发

2013年06月27日 ⁄ 综合 ⁄ 共 1884字 ⁄ 字号 评论关闭

关于水晶报表以前一直都是用.NET来开发,使用的是RDC方式,简单易用。现在在做项目的时候需要和Crystal Report Server进行连接,登录服务器取得报表,然后显示,Google和baidu,都找不到可参考的完整的例子,只能根据一些零碎的代码,拼凑+自己以前开发水晶报表的经验。
1.用惯了Struts,新建一个Action,在Action里面添加以下代码:
String reportName = "<你的报表名称>";
 // TODO Auto-generated method stub
   ISessionMgr ceSessionMgr = CrystalEnterprise.getSessionMgr();
   IEnterpriseSession ceSession = ceSessionMgr.logon("<CRS的用户名>","<CRS的密码>","〈CRS的主机名〉","<用户认证的方式,默认为secEnterprise>");
   IInfoStore ceInfoStore = (IInfoStore)ceSession.getService("","InfoStore");
   IInfoObjects ceReports = ceInfoStore.query("Select SI_ID,SI_NAME From CI_INFOOBJECTS Where SI_NAME = '" + reportName + "'");
   if(ceReports.size() == 0)
   {
    //
    return null;
   }
   IInfoObject reportObject = (IInfoObject)ceReports.get(0);
   IReportSourceFactory factoryPS = (IReportSourceFactory) ceSession.getService("PSReportFactory");
   IReportSource rptSrc = factoryPS.openReportSource(reportObject,Locale.ENGLISH);

   CrystalReportViewer viewer = new CrystalReportViewer();
   viewer.setEnterpriseLogon(ceSession);
   viewer.setName("crystal_report_viewer");
   viewer.setOwnPage(true);
   viewer.setReportSource(rptSrc);
   viewer.showFirstPage();
   
   HttpSession session = request.getSession();
   session.setAttribute("crViewer",viewer);
   return mapping.findForward("result");

2.跳转result是跳到一个viewer.jsp的页面,该页面也很简单
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<%//Crystal Report Viewer imports.%>
<%@page import="com.crystaldecisions.report.web.viewer.*"%>

<%

//Refer to the Viewers SDK in the Java Developer Documentation for more information on using the CrystalReportViewer
//API.

CrystalReportViewer viewer = (CrystalReportViewer)session.getAttribute("crViewer");
//Render the report.
viewer.processHttpRequest(request, response, getServletConfig().getServletContext(), null);
%>

OK,当然,前提是你需要安装好Crystal Report Server。在使用CRS的时候发现如果是远程登录使用IP地址连不上服务器,使用主机名也认不出来。我的解决办法是在本地的windows目录下system32/drivers/etc/的hosts文件里面添加服务器的IP地址和主机名。我想解决办法应该不是这样的。

抱歉!评论已关闭.