[收藏]利用SQL Server Reporting Services 從應用程式產生方便使用的報表
來源:互聯網
上載者:User
server|services|程式 利用 SQL Server Reporting Services 從應用程式產生方便使用的報表 發布日期: 09/03/2004 | 更新日期: 09/03/2004
John C. Hancock
http://www.microsoft.com/china/msdn/library/data/sqlserver/SQLServerReportServ.mspx
本文討論:•
Reporting
•
設計和部署報表
•
使用 Reporting Services 的 Web 服務
•
保證報表的安全
本文使用下列技術:
SQL Server、ASP.NET、Visual Basic .NET
代碼下載:
SQLServerReportingServices.exe(222KB)
本頁內容Reporting Services 概述設計第一個報表部署和測試將報表添加到 Web 應用程式將報表嵌入到 Web 應用程式中保證報表的安全使用 Reporting Services Web 服務訂閱報表接下來該怎麼做?
靈活的報表功能是大多數商務應用程式的一個要求,這些報表功能在整合到 Web 應用程式中之後用途更加廣泛。利用 SQL Server® 2000 Reporting Services 的最新版本,您可以輕鬆地具有來自各種資料來源的報表產生功能。在本文中,我將介紹使用 Visual Studio® 和 Reporting Services 來編寫報表,並示範如何將報表整合到 Web 應用程式中。
Reporting Services 是基於伺服器的報表產生平台,該平台構建在 .NET Framework 上並與 SQL Server 2000 整合在一起,因此您可以使用一個擴充的基於 Web 服務的 API 將豐富的報表產生功能整合到應用程式中。儘管報表伺服器使用 SQL Server 作為報表的儲存庫,但利用 OLE DB、ODBC 或 ADO.NET 提供者的任何資料來源都可以用來為報表提供資料,這就使得 Reporting Services 成為在各種企業環境中產生報表的極佳工具。
Reporting Services 是作為 SQL Server 2000 的一部分而授權的,因此如果您有已授權的 SQL Server 的副本,則可以在同一伺服器上運行 Reporting Services 而無需支付額外的許可證費用。如果您決定在獨立的、尚未經 SQL Server 授權的電腦(例如,Web 服務器)上運行 Reporting Services,您將需要購買額外的 SQL Server 許可證。
要開始使用 Reporting Services,您可以下載位於 SQL Server 2000 Reporting Services 的 120 天試用版軟體,它還包括有關如何獲得該產品的安裝媒體的說明。在安裝該產品時,請確保選中包括樣本報表的選項,因為我要將這些報表整合到本文的 Web 應用程式中。
Reporting Services 概述
Reporting Services 報表設計使用新的 Visual Studio .NET 2003 報表設計師,在安裝有 Visual Studio 的同一電腦上安裝了 Reporting Services 後,該設計器就可以使用。設計器以新的基於 XML 報表定義語言 (RDL) 輸出報表布局和資料訪問的說明,而 RDL 檔案會發布到報表伺服器。如果您希望為使用者提供創作功能,也可以使用第三方的報表設計師。
管理員可以使用基於 Web 的報表管理器來管理發行的報表,並且可以執行一些任務,例如,保證某些使用者組報表的安全或更改已部署報表的資料來源連接字串。使用者也可以使用報表管理器來瀏覽和查看報表;但是很多公司傾向於使用 URL 請求或 Reporting Services Web 服務,將報表查看直接整合到它們現有的內部 Web 網站或應用程式中。
在部署報表專案後,您就可以進行測試了。已部署到伺服器的每個報表都具有唯一的路徑,該路徑可以用於在瀏覽器中顯示報表。例如,要顯示您建立的第一個報表,請開啟瀏覽器並導航到 http://MyServer/ReportServer?/Report+Project1/Products+Report。這會以 HTML 格式呈現報表並在頁面的頂端顯示一個工具列,以便使您可以對報表進行翻頁、更改縮放比例,甚至以各種其他格式(例如,PDF)查看報表。
其中最有用的一個參數就是 rs:Format 參數,它用於指定呈現報表的格式。這使您可以包括不需要顯示在 HTML 中的報表,還可以使用諸如 PDF 甚至是 XML 的格式。其他常用參數是 rs:Command,指示出要應用到您所指定的路徑的操作。例如,rs:Command=Render 將呈現一個報表,而 rs:Command=ListChildren 將列出檔案夾中所有項。
如果在使用者查看報表時,不再使用彈出新的瀏覽器視窗,您可能希望實際地將報表嵌入到自己的 Web 頁中。最簡單的方法就是在 Web 頁上使用 IFRAME,並使用我介紹過的基於 URL 的相同技術來設定 SRC 屬性。如果您使用這種技術,切記要將 rc:LinkTarget 參數設定為 IFRAME 的名稱,以避免當使用者單擊報表的連結時在架構外彈出任意一個架構。
如果您以前設計過 ASP.NET 的伺服器控制項,您可能會認為 IFRAME 技術並不十分完美,因為它要求 Web 開發人員理解 Reporting Services 的 URL 參數文法才能構建適當的 SRC 字串。構建一個封裝有所有參數並使開發人員可以簡單地設定諸如 ReportPath 和 Zoom 之類的參數的伺服器控制項難道不是一個更好的想法嗎?
Reporting Services 非常方便地附帶了名為 ReportViewer 的樣本(安裝到 \Reporting Services amples\Applications\ReportViewer 目錄),它可以實現這個想法。該控制項封裝了 IFRAME 和 URL 訪問參數邏輯,並提供了一個更簡單的用於將報表嵌入到應用程式中的方法。要使用該控制項,請開啟並構建 ReportViewer 解決方案,然後通過瀏覽到 ReportViewer 解決方案的 bin 目錄中的 ReportViewer.dll,切換到您的 Web 應用程式並將該控制項添加到工具箱中。
您可以使用該控制項將嵌入報表添加到儀表板應用程式中。將控制項添加到 Web 頁,設定高度和寬度屬性並添加以下代碼以便在頁面中顯示一個報表:
Private Sub Page_Load(ByVal sender As System.Object, ByVal _ e As System.EventArgs) Handles MyBase.Load If Not IsPostBack Then ReportViewer1.ServerUrl = "http://MyServer/ReportServer" ReportViewer1.ReportPath = "/SampleReports/Sales Order" & _ "Detail&SalesOrderNumber=so8153" ReportViewer1.Toolbar = ReportViewer.multiState.False ReportViewer1.Zoom = "75" End IfEnd Sub
返回頁首保證報表的安全
Reporting Services 安全性使用熟悉的基於角色的模型。使用者和組可以分配給諸如 System Administrator 或 Browser 之類的角色,特定角色的所有成員都將允許執行為該角色定義的操作。
報表管理器用於執行與安全性相關的任務,例如,分配使用者角色或修改項(例如,報表)的許可權等。預設情況下,Administrators Windows 組同時是所有檔案夾的 System Administrator 和 Content Manager 的成員。為了擴充報表訪問到其他使用者,使用者帳戶或組必須添加到諸如 Browser 的角色中。這通常是在檔案夾級設定的,同時也可以針對單獨的報表進行重寫。
除了保護對報表的訪問外,管理員還必須決定如何將報表串連到來源資料庫。可以配置資料來源使用整合的安全性,以便可以使用當前的使用者帳戶進行資料庫連接。此外,還可以定義 Windows? 或 SQL Server 使用者名稱和密碼,並將其安全地儲存在報表伺服器資料庫中。這種方法要求報表運行在無使用者互動(例如,訂閱所涉及的互動)的情況下。
返回頁首使用 Reporting Services Web 服務
到目前為止,我一直使用的 URL 存取方法提供了一種快速便捷的方式來查看報表並指定參數,但是它不能提供對所有可用的報表管理功能的訪問。Reporting Services 還附帶了一個具有豐富功能的 API,為您提供通過 Web 服務對進階功能的訪問。例如,該 Web 服務包括用於管理報表的資料來源資訊的方法或者枚舉某個檔案夾中所有項的方法。
我將使用 Web 服務將報表的動態列表添加到儀表板應用程式中。為此,您將需要使用 Add Web Reference 將一個 Web 服務參考添加到應用程式中。指定到 Web 服務的路徑,如下所示:
Private Sub LoadSampleReports() Dim rs As New ReportingService rs.Credentials = System.Net.CredentialCache.DefaultCredentials Dim item As CatalogItem For Each item In rs.ListChildren("/SampleReports", False) If item.Type = ItemTypeEnum.Report Then DropDownList1.Items.Add(New ListItem(item.Name, item.Path)) End If NextEnd Sub
要更改樣本報表的資料來源,請開啟“Report Manager | Sample Reports”,然後單擊 AdventureWorks 資料來源。該資料來源由所有樣本報表共用,因此對它所做的任何更改將會影響所有報表。選中“Credentials stored securely in the report server”選項,指定一個具有訪問 AdventureWorks 資料庫許可權的帳戶的有效域使用者名稱和密碼,選中“Use as Windows credentials when connecting to the data source option”,然後單擊“Apply”按鈕。請注意,這種更改意味著指定的帳號將始終用於串連該資料庫,不管實際上是哪個使用者運行該報表。
因此,您已經準備好深入研究並查看提供對訂閱訪問的 Web 服務 API。使用 Web 服務的這一部分比使用 List 或 Render 方法要多一些挑戰,主要原因在於可用選項的數量。我將要使用的方法是 CreateSubscription,它也屬於 ReportingService 類。有關該方法的參數的詳細說明,請參閱 ReportingService 類,但最基本的是您需要指定要訂閱的報表、產生計劃(例如,每周一早晨或每月的最後一個周五)、電子郵件選項(包括電子郵件地址)以及所有報表參數值。