玩轉SSRS第八篇---報表訂閱進階


上一篇介紹如何在SSRS中以共享目錄的方式來訂閱報表。由於SSRS對於郵件的方式訂閱報表有些特殊,所以此篇將介紹如何以變通的方式實現報表郵件訂閱。

實現郵件的方式訂閱報表,我們將其拆分成三個部分。

 

我們利用SQL Server Agent生成job來以固定周期觸發一個流程。然后在這個流程中,首先實現一個app將報表生成到一個指定目錄下,然后再調用另外一個程序,根據配置文件,把報表發送給指定郵件組的用戶。

 

首先,創建生成報表pdf的應用程序。

生成pdf的主要思路是用一個winform應用程序添加一個reportviewer控件,然后直接將報表生成pdf格式。

打開Visual Studio 2012,創建一個winform應用程序。

在窗體上添加ReportViewer控件。

然后,在數據庫中建立加幾張表,用來保存報表控件的配置信息,以及郵件發送的配置信息。這三張表的結構可以根據實際情況定義,在本片中,ReportBase主要保存ReportServer和ReportPath兩條信息,用來定位一張服務器端報表。EmailBase主要用來記錄發送郵件所有的用戶名和密碼以及smtp服務器所在地址。ReportTo用來記錄郵件發送給誰。

創建好基礎表之后,回到項目,添加一個LINQ to SQL Classes(當然你可以選擇Entity Data Model)。

連接到剛才建立的數據庫。

將記錄有報表定義的表拖拽到LINQ TO SQL設計界面中,在這里系統將根據數據表的結構生成對應的類。

回到數據表里,為保存報表配置信息的表中添加一行數據。ReportServer和ReportPath的配置跟前面介紹的ReportViewer控件的屬性一致。這里我們連接前幾篇中創建的報表。當然這里也可以選擇一個你已經部署的另外一張報表。

回到項目,為項目添加如下代碼。

代碼首先將表中的配置數據讀取出來,然后賦給ReportViewer控件的相關屬性(LINQ真的很好用)。

為報表設置好屬性后,調用Export里面的方法讓ReportViewer控件直接把報表的內容生成為PDF文件。

到這里,報表生成PDF開發完畢,接下來創建郵件發送程序。

郵件發送程序基本不需要UI,所以直接創建一個Console Application控制台應用程序。

同樣為項目添加LINQ TO SQL文件,將郵件配置表和發送配置表拖拽到LINQ TO SQL界面中。

將如下代碼加入到Main方法中。

這段代碼將配置信息讀取出來之后,使用SMTP相關類,將郵件發送出去。

相關的應用程序建立完畢,接下來創建相應的作業來將這兩個程序"串"起來。

打開SSMS,連接到數據引擎服務,展開SQL Server Agent,在Job目錄下右鍵單擊,選擇New Job…創建一個新的作業。

在General界面中為Job取個名稱。

在Steps界面下點擊New,依次新建兩個步驟。

將前面的兩個程序放置在指定的目錄中,然后配置job的steps。

作業的第一步為生成pdf,運行本章建立的第一個程序。

作業的第二步是根據配置發送郵件。

兩步配置好之后的結果大致應該如下圖所示。

接下來點擊Schedules,為作業創建運行周期,點擊New。

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

作業創建完畢后,可以手動觸發測試一下運行效果。右鍵剛才建立的作業名稱,然后點擊Start Job at Step…。

彈出界面指定從哪一步開始運行,直接默認第一步點擊Start。

運行完畢后,登陸郵箱,可以看到發送過來的郵件。

郵件的具體內容,以及包含的報表附件。

 

以上,郵件訂閱報表的方式介紹完畢。根據實際情況,在實際項目中也可以添加更多的配置信息。在接收人列表的配置中,通常來說一個用戶一個用戶的方式添加會很麻煩而且也很繁瑣,所以建議以郵件組的方式來維護。

如果報表中有參數,可以選擇兩種方法,一個是為參數都設置默認值,這是最簡單的方法,讓報表默認生成的就是最新的數據。也可以通過編碼的方式把參數添加進ReportViewer控件,具體方法可以參考前兩篇的介紹。

另外在郵件發送部分,也可以不通過自動以程序,而是通過SQL Server Database Mail,比如:

EXEC msdb.dbo.sp_send_dbmail

@profile_name = 'Default',

@recipients = 'microsoftbi@163.com',

@subject = 'Daily Report',

@file_attachments='d:\report.pdf'

 

 

 

附 :

演示代碼及數據庫文件下載:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM