[ASP.NET]Reporting Service引用自訂DLL

小舖上有人在問Reporting Service的報表如何將Where條件放在DB中,在報表開啟時才去讀取這些Where條件並取得資料,下面寫了一個範例,這個範例會用到幾個概念:
1.Reporting Service呼叫外部dll
2.報表屬性
3.報表參數
4.Text命令類型

小舖上有人在問Reporting Service的報表如何將Where條件放在DB中,在報表開啟時才去讀取這些Where條件並取得資料,下面寫了一個範例,這個範例會用到幾個概念:
1.Reporting Service呼叫外部dll
2.報表屬性
3.報表參數
4.Text命令類型

依需求,我們要讓報表可以取得DB中的Where條件,我們先新增一個類別庫專案,然後寫一個連線到DB去取得資料的function,這個function內容如下:
1

同時設定好這個組件的輸出:
2

Compile完這個類別庫專案後我們會得到一個MyAssembly.dll檔,裡面有個namespace=MyNamespace、Class=MyClass、Function=getSqlWhere。

而如果要讓報表可以使用這個dll,我們需要將dll放到以下位置:
3

好,到這邊先完成前置作業,接著開始進行報表設計,開啟你的報表專案,然後選擇『報表屬性』:
4

開啟後切換到『參考』,將MyAssembly參考進來,記得要選擇ReportServer/bin下面的那個,避免版本不一致,然後在下面的類別分別打入所要內容,執行個體名稱可隨便打,但要記得這個名字。
5

好了,到這邊為止,我們已經可以在報表中使用這個外部的DLL檔了,剩下的是如何將DB的資料做為我們報表的Where條件了。

首先我們開啟報表參數,然後新增兩個參數UniqueID、sqlWhere,其中的UniqueID屬於一般的參數,直接抓取URL中傳遞的參數即可,而sqlWhere的設定請依下列的設定,選擇『非查詢的』,然後打入如下圖的內容,Code為使用外部DLL function的固定用字,OutSideCode則是上頭定義的執行個體名稱,後面接function名稱與所要參數,呼叫的方法就跟一般C# code很像了。

6

最後一步,打開你的報表,在資料頁籤,命令類型選擇『Text』將查詢的SELECT語法打進去,記得最後的WHERE條件要使用參數sqlWhere。
7

OK了,這樣子當我們開啟這張報表時,透過URL傳遞過來的UniqueID,就可以連結到資料庫去取得我想要的那筆資料,而資料的其中一個欄位是Where條件,整體架構我們可以以下圖表示:
8

1.透過URL傳遞報表參數UniqueID
2.報表檔取得UniqueID參數
3.透過MyAssembly取得Where條件
4.報表檔依條件取得所要資料後開啟報表

以上大致是這個架構的步驟與說明,不確定還有沒有更好的做法,但這個做法目前驗證是可行的。

游舒帆 (gipi)

探索原力Co-founder,曾任TutorABC協理與鼎新電腦總監,並曾獲選兩屆微軟最有價值專家 ( MVP ),離開職場後創辦探索原力,致力於協助青少年培養面對未來的能力。認為教育與組織育才其實息息相關,都是在為未來儲備能量,2018年起成立為期一年的專題課程《職涯躍升的關鍵24堂課》,為培養台灣未來的領袖而努力。