代码之家  ›  专栏  ›  技术社区  ›  Stefan Mohr

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

  •  1
  • Stefan Mohr  · 技术社区  · 15 年前

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

    这将针对SQL Server 2008标准版运行。

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

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

    这是使用SSRS SOAP API完成的,并且工作得很好。我遇到的问题是设置链接报表的报表参数。

    例如,如果我以系统管理员身份登录,我只想查看报告,并完全控制报告查看器中的参数。如果我以“低”用户身份登录,我希望在链接报表中将user id参数设置为my id,并且不能将user id更改为snoop查看其他用户的报表。

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

    现在,我正尝试使用SOAP API以编程方式完成这项工作,但似乎找不到正确的方法来完成这项工作。

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

    是否需要将特殊标记与属性名称/值一起使用,以指示属性是报表参数?

    任何想法都非常感谢。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Stefan Mohr    15 年前

    啊!知道了!

    有两种SOAP方法: GetReportParameters和SetReportParameters

    它们被记录为与报表一起工作,而报表是非常没有链接的报表,但是API中的这一点功能似乎可以与这两种报表一起工作。

    对于任何未来的搜索者: 我已经编写了一个方法来接收reportParameter[](在 链接报表 )并重复它们。伪/almostc代码:

    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;
    }