关于水晶报表以前一直都是用.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地址和主机名。我想解决办法应该不是这样的。