如何使用SOAP API为链接报告设置SSRS报告参数?
我有一种情况,我需要我的报表服务器或多或少可公开访问,因为我们在ASP.NET Web应用程序中使用ReportViewer控件,并且用户组将访问各种报表。如何使用SOAP API为链接报告设置SSRS报告参数?
这将针对SQL Server 2008标准版运行。
安全性将通过创建链接报告(每个用户一个,在运行时发布,当他们从我们的Web应用程序请求报告时发布)来处理,但我无法以编程方式设置链接报告参数值。
简而言之,报表具有少量的保留参数名称(例如UserID和LanguageID)。在运行时,Web应用程序将检查用户是否有链接的报告(对每个报告/用户使用唯一链接的报告名称),如果不存在,则创建一个。
这是使用SSRS SOAP API完成的,并且运行良好。我遇到的问题是设置链接报告的报告参数。
例如,如果我以系统管理员身份登录,我只想查看报告并对报告查看器中的参数进行完全统治。如果我以“低”用户身份登录,我希望UserID参数在链接报告中设置为我的ID,并且无法将用户ID更改为在其他用户的报告中窥探。
这可以通过打开链接报告的属性并设置参数默认值并取消选中“提示用户”框在报告管理器中手动完成。
现在我正在尝试使用SOAP API以编程方式执行该操作,并且似乎无法找到正确的方法来执行此操作。
我在CreateLinkedReport方法可以设置参数的一些地方阅读提示,但我开始认为这只是作者的误解。尽管此方法确实接受Property []属性,但这些属性仅显示提供报告元数据(如链接的报告名称)。
是否有一个特殊的标记,我需要使用属性名称/值来指示属性是一个报告参数?
任何想法,不胜感激。
啊!得到它了!
有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;
}