2009-09-15 67 views
12

是否可以創建一個自定義的Web前端來運行SSRS報告?帶自定義Web UI的SSRS

我們有一個現有的跨瀏覽器Web前端,用於收集報告輸入(對於非SSRS平臺),我們將看成繼續使用SSRS。它包括已經在內部開發的特定於域的UI控件,並且沒有任何內容與SSRS緊密相關。

我們不需要做類型感知控件的動態呈現 - 儘管我想RDL可以幫助告訴我們報告需要什麼參數(以及它們的類型) - 但是我們的確需要比Report Manager提供的更多的東西。

本質上,我們想定製/替換報表管理器生成的輸入收集UI。我們也需要一些小小的品牌。將報告管理器完全取消(我的意思是外部)並通過我們自己的ASP.NET應用程序直接與SSRS Web服務進行交互會更容易嗎?

我是新來的報道地形,我找不到任何有關這方面的信息。我們正在使用SQL Server 2005 Reporting Services。

+0

嗨,你是怎麼結束了這一點,我試圖做同樣的事情,但我必須要提供tenantId在後面的代碼,否則將在泄漏的安全的數據來驗證,但不對客戶的風險,有什麼想法嗎 ?謝謝 – Mathematics 2016-02-19 16:05:34

回答

9

是的,這是可能的。我們在兩年前實施了一個與此類似的解決方案,當時我們對OOTB的參數選擇感到不滿。

基本上我們有一個用戶交互的自定義​​ASP.NET應用程序。當第一頁加載時,會顯示該用戶可用的報告列表(通過Web服務從ASP.NET應用程序到SSRS的通信以及身份模擬,以便列表被安全修剪)。如果自定義ASP.NET應用程序位於與報表服務器不同的服務器上,則需要在這裏使用Kerberos。

用戶選擇報表後,會顯示參數選擇屏幕(仍位於自定義ASP.NET應用程序中)。當他們選擇參數並單擊「生成報告」時,某些JavaScript會將每個參數的輸入標記隨時添加到HTML表單(隱藏於用戶),然後執行HTTP POST到SSRS Web服務器。

然後,我們使用OOTB報表查看器來顯示報表,但它是在框架中託管的,以便屏幕的頂部允許用戶被包含到自定義web應用程序中。這使他們能夠快速返回並更改參數。

我們採取了這種方法,因爲我們擁有一個全球性組織,但我們的應用程序是集中託管的 - 我們希望所有用戶的表現儘可能好。我們發現報表查看器在性能方面非常出色,但OOTB的OOTB參數選擇對於高延遲連接非常糟糕 - 大量回傳和傳輸的流量過多。

另一個訣竅 - 我們在報告中使參數「隱藏」,以便參數不顯示在報告查看器中。

編輯:我們在此基礎上做了SSRS 2005,最近升級到了SSRS 2008,最小麻煩。

+0

只是爲了澄清:發佈HTTP POST的表單只是針對'iframe'?有沒有任何資源可以幫助你弄清楚(書籍,文檔等)?我認爲SSRS Web服務層是自定義應用程序生成報告的更「標準」方式,而不是HTTP POST。有趣的知道這個把戲。 – JPot 2009-09-16 00:26:01

+1

這裏是關於通過URL參數訪問報告的MSDN文章 - http://msdn.microsoft.com/en-us/library/ms155391.aspx 我們最終做HTTP POST的原因(同樣的命令適用)是爲了避免有大量選定參數的問題和1024(?)URL長度限制。 我只是再次檢查,我們的表單是在另一個隱藏的框架,所以目標是它自己的框架,我們只是發佈窗體時調整幀的大小。 我們使用Web服務來獲取用戶可用的報告列表,並使用本地報告查看器來顯示報告。用戶然後可以與其正常交互。 – Harv 2009-09-16 03:05:49

3

我們所做的是構建了一個UI來收集標準和格式(PDF,XLS等)數據,並使用SSRS Web Services來激發報告。

它使我們能夠完全按照您在報告中使用您自己的UI &品牌的方式進行操作。

本質上,您將RDL名稱和一組報告參數傳遞給webservice,它將返回HTML(或您指定的任何格式)。

的一些陷阱包括有:當您使用SSRS的列排序重新寫網址,且如果你想支持PDF/DOC/XLS /等設置自己的MIME類型...

+0

這個UI相對靜態嗎?即,根據報告的參數,輸入控件是「硬編碼」還是動態創建的?好奇... – JPot 2009-09-15 03:48:22

+1

每個報告都有自己的一組輸入控件(有些報告要求比其他標準更多的標準)。因此,我們所做的是創建了一個自定義控件,用於管理每個自定義aspx頁面和SSRS之間的所有通信。這樣,創建報告所需的一切就是輸入的定義,輸入數據的收集以及將這些數據傳遞到我們的自定義Reporting Services控件中。 我們的每個報告都是一個新的aspx頁面,它有自己的一組輸入控件。某些輸入控件根據用戶的訪問權限和配置顯示/隱藏。 – 2009-09-15 04:06:22

4

如果我沒有理解如果你正確的話,你會想使用ReportViewer來渲染報告。

您可以實現輸入採集,無論如何,然後簡單地將輸入的報告作爲參數:

//the report classes are in the namespace: Microsoft.Reporting.WebForms 
Collection<ReportParameter> paramList = new Collection<ReportParameter>(); 
string reportPath = ApplicationInfo.ScorecardReportPath; 
paramList.Add(new ReportParameter("UID", "5")); 

ReportViewer1.ProcessingMode = ProcessingMode.Remote; 
ReportViewer1.ServerReport.ReportServerUrl = new Uri("http://servername/ReportServer"); 
ReportViewer1.ServerReport.ReportPath = reportPath; 
ReportViewer1.ServerReport.SetParameters(paramList); 
ReportViewer1.ServerReport.Refresh(); 

中的ReportViewer是你可以拖放到你的頁面上的控件:

<rsweb:ReportViewer id="ReportViewer1" runat="server" documentmapwidth="175px" 
font-names="Verdana" font-size="8pt" promptareacollapsed="true" width="100%" 
zoommode="Percent" zoompercent="100"/> 

我已經使用這種方法將reportviewer嵌套在母版頁中包含的頁面中。它允許顯示菜單/頁眉/頁腳。