2011-05-12 181 views
0

我一直在通過報表服務器遠程運行報表的WebForms應用程序中試用ReportViewer控件。感覺就像ReportViewer中的參數界面是有限的。我認爲另一種選擇是創建我自己的Web表單控件,它將參數傳遞給ReportViewer並繞過默認參數界面。我對SSRS的經驗非常少,我想知道這是一個可行的解決方案,還是需要麻煩。 (即新的報告可能導致不得不創建新的UI)。我想我的問題是報表查看器中的標準用戶界面是否可以接受企業級應用程序。我不是在談論分頁控件,更多的是關於下拉列表和複選框列表。ReportViewer Web控件是否適用於企業Web應用程序

回答

3

如果您的報告通常使用簡單的參數集,則默認界面可以很好地工作(特別是如果您的用戶更精明)。但是更大更復雜的參數集可能會在默認界面中迅速變得難以逾越(如果您不希望用戶如此精明,這可能會是一個更大的問題)。

我遇到了一大堆報告類似的問題。有些可能非常簡單(I.E.,沒有參數或簡單的日期範圍),有些可能會過於複雜(25+參數)。

我們到達的解決方案是編寫一個ASP.NET報表菜單應用程序,該應用程序從大多數報表的SSRS中檢索參數並將其動態呈現給用戶。有些報告對此太複雜了,所以我們進一步寫了WebUserControls,進一步簡化了用戶的參數。這樣,大多數報告並不需要額外的干預,對於那些做的,我們有一個輕鬆創建包裝的框架。

下面是如何獲得的參數通過SSRS Web服務給定的報告爲例:

'ReportingService is a reference to the WebService 
Dim rs As New ReportingService 
     rs.Credentials = System.Net.CredentialCache.DefaultCredentials 
     Dim Reports() As ReportingService.CatalogItem 
     Reports = rs.ListChildren(ConfigurationManager.AppSettings("ReportPath"), True) 

     For Each item As ReportingService.CatalogItem In Reports 

      Dim historyID As String = Nothing 
      Dim forRendering As Boolean = True 
      Dim values As ReportingService.ParameterValue() = Nothing 
      Dim credentials As ReportingService.DataSourceCredentials() = Nothing 
      Dim params As ReportingService.ReportParameter() = Nothing 

      If item.Type = ReportingService.ItemTypeEnum.Report And item.ID = ReportID Then 
       params = rs.GetReportParameters(item.Path, historyID, forRendering, values, credentials) 
       Dim i As Integer = 0 
       For Each param As ReportingService.ReportParameter In params 
        'Display the parameter or add to a collection or whatever 
       Next 
      End If 
     Next 

您可以用上面的方法來獲取所有的參數,然後顯示出來,您看合適。然後,您所要做的就是收集結果,驗證它們,並將它們傳遞給ReportViewer。

+0

謝謝,這是非常有益的。我想關於默認用戶界面的好處是,它可以處理參數級聯的常見場景。 – 2011-05-13 12:12:20

+0

@ek_ny在編寫新的UI時,您肯定需要考慮這一點。但是,這樣做可以進一步實現可定製性(當然,以實現新功能花費的時間爲代價)。我覺得缺乏默認UI的重要事情是驗證工具。 – 2011-05-13 13:35:28

相關問題