Java 如何以文本形式运行和下载BusinessObjects报告

Java 如何以文本形式运行和下载BusinessObjects报告,java,api,sap,business-intelligence,business-objects,Java,Api,Sap,Business Intelligence,Business Objects,我的问题:如何运行报告并将其下载到文本?在BuessinessObjects中,可以将报告作为纯文本文件下载。他们的API文档表明,您可以下载各种格式的报告。这是如何实现的 如何将其下载为PDF:在中,他们描述了如何将其下载为PDF文件: ViewSupport pdfViewSupport = new ViewSupport(); pdfViewSupport.setOutputFormat(OutputFormatType.PDF); pdfViewSupport.setViewType(V

我的问题:如何运行报告并将其下载到文本?在BuessinessObjects中,可以将报告作为纯文本文件下载。他们的API文档表明,您可以下载各种格式的报告。这是如何实现的

如何将其下载为PDF:在中,他们描述了如何将其下载为PDF文件:

ViewSupport pdfViewSupport = new ViewSupport();
pdfViewSupport.setOutputFormat(OutputFormatType.PDF);
pdfViewSupport.setViewType(ViewType.BINARY);
pdfViewSupport.setViewMode(ViewModeType.DOCUMENT);

RetrieveBinaryView retBinView = new RetrieveBinaryView();
retBinView.setViewSupport(pdfViewSupport);

RetrieveData retBOData = new RetrieveData();
retBOData.setRetrieveView(retBinView);

DocumentInformation docInfo = boReportEngine.getDocumentInformation(struid, null, null, null, retBOData);
BinaryView myBOView = (BinaryView) boDocInfo.getView();
byte[] docContents = myBOView.getContent();
当我改变时:

pdfViewSupport.setOutputFormat(OutputFormatType.PDF);
pdfViewSupport.setViewType(ViewType.BINARY);
pdfViewSupport.setViewMode(ViewModeType.DOCUMENT);

我得到以下错误:

org.apache.axis2.AxisFault: Binary view of such a document should be only requested with the use of ViewType.BINARY (WRE 01151)
有趣的是,我将ViewType设置为INT_字符,而不是二进制

它断线了:

DocumentInformation docInfo = boReportEngine.getDocumentInformation(struid, null, null, null, retBOData);
我想做的是:这真的很复杂,但我基本上希望有一个报告,它返回一行,只在报告上打印(没有其他内容),然后将该报告作为文本下载,因为文本是xml,我在另一个程序中使用

任何帮助都会很好


注意:我运行的是3.2服务器,但我们很快就会升级到4.0。因此,如果该解决方案可以同时适用于这两个版本,那就太棒了,否则v4和v3.x解决方案也太棒了:)

这一行的问题:

RetrieveBinaryView retBinView = new RetrieveBinaryView();
所以我不知道这一切是如何运作的,但这就是你想要的:

ViewSupport viewSupport = ViewSupport.Factory.newInstance();
viewSupport.setOutputFormat(OutputFormatType.INT_XML);
viewSupport.setViewType(ViewType.INT_CHARACTER);
viewSupport.setViewMode(ViewModeType.INT_REPORT_PAGE);

RetrieveData retBOData = RetrieveData.Factory.newInstance();

RetrieveXMLView retXMLView = RetrieveXMLView.Factory.newInstance();
retXMLView.setViewSupport(viewSupport);
retBOData.setRetrieveView(retXMLView);
DocumentInformation boDocInfo = getDocInfo(actions, retBOData);
XMLView bView = (XMLView) boDocInfo.getView();
ByteArrayOutputStream out = new ByteArrayOutputStream(bView.getContentLength());
bView.getContent().save(out);
byte[] reportBytes = out.toByteArray();
String reportInString = new String(reportBytes);
但是,这里的
reportInString
是表示报告的XML。所以我所做的就是用前缀和后缀来封装我想从报告中得到的东西。因此,例如,假设我用
@#this is what youwant-
-End$#@
封装它,那么我将执行以下操作:

Pattern patt = Pattern.compile("(?i)@#$ThisIsWhatYouWant-(.*?)-End$#@", Pattern.DOTALL);
Matcher match = patt.matcher(reportInString);
if (match.find()) {
  return match.group(1);
}
return null;

另外,这应该适用于3.x和4.0 BO服务器。

我找到了这个问题的答案,因此如果您正在寻找答案,请稍等片刻,我会发布它:)
Pattern patt = Pattern.compile("(?i)@#$ThisIsWhatYouWant-(.*?)-End$#@", Pattern.DOTALL);
Matcher match = patt.matcher(reportInString);
if (match.find()) {
  return match.group(1);
}
return null;