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