在SSRS中自动设置用户的订阅

时间:2010-11-29 22:08:27

标签: sql-server web-services authentication reporting-services impersonation

我在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();

2 个答案:

答案 0 :(得分:0)

re:我不相信数据驱动的订阅会有两个原因:

1)我正在使用UserID参数来过滤报告 2)我希望用户能够在“我的订阅”

下创建订阅后自行管理订阅

呃..我很确定数据驱动订阅满足您的需求,我认为我可以在几分钟内解决这两个问题。

1)构建一个Web表单来管理驱动订阅的表。我的意思是,我可以在10分钟内在Dreamweaver中做到这一点。

2)所以传递参数,我想我不明白你的犹豫

答案 1 :(得分:0)

结束使用自定义解决方案,暂时需要管理员来管理用户的订阅。