0

Visual Studio に標準で付属する 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 プロパティがプロパティ バッグにあり、気になる 2 つの部分があることです。

  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

参考までに、これが問題の解決策を思いついた方法です。

使用するのは、次のようなクエリと だけです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);
}

rptInfoでありInfoObjectpathNameStringBuilderです。

于 2012-08-07T14:01:22.713 に答える