我有一个Reporting Services 2005报告有错误:“参数UserID是只读的”。在做了一些研究后,我找到了一个有效的解决方案。我从Report Manager Web界面打开了报告,并对其进行了更改:
..对此:
此更改后,报告有效!太好了!
所以,我想我将下载修改后的RDL,以便我可以看到更改并将更正的RDL添加到我的源代码库中。所以,我下载了RDL:
但我的差异工具告诉我RDL的“之前”版本与RDL的“之后”版本相同。我深信我的差异工具是错误的,我尝试了另一个。果然,RDL没有区别。
我错过了什么?更改是否反映在RDL以外的其他位置,或者Reporting Services是否没有咳嗽正确版本的RDL?在任何一种情况下,我如何获得正确版本的RDL?
谢谢。
答案 0 :(得分:1)
TL / DR版本:Reporting Services 不为您提供正确的RDL。
您的问题促使我进一步调查我已经对SSRS怀疑已有一段时间了:报告参数在部署(或下载)报告定义时可能会以意想不到的方式表现。我之前注意到的一个相关场景:
简而言之,如果您要更新已部署报告的参数设置,您首先需要将其删除然后进行部署,或直接通过报告管理器更新设置。
回到你的问题。你没有遗漏任何东西,这似乎就像SSRS的行为方式(有意或无意)。 RDL schema有这个(缩写)片段:
<xsd:complexType name="ReportParameterType">
<xsd:choice minOccurs="1" maxOccurs="unbounded">
<xsd:element name="DataType">
<!-- abbreviated -->
</xsd:element>
<xsd:element name="Nullable" type="xsd:boolean" minOccurs="0"/>
<xsd:element name="DefaultValue" type="DefaultValueType" minOccurs="0"/>
<xsd:element name="AllowBlank" type="xsd:boolean" minOccurs="0"/>
<xsd:element name="Prompt" type="xsd:string" minOccurs="0"/>
<xsd:element name="ValidValues" type="ValidValuesType" minOccurs="0"/>
<xsd:element name="Hidden" type="xsd:boolean" minOccurs="0"/>
<xsd:element name="MultiValue" type="xsd:boolean" minOccurs="0"/>
<xsd:element name="UsedInQuery" minOccurs="0">
</xsd:choice>
<xsd:attribute name="Name" type="xsd:normalizedString" use="required"/>
</xsd:complexType>
因此,ReportParameter应该有一个“隐藏”元素。
我刚刚验证了您的调查结果(在SSRS 2008中),并且认为我可能有第二个问题的答案: SSRS确实不咳嗽正确版本的RDL 。它缺少关于参数的各种位,包括隐藏或不隐藏的元素。
有趣的是:如果您在BIDS中更改报告并将参数设置为隐藏,则RDL 将更改并具有<Hidden>true</Hidden>
元素。