【问题标题】:Is there anyway to change the body of an email subscription everyday?是否每天都可以更改电子邮件订阅的正文?
【发布时间】:2014-01-08 20:28:04
【问题描述】:

老实说,我不认为这是可能的,但我想至少尝试一下。我每天都会生成一份报告,并根据我在专有程序中进行的交易通过 SSRS 电子邮件订阅发送给不同的人。有些日子实际上没有交易,所以它发送一个空白的 Excel 文件。我不认为它是原生支持的,所以如果 excel 文件中没有数据,有没有办法在电子邮件正文中添加“今天没有交易”的消息?并且在某些日子里会说“附加 Excel 文件中的交易”

所以有人可以确认一下。这可能吗?还是没有?

【问题讨论】:

    标签: reporting-services ssrs-2008 report reporting


    【解决方案1】:

    实际上,这本来就是可能的,而且很棒!您正在寻找的是数据驱动订阅。您可以通过转到报告管理页面下的订阅选项卡来创建一个。有两个选项:创建订阅和创建数据驱动订阅。点击创建数据驱动订阅。

    我对这里的篇幅表示歉意,但是关于这些有很多话要说!

    我无法详细说明此处所有内容的步骤,因为它可以像您希望的那样深入设置;有很多选择! Here 是关于数据驱动订阅的 MSDN 文章,但您会发现它的帮助微乎其微。 Here 是关于如何创建一个的 TechNet 教程,但我认为您会发现它并没有像您想的那样深入。我只是通过反复试验学到了一切。

    关于这些有很多话要说,但本质上,您编写一个 SQL 查询来评估数据中的某些内容,并因此为订阅提供不同变量的不同值,例如“评论”(用 html 编写的电子邮件)、“包含报告”(真/假)和“呈现格式”等等。

    请务必注意,对于您的查询返回的每一行,都会发送一封电子邮件。因此,如果您想发送三封交易报告电子邮件,您需要确保您的查询返回包含所有适当数据的三行。

    为了您自己的启迪,这里是我的一个驱动报告的查询的编辑副本。您会注意到注释字段很长,因为它需要用 html 编写。但是 SQL 可以处理很长的字符串,只要你能正确地表述它们。

    因此,在您的情况下,您可能希望在没有交易时将 Include_Report 设为 false,然后将评论更改为关于为什么没有附加报告的正确消息。

    此查询的目的是查找服务器问题,如果发现问题,则发送一封电子邮件(不附带报告),告诉最终用户它将在稍后出现。 (服务器性能我不负责,经常出问题的人不及时修复)。

    您会注意到,SSRS 订阅中的每个输入变量都有一个字段。这样,我可以根据我能想到的任何脚本控制如何通过电子邮件发送报告。它还使设置更容易一些。我还构建了一种快速测试订阅的方法,因此我可以使用它而无需将其发送给最终用户并将其更改为发送给最终用户只需几秒钟。

    /*********************************************************/
    /*     Change @Testing to 'TEST' to have all emails      */
    /*               sent to Christopher Brown               */
    /*********************************************************/
    /*     Change @Testing to 'PROD' to have all emails      */
    /*             sent to normal recipients.                */
    /*********************************************************/
    
    Declare @Testing varchar(4) = 'TEST';
    
    With Problems as (
    
    /*Script that looks for hardware failures or anything that would
     cripple the accuracy of the report.*/
    
    )
    
    Select Case
            When @Testing = 'TEST'
            Then 'Just.Me@work.com'
                When @Testing = 'PROD'
                Then 'End.Users@work.com'
            Else 'Just.Me@work.com' 
            End as 'To'
        , Case
            When @Testing = 'TEST'
            Then 'Just.Me@work.com'
                When @Testing = 'PROD'
                Then 'IT.Group@work.com'
            Else 'Just.Me@work.com' 
            End as 'CC'
        , '' as 'BCC'
        , 'Just.Me@work.com' as 'Reply-To'
        , Case
            When @Testing = 'TEST'
                Then '***TEST***'
                Else ''
            End +
            Case
            When /*Problems Indicated*/
                Then '@ReportName - Report Delayed'
                Else '@ReportName for ' + CONVERT(varchar(10),getdate(),101)
            End as 'Subject'
        , 'Normal' as 'Priority'
        , Case
            When /*Problems Indicated*/
                Then 'False'
                Else 'True'
            End as 'Include_Report'
        , 'PDF' as 'Render_Format'
        , Case
            When /*Problems Indicated*/
                Then 'High'
                Else 'Normal'
            End as Priority
        , 'false' as 'Include_Link'
        , Case 
            When /*Problems Indicated*/
                Then '<html><Body><Font Face="Constantia","Times New Roman"><p>This Report could not be created at this time. We will send out an updated Report once the server issues have been resolved. If you have questions, please contact us.</p></Font></body></html>'
                Else '<html><Body><Font Face="Constantia","Times New Roman"><p>Attached is the Report. When the report is run on a Monday, it does one thing.</p><p>Every other weekday, the report does something slightly different. Please note that the report is scheduled to run every weekday, Monday through Friday, regardless of holiday schedules.</p><p>If you have questions about the report, please contact us.</p><p>If the attached report is empty or missing vital information, click <a href="mailto:IT.Group@work.com?Subject=Problem%20with%20Report">here</a> to notify us.</p></Font></body></html>'
            End as 'Comment'
    
    From Problems
    

    【讨论】:

    • 以防万一不明显...请注意,我正在使用 Testing 变量在它上线之前向自己发送电子邮件。这样做的一个很好的理由是,当您在单独的 TEST 和 PROD 服务器上工作时,您希望确保订阅在两台服务器上都能正常工作。我所做的是使用Testing ='TEST'部署到PROD。如果一切顺利,那么我更改Testing = 'PROD'。
    猜你喜欢
    • 2015-11-20
    • 2019-04-15
    • 1970-01-01
    • 2016-11-22
    • 2019-12-31
    • 2019-08-16
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多