手动下载报告并放入ReportViewer时共享数据集出错

时间:2012-11-21 12:59:05

标签: reporting-services dataset sql-server-2008-r2 ssrs-2008-r2

我有一个服务器报告,它引用了服务器上的共享数据集。如果我向页面添加ReportViewer并设置报表服务器URL和报表路径属性,它可以正常工作。

因为我需要查看报告的xml并进行一些预处理,我: -

  1. 使用ReportingService2010.GetItemDefinition(path)手动下载报告。然后我将其转换为XDocument

  2. 进行预处理 - 这与数据集无关。

  3. 使用以下命令将xml定义加载到报告查看器中:

    XDocument processedDocument;
    
    using (var sr = new StringReader(processedDocument.ToString()))  
    {  
         viewer.ServerReport.LoadReportDefinition(sr);  
    }
    
  4. 当我尝试查看报告时,我在服务器错误日志中看到此错误:

      

    Microsoft.ReportingServices.Diagnostics.Utilities.InternalCatalogException:
      共享数据集定义流不存在。

    为了解决错误的关键,我已完全删除了第2步,以便我所做的就是下载报告,转换为xml,然后将xml加载到ReportViewer

    当数据集嵌入到报表中时,我不会遇到此问题。

    这里有什么想法吗?

    ETA:

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

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

1 个答案:

答案 0 :(得分:0)

我有一个解决方法。

共享DataSet的相对路径似乎存在问题。我认为我也会在服务器上引用共享图像时遇到同样的问题。

这是我打算做的事情:

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

<强> ETA:

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