【发布时间】:2009-04-14 14:06:10
【问题描述】:
如何使用 Business Objects SDK for XIR2 从 webi 报告中列出 Universe 对象?
没有sdk有没有自动化的方法?
使用 SDK,我已经能够遍历 webi 报表和 Universe 集合,但看不到检索查询对象或报表查询的本机方式。
【问题讨论】:
标签: business-objects business-objects-sdk
如何使用 Business Objects SDK for XIR2 从 webi 报告中列出 Universe 对象?
没有sdk有没有自动化的方法?
使用 SDK,我已经能够遍历 webi 报表和 Universe 集合,但看不到检索查询对象或报表查询的本机方式。
【问题讨论】:
标签: business-objects business-objects-sdk
BusinessObjects 存储库(数据库)包含复杂数据,分布在复合表列中。
通过CMS查询解密的存储库数据;意思是,它不能直接连接/查询,即覆盖了一个 Universe,因此查询直接从它运行。
然而,可以通过“查询构建器”GUI(通过管理员 Launchpad
返回的数据是InfoObjects的形式。 InfoObject 是存储库中保存的数据的程序化、面向对象的表示。 InfoObjects 可能有一个或多个相关对象 inset,这些对象在查询结果中被投影为表中的表,但是数据输出可以在 MS Excel 等工具中进行操作并转换为表格格式。
SAP 开发人员在相关论坛和博客中讨论了查询存储库 InfoObject 的访问方法,我建议阅读:http://weblogs.sdn.sap.com/pub/wlg/13214 了解更多信息。
【讨论】:
我不得不使用管理查询工具(构建查询——非常初级)从 CMS 中提取数据。我在输出中看到的一件事是数据连接和 SQL 语句。这在技术上不使用 SDK(呃,您正在使用他们对信息存储的内置访问),但您可能需要 SDK 文档来确定您正在寻找的内容。他们的实现非常粗糙,如果您查询错误,它不会告诉您它有什么问题。如果查询稍有错误,它可能会返回“未找到记录”语句。
返回的记录是多级的...如果查询中的一个字段可以引用另一个表,您可能会得到一个字段,其中包含子查询的结果。其中一些字段可能有子查询结果。弄清楚是一件很痛苦的事,但是一旦您弄清楚了字段,您就可以(手动)从中提取数据。
【讨论】:
使用查询生成器,以下查询将返回与 Universe 关联的每个报告的 SI_ID 值:
选择 * 来自 CI_APPOBJECTS WHERE SI_KIND='宇宙'
使用查询生成器,以下查询将根据 ID 返回 WebI 报告名称:
选择 SI_NAME、SI_DESCRIPTION、SI_ID、SI_AUTHOR、SI_PARENT_FOLDER、SI_UNIVERSE、SI_HAS_PROMPTS 来自 CI_INFOOBJECTS WHERE SI_ID IN (xxx,xxx,xxx)
我看不到将两者结合起来仅显示带有报告的宇宙的方法。此外,我看不到将这些数据作为 WebI 报告导入 Business Objects 本身的方法。
【讨论】:
有一种方法可以使用 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。
【讨论】: