以编程方式从Business Objects Enterprise获取文件路径

时间:2012-07-26 21:05:19

标签: c# business-objects crystal-reports-server

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

如果我们无法找到实现此目的的方法,我们将通过递归函数以编程方式执行此操作,但我肯定会更喜欢来查找已存储此属性的属性。

2 个答案:

答案 0 :(得分:0)

这可以从InfoStore中获得。在您的查询中,您希望在回复中包含SI_FILES。如果您已经在CI_NAME ='XYZ'的CI_INFOOBJECTS中进行了选择*,那么您将已经回来了。

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

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

答案 1 :(得分:0)

仅供参考,我们就是这样解决问题的方法。

我们使用的只是StringBuilderInfoObject查询,如下所示:

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);
}

其中rptInfoInfoObjectpathNameStringBuilder