上方廣告

Lady Kukki 手作糖霜餅乾

2013年11月4日 星期一

程式中使用ReportingService發送報表

Reporting Service一直不是我的強項,但最近因為需要發送一個報表給大老闆,因此稍為查看了一下Reproting報表的發送方式,意外的發現了一個先前自己都沒有用過的方式,一般而言,我們在使用報表伺服器來設定發送電子郵件都是使用訂閱的方式來傳送(下圖所示)。


但若現在有ㄧ個需求是,每日執行一個SQL Procedure後根據條件來決定要不要發送電子郵件給老闆的時候,那單純的使用報表伺服器的就沒有辦法達到我剛剛所述的功能,當然也可以使用程式來執行,但這樣若要你在一個小時交出這樣的功能的話可能就有困難了。因此現在就有一個更快速的選擇,使用報表伺服器內建的Procedure來幫我們完成這件事啦。
exec ReportServer.dbo.AddEvent @EventType='TimedSubscription', @EventData='0f155076-d0a1-4f4c-bc3f-751d9450cfd2'

上面語法主要是運用報表伺服器來幫我們執行發送信件的觸發程式,當然要這樣使用之前,必需要先在報表伺服器內設定好訂閱的對象等參數設定。至於參數@EventData的識別碼,可以到訂閱好的內容中打開網址列查看,如下圖。




當然若覺得透過網頁來查詢ID有點麻煩的話,也可以到ReportServer的DB直接查詢,相關語法請參閱↓
select a.name as ReprotName, --報表名稱
 d.eventType, --事件類型
 d.eventData as EventDataID --事件識別碼
from dbo.Catalog a
inner join dbo.DataSource b on a.itemID=b.itemID
inner join dbo.ReportSchedule c on a.itemID=c.reportID
inner join dbo.Schedule d on c.scheduleID=d.scheduleID


附件是胡百敬老師針對2008版本的報表伺服器管理,可以加減參考一下
MS_SQL_Server2008_Report_Service_Management_R2