【问题标题】:How to Get Report Universe Path via BO API? universe path display null如何通过 BO API 获取报告宇宙路径?宇宙路径显示空
【发布时间】:2014-08-27 08:35:54
【问题描述】:

我想通过 api 获取报告宇宙,步骤如下所述

  1. 打开报告文档
  2. DataProvider dp = dps.getItem(i); //get report data providers
  3. DataSource ds = dp.getDataSource(); //get data source
  4. universe.setFilePath(ds.getDomainName() + "/"+dp.getSource()+".unv"); //get datasource -- universe domain/path

大多数情况下,我得到了像这样的正确数据/DEV_folder/testUNV.unv

很少,结果是null/testUNV.unv 或\DEV_folder\testUNV.unv

知道为什么吗?

Business Objects 服务器版本为 Enterprise XI 3.1 SP7,使用 java SDK


谢谢乔。 但这可能解决不了我的问题,你提供了3种可能,见下面我的cmets

  • Universe 不在文件夹中 — 不,报告使用同一个 Universe,一个可以获取路径,另一个不能

  • Universe 位于您无权访问的文件夹中(尽管您有权访问该 Universe) — 不,使用我已读取和写入的同一 Universe 进行报告特权。

  • 数据源不是 Universe——它是一个 Universe。

抱歉,由于缺乏声誉,我无法提供屏幕截图。

合同 - 第四方供应商同意书报告

/eSourcing_Dev/Contract.unv

/eSourcing_Dev/Project Save.unv

合同第四方供应商同意书报告

null/Contract.unv

null/Project Save.unv

合同 - 第 4 方供应商同意书报告和合同第 4 方供应商同意书报告连接到相同的 Universe,即 Contract.unv 和 Project Save.unv,但路径显示为空。

如果我在 BO Infoview 上打开合同第四方供应商同意书报告并再次保存报告,那么我可以获得正确的路径。

报告名称

项目?里程碑

宇宙

/eSourcing/Project Save.unv

\eSourcing/Project Save.unv

项目?里程碑报告获得 2 条不同的路径

/eSourcing/Project Save.unv

\eSourcing/Project Save.unv

它们应该是一个报表,2 个查询(2 个数据提供者),使用同一个 Universe。

我已经提供了我使用的实际代码/API,省略了循环。请检查我描述的步骤。 我正在尝试做的是批量获取所有报告及其宇宙。

【问题讨论】:

  • 如果您指出您正在使用哪个版本的 BusinessObjects 以及哪个 API(.NET、COM、...),将会有所帮助。

标签: path business-objects business-objects-sdk


【解决方案1】:

“null”有几个原因:

  • Universe 不在文件夹中。
  • Universe 位于您无权访问的文件夹中(尽管您有权访问 Universe)
  • 数据源不是 Universe

尝试打印出 ds.getUniverseID() 的结果,然后对该 ID 运行 CMS 查询。这可能会让您更深入地了解问题。

我无法解释“\”。如果您能提供更多代码和您获得的实际结果,我或许可以提供帮助。

【讨论】:

  • 感谢您的回答。但这可能无法解决我的问题,您提供了 3 种可能性,请参阅下面的我的 cmets • 宇宙不在文件夹中。 //否,报告使用相同的 Universe,一个可以获取路径,另一个不能 • Universe 位于您无权访问的文件夹中(尽管您可以访问该 Universe) //否,使用相同的报告宇宙,我有读写权限。 • 数据源不是Universe // 它是Universe。让我在问题中插入一些屏幕截图
  • 我还没有解决你的问题,但我已经缩小了一点。根据我的测试,有时 Universe 域以“\”为前缀,有时则没有。我还没有找到模式。对于显示“null”的报告,它们是从旧版本的 BO 迁移而来的吗?
  • 是的,不知道什么时候会出现“\”。我想知道我是否使用了错误的 API 方法,但我没有找到另一个方法。 regrading "null",我们将 BO 服务器升级到 SP7,但只有 1/30 的报告有 "null" 问题。我猜是从网络智能导出导致的,但是我试过这个案例,我可以得到正确的路径。
【解决方案2】:

我查看了Report Engine API 的API 文档,并不能真正确定getDomainName() 调用应该返回什么。 域 在 XI 之前的版本中使用的概念; AFAIK 这个概念在 XI 版本中不再存在。

如果你想得到宇宙的路径,我这样做:

  1. 使用DataSource接口的getID()方法获取数据源ID。
  2. 使用步骤 1 中的 ID 检索 InfoObject(使用 BusinessObjects Enterprise API)。
  3. 检索 Universe 的父 ID,使用IInfoObject 接口的getParentID() 方法,检查这是一个文件夹对象并转换为IFolder 接口。
  4. 使用IFolder接口的getPath()方法返回完整路径。

请记住,有时 Webi 报表会报告它未链接到任何 Universe,即所谓的未绑定报表。有关此问题的更多信息,请参阅this blog post。

【讨论】:

  • 嗨克里斯托夫,谢谢!此外,你知道如何直接获取 dataSource cuid 吗?由于 dataSource.getID() 方法返回一个长字符串,如“DS0.UnivCUID=M08xU2AACvD_AhcA4gAAQkUAAqmtID0AAAA;UnivID=339394;ShortName=Project Save;UnivName=Project Save”,因此需要 substr。
  • 如果您只是对 Webi 文档使用的 Universe 感兴趣,您也可以使用 IWebi 界面的getUniverses()。这将为您提供一组 Universe ID。这样,您无需查看各个数据提供者或使用 Report Engine API。
  • 我要做的是获取报告链接到的所有宇宙并查看它们的路径。
  • 正如我所说,在这种情况下,您不需要 Report Engine API。只需使用 BusinessObjects Enterprise API;您应该能够使用IInfoObject、IWebi 和IFolder 接口检索您需要的所有信息。
猜你喜欢
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-19
  • 1970-01-01
相关资源
最近更新 更多