我在SSRS中有一个非常简单的报告,它只是一个包含三列,一个对象名,客户帐户和到期日期的表。
在我的报告中,我通过UserID包含一个过滤器,将数据限制为仅登录用户的客户帐户。
我将用户的客户帐户存储在一个包含domain \ alias |的简单表中从SSIS包填充的客户帐户字段。
当一个新的别名|输入客户帐户关联,我还想为此别名设置报告订阅,以便在更新时通知他们。
这可能吗?
我最近发现了Report Server Web Service,我认为这可能有所帮助。我可以在这里设置新的订阅吗?理想情况下,当我确定新的客户帐户时,我想在我的SSIS包中调用它。
另请注意,我不相信数据驱动的订阅会起作用有几个原因:
1)我使用UserID参数来过滤报告
2)我希望用户能够在“我的订阅”
更新
我已经能够使用Web服务成功创建我自己的订阅(见下文),我仍然在研究如何为其他用户做这件事虽然看起来不太好看:
ReportingService2010SoapClient service = new ReportingService2010SoapClient();
service.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
TrustedUserHeader userHeader = new TrustedUserHeader();
string desc = "Send to Document Library";
string eventType = "TimedSubscription";
string scheduleXml =
@"<ScheduleDefinition>" +
" <StartDateTime>2010-11-30T08:00:00-08:00" +
" </StartDateTime>" +
" <WeeklyRecurrence>" +
" <WeeksInterval>1</WeeksInterval>" +
" <DaysOfWeek>" +
" <Monday>True</Monday>" +
" </DaysOfWeek>" +
" </WeeklyRecurrence>" +
"</ScheduleDefinition>";
ParameterValue[] extensionParams = new ParameterValue[4];
extensionParams[0] = new ParameterValue();
extensionParams[0].Name = "TO";
extensionParams[0].Value = "my alias";
extensionParams[1] = new ParameterValue();
extensionParams[1].Name = "IncludeReport";
extensionParams[1].Value = "FALSE";
extensionParams[2] = new ParameterValue();
extensionParams[2].Name = "IncludeLink";
extensionParams[2].Value = "TRUE";
extensionParams[3] = new ParameterValue();
extensionParams[3].Name = "Subject";
extensionParams[3].Value = "@ReportName was executed at @ExecutionTime";
string matchData = scheduleXml;
ExtensionSettings extSettings = new ExtensionSettings();
extSettings.ParameterValues = extensionParams;
extSettings.Extension = "Report Server Email";
string id;
service.CreateSubscription(userHeader, "/report path/report name",
extSettings, desc, eventType, matchData, null, out id );
我希望在调用CreateSubscription之前能够执行以下操作,但如果不包含用户密码,我就无法执行此操作。
NetworkCredential credentials = new NetworkCredential("alias", "", "userdomain");
service.ClientCredentials.Windows.ClientCredential = credentials;
或我发现的另一个选项不需要密码但抛出COM异常:
WindowsIdentity wi = new WindowsIdentity("alias@fqdn");
WindowsImpersonationContext ctx = null;
ctx = wi.Impersonate();
答案 0 :(得分:0)
re:我不相信数据驱动的订阅会有两个原因:
1)我正在使用UserID参数来过滤报告 2)我希望用户能够在“我的订阅”
下创建订阅后自行管理订阅呃..我很确定数据驱动订阅会满足您的需求,我认为我可以在几分钟内解决这两个问题。
1)构建一个Web表单来管理驱动订阅的表。我的意思是,我可以在10分钟内在Dreamweaver中做到这一点。
2)所以传递参数,我想我不明白你的犹豫
答案 1 :(得分:0)
结束使用自定义解决方案,暂时需要管理员来管理用户的订阅。