0

我有一个引用服务器上共享数据集的服务器报告。如果我将 a 添加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.

当数据集嵌入到报告中时,我没有遇到这个问题。

有什么想法吗?

预计到达时间:

如果我下载报告,转换为 XDocument,转换回 byte[] 然后使用 ReportingService2010.SetItemDefinition() 将报告保存在服务器上,它在 ReportViewer 中显示良好(指定路径时)。

这意味着问题不在 xml<->byte[] 转换中。当 ReportViewer 使用路径下载报告时,它必须对引用的共享数据集执行某些我没有执行的操作。

4

1 回答 1

0

我有一个解决方法。

共享数据集的相对路径似乎有问题。我想我也会在服务器上引用共享图像时遇到同样的问题。

这是我打算做的:

  • 下载报告。
  • 进行预处理。
  • 使用 ReportingServices2010.CreateCatalogueItem 将新报告保存回服务器在完全相同的位置,但使用临时名称。
  • 使用 reportViewer.ServerReport.ReportPath 来引用新的临时报告。

预计到达时间:

实际上,因为 DataSet 路径引用总是从根开始,我认为您不必将报告存储在完全相同的位置。您可以创建一个 /Temp 文件夹,您可以轻松地定期清理该文件夹。

于 2012-11-22T08:33:42.940 回答