私の仕事は、次のことを可能にする「アプリ」を作成することです。サーバー上のCrystal Reportsのリストがあれば、ユーザーはそれらをいくつでも選択して1つの長いレポートにまとめることができます(一緒に追加するだけです)。各レポートのパラメータを設定できる必要があります。
通常の方法は、すべての個別のレポートをサブレポートとして含むメインレポートを生成することですが、一部の個別のレポートにはすでに独自のサブレポートが含まれている可能性があるため、これはここでのオプションではないと思います(ネストされたサブレポートを持つことはできません)。
レポートは、Crystal Reports for EnterpriseXI4.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.
したがって、全体的な問題に対するより良い解決策がない場合でも、1つのレポートをPDFにエクスポートすることについての助けをいただければ幸いです。