【问题标题】:Automatically set up user's subscription in SSRS在 SSRS 中自动设置用户的订阅
【发布时间】:2011-05-17 13:15:15
【问题描述】:

我在 SSRS 中有一个非常简单的报告,它只是一个包含三列、对象名称、客户帐户和到期日期的表格。

在我的报告中,我包含一个按 UserID 的过滤器,以将数据限制为仅登录用户的客户帐户。

我将用户的客户帐户存储在一个带有域\别名 | 的简单表中从 SSIS 包填充的客户帐户字段。

当一个新的别名 |已输入客户帐户关联,我还想为此别名设置订阅报告,以便在更新时通知他们。

这可能吗?

我最近发现了Report Server Web Service,我认为这可能会有所帮助。我可以在这里设置新订阅吗?理想情况下,当识别出新的客户帐户时,我想在我的 SSIS 包中调用它。

另外请注意,我不相信数据驱动订阅会起作用,原因如下:
1) 我正在使用 UserID 参数来过滤报告
2) 我希望用户能够在“我的订阅”下创建订阅后自行管理他们的订阅

更新
我已经能够使用网络服务成功地为我自己创建订阅(见下文),我仍在研究如何为其他用户完成此操作,尽管它看起来不太好:

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

【问题讨论】:

  • 是否可以在数据库表中添加条目来实现这一点?

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


【解决方案1】:

re:我不认为数据驱动订阅会起作用,原因有几个:

1) 我正在使用 UserID 参数来过滤报告 2) 我希望用户能够在“我的订阅”下创建订阅后自行管理他们的订阅

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

1) 构建一个网络表单来管理驱动订阅的表。我的意思是,我可以在 10 分钟内在 Dreamweaver 中完成此操作。

2) 这么传参数,我猜我不明白你的犹豫

【讨论】:

    【解决方案2】:

    最终使用了一个自定义解决方案,该解决方案暂时需要管理员来管理用户的订阅。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-05
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      相关资源
      最近更新 更多