我可以发送SSRS自定义订阅电子邮件吗?

时间:2013-12-02 13:59:12

标签: email reporting-services subscription

我需要将一些包含SSRS报告的电子邮件发送到人员列表,表示他们在特定日期之前剩余的工作项目数量。 我想做的是发送列表中的每个人,反映他的进度的自定义报告,所以我的问题是:我可以向列表中的人发送不同的报告(比如发送它的电子邮件)地址作为报告的参数),或者我只能向列表中的所有人发送相同的报告吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

如果您没有企业(使用数据驱动的订阅,如提到的@StephLocke),您可以使用SSRS web service以编程方式生成SSRS订阅。

您的代码看起来像这样(SubscriptionRequest是我使用的自定义类,其属性应该是直观的):

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

更多示例can be found here

答案 1 :(得分:1)

是的,您可以使用数据驱动订阅来执行此操作。不幸的是,每个版本都没有这个版本(2008年以上,只有我认为的企业版),因此您可能无法使用此功能。

可提供更多详情:http://technet.microsoft.com/en-us/library/ms159150.aspx