2

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

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

我怎样才能在 C# 中做到这一点?

4

2 回答 2

5

您可以在 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);
    }           
}  
于 2012-04-26T18:49:21.323 回答
1

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

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

这里的例子

于 2012-04-26T14:54:10.773 回答