2010-01-26 90 views
0

我有一种情况,我需要我的报表服务器或多或少可公开访问,因为我们在ASP.NET Web应用程序中使用ReportViewer控件,并且用户组将访问各种报表。如何使用SOAP API为链接报告设置SSRS报告参数?

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

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

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

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

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

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

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

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

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

任何想法,不胜感激。

回答

0

啊!得到它了!

有2种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; 
}