玩转SSRS第八篇---报表订阅进阶

上一篇介绍如何在SSRS中以共享目录的方式来订阅报表。由于SSRS对于邮件的方式订阅报表有些特殊,所以此篇将介绍如何以变通的方式实现报表邮件订阅。

实现邮件的方式订阅报表,我们将其拆分成三个部分。

 

我们利用SQL Server Agent生成job来以固定周期触发一个流程。然后在这个流程中,首先实现一个app将报表生成到一个指定目录下,然后再调用另外一个程序,根据配置文件,把报表发送给指定邮件组的用户。

 

首先,创建生成报表pdf的应用程序。

生成pdf的主要思路是用一个winform应用程序添加一个reportviewer控件,然后直接将报表生成pdf格式。

打开Visual Studio 2012,创建一个winform应用程序。

玩转SSRS第八篇---报表订阅进阶_第1张图片

在窗体上添加ReportViewer控件。

玩转SSRS第八篇---报表订阅进阶_第2张图片

然后,在数据库中建立加几张表,用来保存报表控件的配置信息,以及邮件发送的配置信息。这三张表的结构可以根据实际情况定义,在本片中,ReportBase主要保存ReportServer和ReportPath两条信息,用来定位一张服务器端报表。EmailBase主要用来记录发送邮件所有的用户名和密码以及smtp服务器所在地址。ReportTo用来记录邮件发送给谁。

玩转SSRS第八篇---报表订阅进阶_第3张图片

创建好基础表之后,回到项目,添加一个LINQ to SQL Classes(当然你可以选择Entity Data Model)。

玩转SSRS第八篇---报表订阅进阶_第4张图片

连接到刚才建立的数据库。

玩转SSRS第八篇---报表订阅进阶_第5张图片

将记录有报表定义的表拖拽到LINQ TO SQL设计界面中,在这里系统将根据数据表的结构生成对应的类。

玩转SSRS第八篇---报表订阅进阶_第6张图片

回到数据表里,为保存报表配置信息的表中添加一行数据。ReportServer和ReportPath的配置跟前面介绍的ReportViewer控件的属性一致。这里我们连接前几篇中创建的报表。当然这里也可以选择一个你已经部署的另外一张报表。

玩转SSRS第八篇---报表订阅进阶_第7张图片

回到项目,为项目添加如下代码。

玩转SSRS第八篇---报表订阅进阶_第8张图片

代码首先将表中的配置数据读取出来,然后赋给ReportViewer控件的相关属性(LINQ真的很好用)。

为报表设置好属性后,调用Export里面的方法让ReportViewer控件直接把报表的内容生成为PDF文件。

到这里,报表生成PDF开发完毕,接下来创建邮件发送程序。

邮件发送程序基本不需要UI,所以直接创建一个Console Application控制台应用程序。

玩转SSRS第八篇---报表订阅进阶_第9张图片

同样为项目添加LINQ TO SQL文件,将邮件配置表和发送配置表拖拽到LINQ TO SQL界面中。

玩转SSRS第八篇---报表订阅进阶_第10张图片

将如下代码加入到Main方法中。

玩转SSRS第八篇---报表订阅进阶_第11张图片

这段代码将配置信息读取出来之后,使用SMTP相关类,将邮件发送出去。

相关的应用程序建立完毕,接下来创建相应的作业来将这两个程序"串"起来。

打开SSMS,连接到数据引擎服务,展开SQL Server Agent,在Job目录下右键单击,选择New Job…创建一个新的作业。

玩转SSRS第八篇---报表订阅进阶_第12张图片

在General界面中为Job取个名称。

玩转SSRS第八篇---报表订阅进阶_第13张图片

在Steps界面下点击New,依次新建两个步骤。

玩转SSRS第八篇---报表订阅进阶_第14张图片

将前面的两个程序放置在指定的目录中,然后配置job的steps。

作业的第一步为生成pdf,运行本章建立的第一个程序。

玩转SSRS第八篇---报表订阅进阶_第15张图片

作业的第二步是根据配置发送邮件。

玩转SSRS第八篇---报表订阅进阶_第16张图片

两步配置好之后的结果大致应该如下图所示。

玩转SSRS第八篇---报表订阅进阶_第17张图片

接下来点击Schedules,为作业创建运行周期,点击New。

玩转SSRS第八篇---报表订阅进阶_第18张图片

在New Job Schedule中可以看到可以生成任意周期的Schedule。

玩转SSRS第八篇---报表订阅进阶_第19张图片

作业创建完毕后,可以手动触发测试一下运行效果。右键刚才建立的作业名称,然后点击Start Job at Step…。

玩转SSRS第八篇---报表订阅进阶_第20张图片

弹出界面指定从哪一步开始运行,直接默认第一步点击Start。

玩转SSRS第八篇---报表订阅进阶_第21张图片

运行完毕后,登陆邮箱,可以看到发送过来的邮件。

玩转SSRS第八篇---报表订阅进阶_第22张图片

邮件的具体内容,以及包含的报表附件。

玩转SSRS第八篇---报表订阅进阶_第23张图片

 

以上,邮件订阅报表的方式介绍完毕。根据实际情况,在实际项目中也可以添加更多的配置信息。在接收人列表的配置中,通常来说一个用户一个用户的方式添加会很麻烦而且也很繁琐,所以建议以邮件组的方式来维护。

如果报表中有参数,可以选择两种方法,一个是为参数都设置默认值,这是最简单的方法,让报表默认生成的就是最新的数据。也可以通过编码的方式把参数添加进ReportViewer控件,具体方法可以参考前两篇的介绍。

另外在邮件发送部分,也可以不通过自动以程序,而是通过SQL Server Database Mail,比如:

EXEC msdb.dbo.sp_send_dbmail

@profile_name = 'Default',

@recipients = '[email protected]',

@subject = 'Daily Report',

@file_attachments='d:\report.pdf'

 

 

 

附 :

演示代码及数据库文件下载:

http://files.cnblogs.com/aspnetx/DEMO.zip

你可能感兴趣的:(报表)