0

在 Visual Studios 标准的 Crystal Reports API 中,有没有办法从 Business Objects Enterprise 服务器上现有的报表中提取文件路径?我们创建一个 ReportDocument 对象并使用 InfoStore 和 EnterpriseSession 加载它。我们正在寻找一种以编程方式提取文件路径名的方法,以便我们可以在提取过程中将其用于元数据。此外,我们尝试在 ReportDocument 类中使用 FileName 属性,但它只返回一个报表 CUID。

如果我们无法找到一种方法来执行此操作,我们将通过递归函数以编程方式执行此操作,但我肯定更愿意找到一个存储了它的属性。

4

2 回答 2

0

这仅在信息存储中是可能的。在您的查询中,您希望在回复中包含 SI_FILES。如果您已经在执行select * from CI_INFOOBJECTS where SI_NAME='XYZ'那么您已经将它返回了。

棘手的部分是 SI_FILES 属性位于属性包中,并且有两个您关心的部分:

  1. SI_FILE1
  2. SI_PATH

SI_FILE1 是真实的文件名,因为它存储在文件存储库系统 (FRS) 中。SI_PATH 是 FRS 中文件的路径。该路径类似于frs://Input/a_135/028/000/7303/ 第一部分frs://Input指的是为 CMC 内的 FRS 配置的路径。路径的其余部分是存储 SI_FILE1 的常规文件系统路径。

于 2012-07-31T14:09:36.447 回答
0

仅供参考,这就是我们提出问题解决方案的方式。

我们只使用一个StringBuilder和一个InfoObject查询,如下所示:

string sReportQueryString = 
    "SELECT SI_ID, SI_CUID, SI_NAME, SI_PATH, SI_PARENT_CUID " + 
    "FROM CI_INFOOBJECTS " + 
    "WHERE SI_PROGID='CrystalEnterprise.Report' AND SI_INSTANCE = 0";

之后,我们调用递归方法并执行以下代码:

if (rptInfo.ParentID != 0)
{
    pathName.Insert(0, "\\" + rptInfo.Parent.ToString());
    getPath(rptInfo.Parent, ref pathName);
}

哪里rptInfo是一个InfoObjectpathName是一个StringBuilder

于 2012-08-07T14:01:22.713 回答