0

如何使用适用于 XIR2 的 Business Objects SDK 从 webi 报告中列出 Universe 对象?
没有sdk有没有自动化的方法?

使用 SDK,我已经能够遍历 webi 报表和 Universe 集合,但看不到检索查询对象或报表查询的本机方式。

4

4 回答 4

3

BusinessObjects 存储库(数据库)包含复杂的数据,散布在复合表列中。

通过CMS查询解密的存储库数据;意思是,它不能直接连接/查询,即覆盖了一个宇宙,因此查询直接从它运行。

但是,可以通过“查询构建器”GUI(通过管理员 Launchpad <= XIR2.x 或通过安装服务器程序菜单 XI 3.x+ 访问 - 两者都有 URL)或通过 Enterprise SDK 提交简单查询来质疑 BusinessObjects 存储库/网页服务。

返回的数据是 InfoObjects 的形式。InfoObject 是存储库中保存的数据的程序化、面向对象的表示。InfoObjects 可能有一个或多个相关的对象 inset,这些对象在查询结果中被投影为表中的表,但是数据输出可以在 MS Excel 等工具中操作并转换为表格格式。

SAP 开发人员在相关论坛和博客中讨论了查询存储库 InfoObjects 的访问方法,我建议阅读:http ://weblogs.sdn.sap.com/pub/wlg/13214了解更多信息。

于 2010-07-29T01:16:25.600 回答
1

我不得不使用管理查询工具(构建查询——非常初级)从 CMS 中提取数据。我在输出中看到的一件事是数据连接和 SQL 语句。这在技术上不使用 SDK(呃,您正在使用他们对信息存储的内置访问),但您可能需要 SDK 文档来确定您正在寻找的内容。他们的实现非常粗糙,如果您查询错误,它不会告诉您它有什么问题。如果查询稍有错误,它可能会返回“未找到记录”语句。

返回的记录是多级的……如果查询中的一个字段可以引用另一个表,您可能会得到一个字段,其中包含子查询的结果。其中一些字段可能有子查询结果。弄清楚是一件很痛苦的事情,但是一旦您弄清楚了这些字段,您就可以(手动)从中提取数据。

于 2009-06-19T00:51:38.217 回答
1

使用查询生成器,以下查询将返回与 Universe 关联的每个报告的 SI_ID 值:

SELECT * FROM CI_APPOBJECTS WHERE SI_KIND='Universe'

使用查询生成器,以下查询将根据 ID 返回 WebI 报告名称:

选择 SI_NAME,SI_DESCRIPTION,SI_ID,SI_AUTHOR,SI_PARENT_FOLDER,SI_UNIVERSE,SI_HAS_PROMPTS FROM CI_INFOOBJECTS WHERE SI_ID IN (xxx,xxx,xxx)

我看不到将两者结合在一起以仅显示带有报告的宇宙的方法。此外,我看不到将这些数据作为 WebI 报告导入 Business Objects 本身的方法。

于 2009-08-12T22:59:12.857 回答
0

有一种方法可以使用 BO 4.0 SDK 来实现:

// Get the list of webi documents
IInfoStore infoStore = (IInfoStore) enterpriseSession.getService("InfoStore");
String query = "select SI_NAME, SI_ID from CI_INFOOBJECTS "
      + "where SI_KIND = 'Webi' and SI_INSTANCE=0";
IInfoObjects infoObjects = (IInfoObjects) infoStore.query(query);

for (Object object : infoObjects) {
    IInfoObject infoObject = (IInfoObject) object;
    if (getInfoObjectPathAndTitle(infoObject).startsWith("/")) {
      System.out.println("REPORT: " + infoObject.getTitle());

      IDocumentInstance doc = documentInstanceManagementService
          .openDocument(context, infoObject.getID());

      List list = ReportDictionaryHelper
          .getDictionaryObjectsFlatList(context, doc);
      if (list.size() > 0) {
        System.out.println("OBJECTS:");
        for (DictionaryExpression expr:list) {
          System.out.println(expr.getName());
        }
      }

      List vars = ReportDictionaryHelper.getDocumentVariables(context,doc);
      if (vars.size() > 0) {
        System.out.println("VARIABLES:");
        for (Variable var:vars) {
          System.out.println(var.getName());
        }
      }

      documentInstanceManagementService.closeDocument(context, doc);
      System.out.println();
}

但我正在寻找一种使用 BO XI R2 SDK 的方法。它不包含所需的 API。

于 2013-10-29T10:51:11.870 回答