我的任务是创建一个“应用程序”,它允许以下操作:给定服务器上的 Crystal Reports 列表,用户可以选择任意数量的它们组合成一个长报表(只是附加在一起)。他们必须能够为每个报告设置参数。
我收集到通常的方法是生成一个主报告,其中包括所有单独的报告作为子报告,但我不认为这是一个选项,因为一些单独的报告可能已经包含他们自己的子报告(并且您不能有嵌套的子报表)。
这些报表是使用 Crystal Reports for Enterprise XI 4.0 创建的。我正在尝试将其作为一组使用 BusinessObjects Java SDK 的 JSP 页面来实现。最好输出类型是灵活的,但如有必要,只生成 PDF 是可以接受的。
解决此问题的最佳方法是什么?
更新:我还应该注意,当尝试将单个报告导出为 PDF 时(我正在考虑只制作每个报告的 PDF,然后以某种方式连接它们),以下代码失败:
// Get the ID of the current working report.
int reportID = Integer.parseInt(request.getParameter("ReportID"));
// Retrieve the BOE Session and InfoStore objects
IEnterpriseSession eSession = (IEnterpriseSession)session.getAttribute("EnterpriseSession");
IInfoStore iStore = (IInfoStore)eSession.getService("InfoStore",ServiceNames.OCA_I_IINFO_STORE);
// Query to get the report document
String infoStoreQuery = "select SI_NAME,SI_PARENTID from CI_INFOOBJECTS where SI_ID=" + reportID;
IInfoObjects infoObjects = iStore.query(infoStoreQuery);
IInfoObject report = (IInfoObject)infoObjects.get(0);
IReportAppFactory reportAppFactory = (IReportAppFactory)eSession.getService("RASReportFactory");
ReportClientDocument clientDoc = reportAppFactory.openDocument(report, OpenReportOptions._openAsReadOnly, java.util.Locale.CANADA);
//Use the report document's PrintOutputController to export the report to a ByteArrayInputStream
ByteArrayInputStream byteIS = (ByteArrayInputStream)clientDoc.getPrintOutputController().export(ReportExportFormat.PDF);
clientDoc.close();
//Create a byte[] that is the same size as the exported ByteArrayInputStream
byte[] buf = new byte[2000 * 1024];
int nRead = 0;
//Set response headers
response.reset();
response.setHeader("content-disposition", "inline;filename=untitled.pdf");
response.setContentType("application/pdf");
//Send the Byte Array to the Client
while ((nRead = byteIS.read(buf)) != -1) {
response.getOutputStream().write(buf, 0, nRead);
}
//Flush the output stream
response.getOutputStream().flush();
//Close the output stream
response.getOutputStream().close();
在“reportAppFactory.openDocument”行上,出现此错误:
javax.servlet.ServletException: com.crystaldecisions.sdk.occa.managedreports.ras.internal.ManagedRASException: Cannot open report document. --- This release does not support opening SAP Crystal Reports for Enterprise reports.
因此,如果您对整体问题没有更好的解决方案,即使将一份报告导出为 PDF,我仍然希望能得到一些帮助。