【问题标题】:Create SSRS subscriptions from web page从网页创建 SSRS 订阅
【发布时间】:2012-04-26 14:45:55
【问题描述】:

我在 SQL 2008 R2 上运行 Reporting Services,并创建了一些报告。我可以进入 Report Server 并设置订阅,并将任何报告通过电子邮件发送到电子邮件地址。所以所有这些都配置正确。

我想做的是在我的应用程序中有一个网页,显示可用报告的列表。用户可以选择一个,选择计划频率,输入电子邮件地址,然后单击“保存”按钮。单击保存时,它应该在 SSRS 中创建订阅。根据报告,我可能需要传入几个报告参数。

如何在 C# 中做到这一点?

【问题讨论】:

    标签: sql-server-2008 reporting-services ssrs-2008


    【解决方案1】:

    您可以在 SSRS 中为报告动态生成一次性订阅。您必须使用 Diego 提到的 RS 网络服务。

    您的代码将如下所示:

    static void generateSubscription()
    {
        if (SubscriptionRequests.Count < 1) return;
    
        NetworkCredential credentials = new NetworkCredential("user", "pass");
        reports.ReportingService2005 rs = new reports.ReportingService2005();
        rs.Credentials = credentials;
        DateTime topDatetime = DateTime.Now;
        topDatetime = topDatetime.AddMinutes(2);
    
        foreach (SubscriptionRequest x in SubscriptionRequests)
        {
            reports.ExtensionSettings extensionSettings = new reports.ExtensionSettings();
            List<reports.ParameterValue> extParameters = new List<reports.ParameterValue>();
            List<reports.ParameterValue> parameters = new List<reports.ParameterValue>();
            string description = "Email: ";
            string eventType = "TimedSubscription";
            extensionSettings.Extension = "Report Server Email";
    
            string scheduleXml = "<ScheduleDefinition><StartDateTime>";
            scheduleXml += topDatetime.ToShortDateString() + " " + topDatetime.ToShortTimeString();
            scheduleXml += "</StartDateTime></ScheduleDefinition>";
    
            parameters.Add(new reports.ParameterValue() { Name = "abc", Value = x.id });
    
    
            extParameters.Add(new reports.ParameterValue() { Name = "RenderFormat", Value = x.renderFormat });
            extParameters.Add(new reports.ParameterValue() { Name = "TO", Value = x.email });
            extParameters.Add(new reports.ParameterValue() { Name = "ReplyTo", Value = x.replyTo });
            extParameters.Add(new reports.ParameterValue() { Name = "IncludeReport", Value = "True" });
            extParameters.Add(new reports.ParameterValue() { Name = "Subject", Value = "subject - " + " (" + x.id.ToString() + ")" });
    
            extParameters.Add(new reports.ParameterValue() { Name = "Comment", Value = x.body });
            extensionSettings.ParameterValues = extParameters.ToArray();
    
            description += topDatetime.ToShortDateString() + " " + topDatetime.ToShortTimeString();
            description += " (" + x.a + " - " + x.b + " - " + x.c + ")";
            string _reportName = "/report";
            rs.CreateSubscription(_reportName, extensionSettings, description, eventType, scheduleXml, parameters.ToArray());
            topDatetime = topDatetime.AddSeconds(30);
        }           
    }  
    

    【讨论】:

      【解决方案2】:

      最简单的方法是在“浏览器”预定义角色下授予用户对报表管理员的访问权限。这正是这个角色的目的,查看文件夹和报告并订阅报告。

      如果这不可行,您可以创建自己的管理工具。为此,您需要使用 SOAP 和 ReportService2005 端点访问 SSRS Web 方法

      例子here

      【讨论】:

      • 第一个选项不起作用,因为这个 SSRS 实例为许多数据库提供报告,并且这些报告被锁定为用户不知道的客户 ID GUID。我在我的项目中添加了对端点的引用,并看到了大量的 Web 方法。如果有人有一个例子,我可以看看,看看如何处理这个会很棒。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      • 2022-08-11
      • 1970-01-01
      • 1970-01-01
      • 2013-09-29
      相关资源
      最近更新 更多