0

サーバー上の共有データセットを参照するサーバーレポートがあります。ページにを追加しReportViewer、レポートサーバーのURLとレポートパスのプロパティを設定すると、正常に機能します。

レポートのxmlを確認して前処理を行う必要があるため、次のようにします。-

  1. 以下を使用してレポートを手動でダウンロードしますReportingService2010.GetItemDefinition(path)。次に、これをに変換しXDocumentます。

  2. 前処理を行います-これはデータセットとは何の関係もありません。

  3. 以下を使用して、xml定義をレポートビューアにロードします。

    XDocument processedDocument;
    
    using (var sr = new StringReader(processedDocument.ToString()))  
    {  
         viewer.ServerReport.LoadReportDefinition(sr);  
    }
    

レポートを表示しようとすると、サーバーのエラーログに次のエラーが表示されます。

Microsoft.ReportingServices.Diagnostics.Utilities.InternalCatalogException:
共有データセット定義ストリームが存在しません。

エラーの核心にたどり着くために、ステップ2を完全に削除して、レポートをダウンロードし、xmlに変換してから、xmlをにロードするだけReportViewerです。

データセットがレポートに埋め込まれている場合、この問題は発生しません。

ここで何が起こっているのか考えはありますか?

ETA:

レポートをダウンロードし、XDocumentに変換し、byte []に​​変換してから、ReportingService2010.SetItemDefinition()を使用してレポートをサーバーに保存すると、ReportViewerに正常に表示されます(パスが指定されている場合)。

これは、問題がxml <->byte[]変換にないことを意味します。ReportViewerがパスを使用してレポートをダウンロードするとき、参照されている共有データセットに対して、私が行っていないことを行っている必要があります。

4

1 に答える 1

0

回避策があります。

共有 DataSet への相対パスに問題があるようです。サーバー上の共有画像を参照する場合にも同じ問題が発生すると思います。

これが私がやろうとしていることです:

  • レポートをダウンロードします。
  • 前処理を行います。
  • ReportingServices2010.CreateCatalogueItem を使用して、新しいレポートをサーバーに保存します。まったく同じ場所で、ただし一時的な名前を使用しています。
  • reportViewer.ServerReport.ReportPath を使用して、新しい一時レポートを参照します。

到着予定時刻:

実際、DataSet のパス参照は常にルートから始まるため、レポートをまったく同じ場所に保存する必要はないと思います。定期的に簡単に消去できる /Temp フォルダーを作成できます。

于 2012-11-22T08:33:42.940 に答える