如何使用SOAP API为链接报表设置SSRS报表参数?

时间:2010-01-26 20:08:02

标签: reporting-services ssrs-2008

我的情况是我需要我的报表服务器或多或少可公开访问,因为我们在ASP.NET Web应用程序中使用ReportViewer控件,用户组将访问各种报表。 / p>

这将针对SQL Server 2008 Standard Edition运行。

安全性将通过创建链接报告来处理(每个用户一个,在他们从我们的网络应用程序请求报告时在运行时发布)但我无法以编程方式设置链接报告参数值。

简而言之,报告具有少量保留的参数名称(例如,UserID和LanguageID)。在运行时,Web应用程序将检查用户是否具有链接报告(使用每个报告/用户的唯一链接报告名称),如果不存在则创建一个。

这是使用SSRS SOAP API完成的,并且运行良好。我遇到的问题是为链接报告设置报告参数。

例如,如果我以系统管理员身份登录,我只想查看报告并完全统治报表查看器中的参数。如果我以“低”用户身份登录,我希望在链接报告中将UserID参数设置为我的ID,并且无法将UserID更改为窥探其他用户的报告。

这可以在报表管理器中手动完成,方法是打开链接报表的属性并设置参数默认值并取消选中“提示用户”框。

现在我正在尝试使用SOAP API以编程方式执行此操作,但似乎找不到正确的方法来执行此操作。

我在一些地方读到了CreateLinkedReport方法可以设置参数的提示,但我开始认为这只是作者的一个误解。虽然此方法接受Property []属性,但这些属性仅显示为提供报告元数据(例如链接的报告名称)。

我是否需要使用属性名称/值来指示属性是报告参数的特殊标记?

非常感谢任何想法。

1 个答案:

答案 0 :(得分:1)

啊!明白了!

有两种SOAP方法: GetReportParameters和SetReportParameters

它们被记录为使用报告,这些报告非常不是链接报告,但API中的这一点功能似乎适用于这两种报告。

对于任何未来的搜索者: 我编写了一个方法来接收ReportParameter [](在链接报告上调用GetReportParameters的结果)并迭代它们。伪/几乎C#代码:

ReportParameter[] reportParameters = ReportingService2005.GetReportParameters(LinkedReportName);
foreach( ReportParameter reportParameter in reportParameters)
{
   switch(reportParameter.Name)
   {
      case "ReservedParam1":
         reportParameter.DefaultValues = new string[1];
         reportParameter.DefaultValues[0] = CalculateReservedParam1();
         reportParameter.PromptUser = false;
      //etc
   }
}
try
{
   ReportingService2005.SetReportParameters(reportParameters);
}
catch (Exception e)
{
   // if error occurs while replacing params, delete linked report so user can't specify parameters they aren't entitled to
   ReportingService2005.DeleteItem(LinkedReportName);
   throw e;
}