如何使用适用于 XIR2 的 Business Objects SDK 从 webi 报告中列出 Universe 对象?
没有sdk有没有自动化的方法?
使用 SDK,我已经能够遍历 webi 报表和 Universe 集合,但看不到检索查询对象或报表查询的本机方式。
如何使用适用于 XIR2 的 Business Objects SDK 从 webi 报告中列出 Universe 对象?
没有sdk有没有自动化的方法?
使用 SDK,我已经能够遍历 webi 报表和 Universe 集合,但看不到检索查询对象或报表查询的本机方式。
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了解更多信息。
我不得不使用管理查询工具(构建查询——非常初级)从 CMS 中提取数据。我在输出中看到的一件事是数据连接和 SQL 语句。这在技术上不使用 SDK(呃,您正在使用他们对信息存储的内置访问),但您可能需要 SDK 文档来确定您正在寻找的内容。他们的实现非常粗糙,如果您查询错误,它不会告诉您它有什么问题。如果查询稍有错误,它可能会返回“未找到记录”语句。
返回的记录是多级的……如果查询中的一个字段可以引用另一个表,您可能会得到一个字段,其中包含子查询的结果。其中一些字段可能有子查询结果。弄清楚是一件很痛苦的事情,但是一旦您弄清楚了这些字段,您就可以(手动)从中提取数据。
使用查询生成器,以下查询将返回与 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 本身的方法。
有一种方法可以使用 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。