SSRS - 通过查询字符串启用可用值选项传递多值参数
SSRS - Pass Multi Value Parameter with Available Values Option Enabled Through Querystring
我的报告中有一个参数,它有多个值。
它的值来自数据集。
在我的应用程序中,当我请求报告时,此参数作为查询字符串值。但是当我使用多值选项时,参数不再是单个值,而是具有多个值的 "array" (Of Couse).
REPORT?codArea=&codDiretoria=17&ultimaAlteracao=on&formato=PDF&codListaPrioridade=8&codListaPrioridade=13
重要部分:
(codListaPrioridade=8&codListaPrioridade = 13)
问题是 "Available Values" 选项。具有数组作为值的参数,没有任何 "Available Values" 和 SSRS 抛出错误。
重要部分:
System.ServiceModel.FaultException: This report requires a default or user-defined value for the report parameter 'codListaPrioridade'. To run or subscribe to this report, you must provide a parameter value.
如果我禁用 "Available Values" 选项,我可以毫无问题地发送这个 "array":
codArea=&codDiretoria=17&ultimaAlteracao=on&codListaPrioridade=9&codListaPrioridade=13&formato=PDF
重要部分:
(codListaPrioridade=9&codListaPrioridade=13)
="----> "& Join(Parameters!codListaPrioridade.Value, ",")
诀窍是我需要在此报告中创建此参数并启用 "Available Values",但此参数需要接受 "Any" 值(因为查询字符串中的数组)。
"Available Values" 必须用于显示哪些值仅可用(在我的应用程序中)。
在 SSRS 内部,参数工作正常,只有在我的应用程序中使用此报告时才会出现问题,在查询字符串中发送参数值。
错误的关键部分是"This report requires a default or user defined value for the report parameter."
您不需要默认参数。在我看来,您的应用程序正在将无效参数值传递给报告。当您禁用可用值时它起作用的原因是因为它会接受 ANY 值。
运行 填充可用值并保持打开状态的查询。
在您的 ASP.NET 代码中将值传递到报表服务器之前设置一个断点。检查这些值是什么,并确保它没有尝试传递您从 运行 查询获得的可用值列表中 ISN'T 的任何内容。
如果有什么不同,那就是您出错的原因。我不记得外壳是否重要,所以你也想检查一下。如果你检查它们并且一切正常......再次检查它们。不知道有多少次我以为没有什么数据不对后来突然看到了。
另一种理论是您没有将多值参数正确传递给报表服务器。我以前从未尝试在 URL 中直接执行此操作,但在 MSDN 页面 Pass a Report Parameter Within a URL 的 "other examples" 部分中它显示传递了一个多值参数。在他们的示例中,他们似乎在每个值的参数名称末尾附加了一个数字。但我也不确定这是否正确。
https://myserver/Reportserver?/SQL+Server+User+Education+Team/_ContentTeams/folder123/team+project+report&teamgrouping2=xgroup&teamgrouping1=ygroup&OrderID=747&OrderID=787&OrderID=12
但由于您已经在编写 .NET 代码,所以让我提出一个建议。使用网络服务作为网络服务。它使这样的事情变得容易得多。您只需添加 Web 服务作为对项目的引用,然后基本上像调用任何其他 .NET 一样调用它 class。该参考会读取 WSDL 文件并向您显示所有可用的 API 调用及其参数以及您将返回的内容。这确实是一个很好的功能。查看这篇关于“How to: Add a Reference to a Web Service" and then this TechNet dev guide: https://technet.microsoft.com/en-us/library/bb522713.aspx
的 MSDN 文章
我的报告中有一个参数,它有多个值。
它的值来自数据集。
在我的应用程序中,当我请求报告时,此参数作为查询字符串值。但是当我使用多值选项时,参数不再是单个值,而是具有多个值的 "array" (Of Couse).
REPORT?codArea=&codDiretoria=17&ultimaAlteracao=on&formato=PDF&codListaPrioridade=8&codListaPrioridade=13
重要部分:
(codListaPrioridade=8&codListaPrioridade = 13)
问题是 "Available Values" 选项。具有数组作为值的参数,没有任何 "Available Values" 和 SSRS 抛出错误。
重要部分:
System.ServiceModel.FaultException: This report requires a default or user-defined value for the report parameter 'codListaPrioridade'. To run or subscribe to this report, you must provide a parameter value.
如果我禁用 "Available Values" 选项,我可以毫无问题地发送这个 "array":
codArea=&codDiretoria=17&ultimaAlteracao=on&codListaPrioridade=9&codListaPrioridade=13&formato=PDF
重要部分:
(codListaPrioridade=9&codListaPrioridade=13)
="----> "& Join(Parameters!codListaPrioridade.Value, ",")
诀窍是我需要在此报告中创建此参数并启用 "Available Values",但此参数需要接受 "Any" 值(因为查询字符串中的数组)。
"Available Values" 必须用于显示哪些值仅可用(在我的应用程序中)。
在 SSRS 内部,参数工作正常,只有在我的应用程序中使用此报告时才会出现问题,在查询字符串中发送参数值。
错误的关键部分是"This report requires a default or user defined value for the report parameter."
您不需要默认参数。在我看来,您的应用程序正在将无效参数值传递给报告。当您禁用可用值时它起作用的原因是因为它会接受 ANY 值。
运行 填充可用值并保持打开状态的查询。
在您的 ASP.NET 代码中将值传递到报表服务器之前设置一个断点。检查这些值是什么,并确保它没有尝试传递您从 运行 查询获得的可用值列表中 ISN'T 的任何内容。
如果有什么不同,那就是您出错的原因。我不记得外壳是否重要,所以你也想检查一下。如果你检查它们并且一切正常......再次检查它们。不知道有多少次我以为没有什么数据不对后来突然看到了。
另一种理论是您没有将多值参数正确传递给报表服务器。我以前从未尝试在 URL 中直接执行此操作,但在 MSDN 页面 Pass a Report Parameter Within a URL 的 "other examples" 部分中它显示传递了一个多值参数。在他们的示例中,他们似乎在每个值的参数名称末尾附加了一个数字。但我也不确定这是否正确。
https://myserver/Reportserver?/SQL+Server+User+Education+Team/_ContentTeams/folder123/team+project+report&teamgrouping2=xgroup&teamgrouping1=ygroup&OrderID=747&OrderID=787&OrderID=12
但由于您已经在编写 .NET 代码,所以让我提出一个建议。使用网络服务作为网络服务。它使这样的事情变得容易得多。您只需添加 Web 服务作为对项目的引用,然后基本上像调用任何其他 .NET 一样调用它 class。该参考会读取 WSDL 文件并向您显示所有可用的 API 调用及其参数以及您将返回的内容。这确实是一个很好的功能。查看这篇关于“How to: Add a Reference to a Web Service" and then this TechNet dev guide: https://technet.microsoft.com/en-us/library/bb522713.aspx
的 MSDN 文章