如何列出webi报告中使用的BO XIR2 Universe对象?

时间:2009-04-14 14:06:11

标签: business-objects business-objects-sdk

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

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

4 个答案:

答案 0 :(得分:3)

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

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

然而,可以通过“查询生成器”GUI提交简单查询(通过管理器Launchpad< = XIR2.x或通过安装服务器程序菜单XI 3.x + - 两者都有URL)来提问BusinessObjects存储库。通过Enterprise SDK / Web Services。

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

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

答案 1 :(得分:1)

我不得不使用管理查询工具(构建查询 - 非常简陋)从CMS中提取数据。我在输出中看到的一件事是数据连接和SQL语句。这在技术上不使用SDK(呃,你正在使用它们对InfoStores的内置访问权限),但是你可能需要SDK文档来弄清楚你甚至在寻找什么。它们的实现非常粗糙,如果你的查询错误,它就不会告诉你它有什么问题。如果您的查询略有错误,则可能会返回“未找到记录”声明。

返回的记录是多级的...如果查询中的字段可以引用另一个表,则可能会得到一个包含子查询结果的字段。其中一些字段可能有子查询结果。弄清楚这很痛苦,但是一旦你能够计算出这些字段,你就可以从中提取数据。

答案 2 :(得分:1)

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

SELECT * 来自CI_APPOBJECTS 在哪里SI_KIND ='宇宙'

使用Query Builder,以下查询将根据ID返回WebI报告名称:

SELECT SI_NAME,SI_DESCRIPTION,SI_ID,SI_AUTHOR,SI_PARENT_FOLDER,SI_UNIVERSE,SI_HAS_PROMPTS 来自CI_INFOOBJECTS 在哪里SI_ID IN(xxx,xxx,xxx)

我没有看到将两者结合在一起只显示带有报告的Universe的方法。另外,我没有看到将这些数据作为WebI报告提供给Business Objects本身的方法。

答案 3 :(得分: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。它不包含所需的apis。