从 Java 程序访问 OBIEE 中的报告

Posted

技术标签:

【中文标题】从 Java 程序访问 OBIEE 中的报告【英文标题】:Accessing reports in OBIEE from a Java Program 【发布时间】:2012-04-29 14:53:42 【问题描述】:

我正在使用 Netbeans 开发一个 Java 应用程序,它将从 OBIEE 10G 上的 BI 服务器获取报告并使用 Java 应用程序将其显示给客户端。谁能建议我执行此操作的适当步骤以及如何开始。

【问题讨论】:

【参考方案1】:

首先,您将从 Presentation Services 而不是从 BI 服务器获取报告。 BI 服务器是一个只有 SELECT 语句的数据库,而 Presentation Service 使用此 SELECT 来创建和格式化报告。

要将来自 BI Presentation 服务的报告集成到其他应用程序中,您可以使用:

网络服务:http://docs.oracle.com/cd/E23943_01/bi.1111/e16364/methods.htm#i1008939

或 GO 网址:http://docs.oracle.com/cd/E23943_01/bi.1111/e16364/apiwebintegrate.htm#CACCHBHC

链接指向相同的文档(集成商指南)。这是为 11g 编写的,但它也适用于 10g。

干杯 妮可

【讨论】:

【参考方案2】:

您的问题不清楚;您是否尝试从 OBIEE 调用 Java 方法?

如果是: 您可以通过创建链接到操作的代理来做到这一点。 Action 可以调用 java 方法(在 EJB 中)。通过将代理挂钩到操作,您可以将其安排为作业。

【讨论】:

【参考方案3】:

虽然可以使用 web 服务和 GO url 来创建您的 web 应用程序,但这样做是一种非常困难的方法。如果您有选择,请使用最新的 JDeveloper 11g,然后使用 these steps 将您的 Answers Reports 或 Dashboards 拖放到 .jspx 页面。这很简单,只要您熟悉 JDeveloper,只需几分钟而不是几天即可完成。

编辑:如果您仍想使用 Netbeans,这里有一段代码可以帮助您入门。请记住在将其投入生产之前阅读并理解 htmlViewService SOAP API in the OBIEE integration doc。

import oracle.bi.services.soap.*

SAWSessionParameters sessionParams = new SAWSessionParameters();
sessionParams.setUserAgent("Mozilla/...."); //Copy the exact agent from your Firefox menu Help > About

javax.xml.rpc.ServiceFactory factory = ServiceFactory.newInstance();
SAWSessionServiceSoap sessionService = ((SAWSessionService) factory.loadService(SAWSessionService.class)).getSAWSessionServiceSoap();

HtmlViewServiceSoap htmlService = ((HtmlViewService) factory.loadService(HtmlViewService.class)).getHtmlViewService();

AuthResult authResult = sessionService.logonex("replace_with_your_username", "replace_with_your_password", sessionParams); //You should reuse the session for multiple HTTP Requests from the same user
String sessionID = authResult.getSessionID();

StartPageParams pageParams = new StartPageParams();
pageParams.setIdsPrefix("replace_with_your_prefix");
String pageID = htmlService.startPage(pageParams, sessionID);

ReportRef report = new ReportRef();
report.setReportPath("replace_with_full_path_to_your_report");
htmlService.addReportToPage(pageID, "replace_with_your_report_name", report, null, null, null, sessionID);

String reportHTML = htmlService.getHtmlForReport(pageID, "replace_with_your_report_name", sessionID);
System.out.println(reportHTML); //Here's the report that you are looking for

htmlService.endPage(pageID, sessionID);

【讨论】:

我正在实现一个使用 OBIEE 的 HTMLViewService 的 Java 应用程序。 XMLViewService 工作正常,但 HTMLViewService 只是显示旋转加载程序,然后呈现报告(在“加载嵌入式报告错误”的源中出现错误)。 OBI 服务器和 Java 应用程序位于不同的域中,所以我认为可能是这样。我假设我必须使用 setBridge() 方法来解决这个问题。有人可以帮忙吗?代码示例将不胜感激。 更正我最后的评论:报告永远不会加载,旋转的加载器只是无限期地旋转。

以上是关于从 Java 程序访问 OBIEE 中的报告的主要内容,如果未能解决你的问题,请参考以下文章

Obiee 如何在报告中的行中引入指标?

从 OBIEE 12c 仪表板将参数传递给 OBIEE 12c rpd 中的存储过程

如何在通过 OBIEE 中的代理发送报告时编辑电子邮件名称?

OBIEE:我无法安排报告。未经授权的访问:请联系管理员

OBIEE 12c 中的错误通过代理调用 java 方法以将报告发送到另一台服务器

OBIEE 12c 中的部分访问