2009-02-20 92 views
1

有沒有辦法在登錄時設置會話變量,然後可用於報告?在Reporting Services 2008中存儲和檢索會話變量

我們有一個報告服務服務器,用於移動和非規範化來自我們交易系統的數據以進行報告。爲了讓我們的用戶使用交易系統中的相同用戶名和密碼登錄,我們已經設置了自定義表單身份驗證,經過大量的試驗和錯誤,終於可以正常工作。另外,我們有權訪問我們的交易系統,以便用戶權限的任何更改立即反映在Reporting Services中。

現在我們的問題是,我們想添加一些附加功能,例如根據用戶權限/組在我們的事務系統中鎖定參數。我們已經找到了一種方法來做到這一點,但效率很低,基本上我們已經存儲了一些程序,它們會查詢我們的事務系統來檢查訪問。問題是這些查詢通常會針對每個報告請求運行,即使答案不太可能改變。如果能夠訪問會話級別的數據,並且可以在登錄過程中設置一次,然後從報告中訪問,那就太好了。

回答

1

使用反射,您可以訪問正在運行的作業的HTTPContext,從中可以獲取Session對象(取決於您的設置)。我們必須使用這種方法來處理與安全性有關的稍微不同的場景:如果您的報告使用多個數據集,則只有第一個獲取正確的用戶上下文。這個破解允許你自己獲取HTTPContext(我們在自定義數據層中使用)。從MSDN論壇文章here

摘錄:

using System.Reflection; 
using Microsoft.ReportingServices.Diagnostics; 

// This is declared outside of a method body for improved performance, 
// since this reflection bit only needs to run once 

private static FieldInfo contextField = 
    typeof(RunningJobContext).GetField("m_optionalWebCtx", 
        BindingFlags.Instance | BindingFlags.NonPublic); 

// Call this in your method 
HttpContext context = (HttpContext)contextField.GetValue(Globals.JobContext); 
0

你肯定有更多的靈活性將訪問到一個asp.net網站,並使用ReportViewer控件。

請確保您有相同的版本既您的開發機上的IIS機器上的控制,版本9.0.0.0對VS 2008

然後你必須得到IIS和之間的權限/訪問報告服務器設置,但這並不難。

此時,您可以更多地控制設置,隱藏和控制所有參數或提供自己的參數控制。