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



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

如果我们找不到实现这一点的方法,我们将通过递归函数以编程的方式实现,但我肯定更喜欢找到一个存储了这个的属性。

这只需要从InfoStore中就可以实现。在您的查询中,您希望在答复中包含SI_FILES。如果您已经在CI_INFOOBJECTS中执行选择*,其中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的常规文件系统路径。

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

我们所使用的只是一个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);
}

其中rptInfoInfoObject,而pathNameStringBuilder

相关内容

最新更新