代码之家  ›  专栏  ›  技术社区  ›  marc_s MisterSmith

为动态生成和部署的报表使用共享数据源

  •  12
  • marc_s MisterSmith  · 技术社区  · 16 年前

    我正在为SSR2008动态生成RDL文件,将我的报表从“构建基块”中进行组装,这些“构建基块”是我在报表服务器上定义为报表的,并且我将其用作生成的报表上的子报表。

    在我的报表服务器上,我有一个单独的共享数据源,只要我直接在报表服务器上运行数据,它就可以工作。

    我要做的是:

    • 我生成的主报表应引用该共享数据源
    • 生成的主报表中包含的子报表也应使用相同的数据源
    • 在使用WebService接口将报表部署到报表服务器之后,我希望能够立即实际查看报表。

    现在,我可以生成和验证我的RDL了,我可以把它部署到报表服务器上,也很好——它出现了,一切都很好。

    但是当我试图查看报告时,我得到了一个错误,即我的数据源无效、已被删除或其他什么……。

    我错过了什么??我很确定我有正确的数据源-它和所有的guid-并且名称是匹配的。如何告诉生成的RDL使用服务器上已经存在的共享数据源??

    1 回复  |  直到 16 年前
        1
  •  20
  •   marc_s MisterSmith    16 年前

    在这里回答我自己的问题,希望其他人能发现这一点:

    我有一种(错误的)印象,给服务器上的数据源提供的唯一“datasourceid”足以唯一地标识它。

    因此,在我生成的RDL中,我有如下内容:

      <DataSources>
        <DataSource Name="MyDataSource">
          <Transaction>true</Transaction>
          <DataSourceReference>MyDataSource</DataSourceReference>
          <rd:DataSourceID>6ba7c588-e270-4de9-988c-d2af024f10e1</rd:DataSourceID>
          <rd:SecurityType>None</rd:SecurityType>
        </DataSource>
      </DataSources>
    

    当我的数据源确实被称为“my data source”并且与我通过RS WebServiceAPI发布的报告位于同一目录时,这个方法曾经奏效过。

    我一把数据源移到别处,它就停止工作了。

    解决方案:
    这听起来可能很傻,但我一开始真的没有“理解”它:这个 DataSourceReference 需要在报表服务器上有完整的“路径”,指向我要引用的数据源。仅仅指定唯一的ID是不行的……

    所以一旦我把RDL改为:

      <DataSources>
        <DataSource Name="MyDataSource">
          <Transaction>true</Transaction>
          <DataSourceReference>/MyProject/DataSources/MyDataSource</DataSourceReference>
          <rd:DataSourceID>6ba7c588-e270-4de9-988c-d2af024f10e1</rd:DataSourceID>
          <rd:SecurityType>None</rd:SecurityType>
        </DataSource>
      </DataSources>
    

    (注意 <DataSourceReference>/MyProject/DataSources/MyDataSource</DataSourceReference> )

    从那一刻起,它就像一种魅力。

    希望有人有一天会发现这个有用!

    推荐文章