2014年4月1日 星期二

[SQL Server 2008R2][SSRS] URL Access 概說

SSRS 可使用 URL Access 的方式,將報表嵌入應用程式之中,讓 SSRS 在開發有了延伸能力上的彈性。在 Resporting Services 2008 R2 提供了多種開發 API 之中,最簡便的一種稱之為「URL Access」,透過 URL 以 HTTP GET 以及 POST 的方式即可呼叫 SSRS,以取得指定的報表內容,並轉譯為所需要的報表格式。在應用程式整合報表服務時,只要利用程式直接組合出 URL 字串,即可存取對應的報表物件,甚至可以透過 Session 以及認證的管理,在實作單一登入整合的需求。
使用 URL Access 的優點:

  • 可自行客製化瀏覽報表介面,並與網頁程式整合
  • 語法直覺易懂
  • 屬性設定比傳統報表管理員介面更加豐富
  • 最節省開發人力成本的整合報表方案


但還是有其缺點:

  • 參數透過 URL 傳遞,若未透過 HTTPS 傳遞,可能有安全性的疑慮
  • 參數過多、使用複選或是中文值作為參數時,會因 URL 超過預設長度 ( 一般是 256 字元 ),而造成失敗。目前新版的報表檢視器已經有所改良,畫面上只呈現首次登入時的 URL,因此發生失敗的機會已大幅減少。


URL Access 的句型結構
http://報表伺服器/虛擬目錄?[/路徑資訊]&prefix:param=value[&prefix:param=value]...n]

URL Access 的通訊協定可以是 HTTP 或 HTTPS。

報表伺服器
報表伺服器所在電腦主機名稱,可以是 IP 位置、主機名稱、或包含完整網域的主機名稱,需視網路架構以及報表伺服器設定值而定。

虛擬目錄
報表伺服器下的虛擬目錄名稱。

?
放在虛擬目錄名稱之後,標示報表物件屬性宣告的開始。

[/路徑資訊]
存取報表伺服器資料庫的完整路徑名稱。

&
分開各個參數名稱及值的符號。

Prefix
參數前置詞,為選擇性項目,用來指示報表伺服器執行特定的動作,假如語法中的參數前面沒有包括參數前置詞,會被認為是報表參數。

  • rc:指定報表轉譯模組所需的設定資訊,以及控制報表服務 HTML 瀏覽器的功能設定。
  • rs:指定執行報表伺服器命令的所需條件。
  • dsu:指定存取資料來源的使用者名稱。
  • dsp:指定存取資料來源的密碼。
Param
報表參數名稱。

Value
報表參數值。



例如:
http://10.50.12.119/ReportServer?/Reports/Report3
不帶入任何參數,沒有指定數值,若原報表有設定預設值,則會自動帶入預設值。而 URL 會自動轉換為 http://10.50.12.119/ReportServer/Pages/ReportViewer.aspx?/Reports/Report3
所以使用轉換後的 URL 也可以組合出 URL Access 的網址


http://10.50.12.119/ReportServer?/Reports/Report3&YEAR=2010
帶入YEAR參數,參數值為 2010


對 SSRS 而言,參數大小寫是有差異的
錯誤訊息會如下

Reporting Services 錯誤

  • 嘗試設定未於此報表中定義的報表參數 'year'。 (rsUnknownReportParameter)

SQL Server Reporting Services



在使用 URL Access 傳遞參數時,有幾點注意事項:

  • 如果要傳遞的參數為空值,需使用「參數名:isnull=true」的句型結構,例如:YEAR:isnull=true。
  • 傳遞報表參數前方需要加入「&」。
  • 對 SSRS 而言,參數大小寫是有差異的。
  • 參數值不論是字串或數值,都不用加上單引號或雙引號。
  • 如果參數複選時,則是需要將選項一再重複,如:http://10.50.12.119/ReportServer?/Reports/Report3&YEAR=2010&YEAR=2011&YEAR=2012
  • 傳遞報表參數的數量必須與原本報表的參數數量一致,如原本報表有三個參數,用 URL 傳遞時也必須有三個參數,除非參數已經有預設值且提示屬性 ( Prompt Property ) 為 False,才能在 URL 省略放置此報表參數。
  • 傳遞參數時要注意參數的型別,如日期型別、整數型別或者字串型別,例如,客戶 ID 原本設定為整數型別,若傳遞時放入英文字母,則執行時會傳回錯誤訊息。


※傳遞報表參數時,如果直接輸入中文參數值或參數是中文或路徑資訊有中文,都會造成 URL 無法解析而回傳錯誤結果。


因此,建議在設計表時,參數的顯示內容可以使用中文,但是實際傳遞的參數值則用數字或是英文字母。如果不得已參數必須使用中文時,可在前端系統組成 URL Access 的階段中,使用 System.Web.HttpUtility.Urlencode ( 中文參數值 ) 的方式將中文參數值轉換為 UNICOD,如此就能正常傳遞參數內容。



報表物件存取
除了瀏覽報表外,URL Access 還可以用來存取報表伺服器中的各項物件,包括

  • 目錄 ( Folders )
  • 資料來源 ( Data Sources )
  • 資源 ( Resources )
  • 報表 ( Reports )

存取物件的種類由指定傳遞命令參數 ( Command Parameter ) 的方式來達成。基本語法為 rs:Command=<命令參數>,命令參數可用值如下:

  • GetDataSourceContents:檢視資料來源內容,會以 XML 格式顯示。
  • GetResourceContents:檢視資源物件內容。
  • ListChildren:列出目錄下的物件清單,每一項物件都有超連結可再點擊檢視其內容。
  • Render:在瀏覽器上顯示報表。

參考:
http://msdn.microsoft.com/zh-tw/library/ms152835.aspx

沒有留言: