从winforms应用程序发送SSRS订单

时间:2011-06-17 11:43:20

标签: .net winforms email reporting-services

我有一个新的Winforms应用程序正在替换现有的Access订单处理系统,我需要复制一些现有的功能。

目前,用户输入订单数据并点击确定。此时,将生成订单打印(使用“访问报告”),并打开Outlook,并将报告附加到新电子邮件中。电子邮件本身填充了一些样板文本,但是从Access填充的邮件到,cc等字段。然后,用户可以立即点击发送或编辑电子邮件正文的内容。

在新系统上,我在SSRS中复制了报告,但在我的应用程序中创建此报告的最简单方法是什么(传递参数以检索正确的顺序),然​​后打开Outlook,附带创建的报告和基本字段-populated?

1 个答案:

答案 0 :(得分:1)

您可以在SSRS中为报告动态生成一次性订阅。

您的代码看起来像这样:

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