ビジネスオブジェクト企業からプログラムでファイルパスを取得する
-
12-12-2019 - |
質問
Visual Studiosを含む標準化されているCrystal Reports APIでは、Business Objects Enterprise Serverにあるレポートからファイルパスを抽出する方法はありますか?ReportDocumentオブジェクトを作成し、InfoStoreとEnterpressessionを使用してロードします。私たちは、抽出プロセスでメタデータに使用できるように、プログラムでファイルパス名を抽出する方法を探しています。また、ReportDocumentクラスのFilenameプロパティを使用してみましたが、レポートCUIDを返すだけです。
これを行う方法を理解することができない場合は、再帰関数を通してこれをプログラム的に実行するだけですが、これを保存しているプロパティを見つけるために絶対にを好むでしょう。
解決 2
FYI、これは私たちが問題の解決策をどのように思い付いたかです。
私たちが使用するのは、次のような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
はInfoObject
で、pathName
がStringBuilder
です。
他のヒント
これはインフォスポントから可能です。あなたのクエリにあなたが返信にsi_filesを含めたいです。SI_NAME= 'XYZ' から SELECT *を既に行っている場合は、既に戻ってくることができます。
トリッキーな部分は、SI_FILESプロパティがプロパティバッグにあり、気にする2つの部分を持っていることです。
- si_file1
- si_path
SI_FILE1は、ファイルリポジトリシステム(FRS)内に格納されているとおりのファイル名です。SI_PATHは、FRS内のファイルのパスです。パスは FRS:// INPUT / A_135 / 028/000/000/000/000/000/000 / 000/7303 / に似ています。最初のセクション frs://入力は、CMC内のFRS。パスの残りの部分は、SI_FILE1が格納されている場所への通常のファイルシステムパスです。