2013-06-11 57 views
4

在我的項目中,我有一個對SSRS(2005)的Web引用。我想顯示可以直接將用戶呈現給出的報告的鏈接。我知道我可以提供一個鏈接,如這一個:如何通過SSRS Web服務獲取報告URL?

http://server/ReportServer/Pages/ReportViewer.aspx?/path/to/report&rs:Command=Render&rc:parameters=false&rs:format=HTML4.0

問題是我怎麼能得到從Web服務,網址是什麼?如果報告採用參數,是否有一種方法可以爲Web服務提供值,併爲我設置URL的格式?

我知道我可以建立自己的網址,但我不喜歡重塑車輪。

回答

7

有想到如何SSRS工作和你有多少時間要投資它弄亂了一些東西。

一,你可以遍歷根,但我非常懷疑你的意思。從根目錄可以添加項目,無論它們是目錄還是報告。另外,您可以直接將參數添加到Rest URI以呈現報告,您也可以輸出一個值。例如:

地址根的主要組成部分:

http:// <server>/ReportServer/Pages/ReportViewer.aspx? 

目錄的路徑:

%2fTest 

路徑報告(標記它的同名笑)

%2fTest 

什麼用它來做? (使其)

&rs:Command=Render 

放在一個paremeter並執行它,以及

&Test=Value 

把它放在一起(是的,我打電話給我的參數測試呢!):

http:// <servername>/ReportServer/Pages/ReportViewer.aspx?%2fTest%2fTest&rs:Command=Render&Test=Value 

II 。你有一個數據庫,你可以查詢遍歷的東西,但我相信MS不會很好地記錄它。通常它是在您安裝SSRS的任何服務器上名爲「ReportServer」的SQL Server數據庫。一般來說,大多數項目都在表格'dbo.Catalog'中,其中'Type'爲2。你可以從他們那裏得到他們的信息甚至參數。

三,你想全力鑽進.NET並直接與服務交談?你也可以那樣做。你需要的兩個主要業務,雖然要做到這一點:

A: http://<Server Name>/reportserver/reportservice2010 (gets info on existing items on server) 

B: http:// <Server Name>reportserver/reportexecution2005 (gets info for in code creating reports to types directly in code) 

我對這個出口在這裏另一個線程:Programmatically Export SSRS report from sharepoint using ReportService2010.asmx;但你也可能會獲得信息。一旦你創建了代理類(或者對Web服務進行了引用),你可以像.NET一樣使用代碼。這些服務完成所有的魔術,所以如果沒有它們,你無法在SSRS中真正建模。基本上我創建了一個類,通過'SERVER'你需要引用類'http:///ReportServer'。

private ReportingService2010 _ReportingService = new ReportingService2010(); 
     private ReportExecutionService _ReportingExecution = new ReportExecutionService(); 

     private string _server { get; set; } 

     public ReaderWriter(string server) 
     { 
      _server = server; 
      _ReportingService.Url = _server + @"/ReportService2010.asmx"; 
      _ReportingService.Credentials = System.Net.CredentialCache.DefaultCredentials; 

      _ReportingExecution.Url = _server + @"/ReportExecution2005.asmx"; 
      _ReportingExecution.Credentials = System.Net.CredentialCache.DefaultCredentials; 
     } 

public List<ItemParameter> GetReportParameters(string report) 
     { 
      try 
      { 
       return _ReportingService.GetItemParameters(report, null, false, null, null).ToList(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Getting Parameter info threw an error:\n " + ex.Message); 
       return new List<ItemParameter> { new ItemParameter { Name = "Parameter Not Found" } }; 
      } 
     } 

     public List<CatalogItem> GetChildInfo(string dest) 
     { 
      try 
      { 
       return _ReportingService.ListChildren("/" + dest, false).ToList(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Getting Child info of location threw an error:\n\n" + ex.Message); 
       return new List<CatalogItem> { new CatalogItem { Name = "Path Does Not exist", Path = "Path Does not exist" } }; 
      } 
     } 
+1

使用Web服務不是問題。我知道我可以從中檢索報告對象列表和參數列表。我正在尋找的是讓Web服務使用我提供給Web服務的值爲我構建該URI的方法,但似乎並不存在。我知道我可以自己建立URI,但是在我嘗試不重新發明輪子之前我寫道。 –

+0

您可以從根目錄遍歷列表,或者您可以在.NET中獲得'Catalog'項目的列表。在上面的第三部分中,'GetChildInfo'的第二個方法返回目錄或項目的數組,就像DOS中的'dir'命令一樣。通常,我要麼在數據庫中查詢'ReportServer'的信息,要麼使用實現我的類的WPF應用程序來實現我的方法,以獲取有關報告或其參數的信息。要獲得Web服務的路徑,只需將根部旁邊的部分拼湊起來,並將'&'加上命令放到最後。 – djangojazz

1

ListChildren是要走的路。您可以將第二個參數設置爲true,以在多個文件夾中有報告時返回所有目錄項目。

Dim items As CatalogItem() = rs.ListChildren(reportPath, True)