上方廣告

Lady Kukki 手作糖霜餅乾

2014年1月22日 星期三

ReportServer中參考自定義Assembly

愚蠢的筆者在2016/06/16為了解決報表矩陣的問題,發現根本不需要畫蛇添足的另外撰寫一個組件,報表本身就可以撰寫函式來處理此問題了,此篇文章僅留下當作參考外部組件的運用方式。

================= 分隔線底下為原文 =================

最近接近要發年終的日子了,但老闆們突然交待要將薪資條內的年終獎金和績效獎金的項目合併只呈現年終績效獎金,原本想說一個很簡單的東西,去薪資項目內修改名稱即可,沒想到薪資單列印的程式一打開,暈倒,竟然是寫死的,而且就連位置都是寫死的,我想一時半刻要調整也不是太大的問題,只是報表(rdl)的判斷式IIF會寫的很長很難寫,因此去詢問了有經驗的同事提到可以另外寫Function在提供給報表使用,下面說明一下設定的方法。

需求說明
1.只有年終獎金 -> 年終獎金項目顯示【年終績效獎金】
2.只有績效獎金 -> 績效獎金項目顯示【績效獎金】
3.年終績效獎金都有 -> 維持原先顯示項目【年終獎金】、【績效獎金】 


開啟一個C#的專案,撰寫以下程式
namespace ReportClass
{
    /// 年終績效獎金類別
    public class UC1_4_01_011
    {
        static string _z1z2Name = "年終績效獎金";
        static string _z1Name = "年終獎金";
        static string _z2Name = "績效獎金";

        //第一個薪資項目的名稱
        public static string GetZ1Name(double z1Amount, double z2Amount)
        {
            if (z1Amount == 0.0 && z2Amount != 0.0)
                return _z2Name;
            else if (z1Amount != 0.0 && z2Amount == 0.0)
                return _z1z2Name;
            else if (z1Amount != 0.0)
                return _z1Name;
            else
                return string.Empty;
        }

        //第一個薪資項目的金額
        public static string GetZ1Amount(double z1Amount, double z2Amount)
        {
            if (z1Amount == 0.0 && z2Amount != 0.0)
                return z2Amount.ToString("N0");
            else if (z1Amount != 0.0 && z2Amount == 0.0)
                return z1Amount.ToString("N0");
            else if (z1Amount != 0.0)
                return z1Amount.ToString("N0");
            else
                return string.Empty;
        }
    }
}

接下來就使在報表中進行設定了。
1.將剛剛的組件compiler後,放置Visual Studio 開發工具中私有組件存取的位置【C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies】,此目的是為了要讓開發工具認識此組件。

2.在要使用的報表中引用此類別,打開報表屬性後,在參考的部份選擇剛剛dll檔的路徑。

3.接下來就是在程式碼中使用該Function了,直接使用Namespace.Class.Function(int1,int2),就可以使用了,但這裡要注意一下intellisense雖然可以點出屬性和方法,但都不會有剛剛建立的任何項目,只有標準類別的方法,但不需要理會紅色毛毛蟲的提示,強制輸入即可。

4.最後一個步驟,也是最重要的,要將此dll檔放到ReportingServer WebSite組建參考的目錄,不然雖然可以發佈,但上版後會發現有錯誤產生,將此dll複製到【C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\bin】


P.S 本文開發環境說明
 Visual Studio 2005
 Windows Server 2003 x86
 SQL Server 2005 x86