我正在为 SSRS 2008 动态生成 RDL 文件,从“构建块”中组装我的报告,我将其定义为报告服务器上的报告,并将其用作生成的报告上的子报告。
在我的报表服务器上,我有一个共享数据源,只要我直接在报表服务器上运行内容,该数据源就可以工作。
我想要实现的是:
- 我生成的主报告应引用该共享数据源
- 生成的主报告中包含的子报告也应使用相同的数据源
- 使用 Web 服务接口将报表部署到报表服务器后,我希望能够立即实际看到报表
现在,我可以很好地生成和验证我的 RDL,也可以很好地将其部署到报表服务器 - 它显示出来了,一切都很棒。
但是当我尝试查看报告时,我收到一条错误消息,指出我的数据源无效或已被删除或其他......
我缺少什么?我非常确定我有正确的数据源 - 它和所有数据的 GUID - 并且名称确实匹配。如何告诉生成的 RDL 使用服务器上已有的共享数据源?
在这里回答我自己的问题,希望其他人可能会发现这很有用:
我的(错误)印象是,为服务器上的数据源提供的唯一“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>
现在,当我的数据源确实称为“MyDataSource”并且位于与我通过 RS WebService API 发布的报告位于同一目录中时,这曾经有效过。
一旦我将数据源移到其他地方,它就停止工作。
解决方案:
这可能听起来很愚蠢,但一开始我真的没有“明白”: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>
)
从那一刻起,它就像一种魅力。
希望有一天有人会发现这很有用!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)