專刊內文

當前位置:首頁>專刊分享>內文

瀏覽次數 : 7954



 

Silverlight報表方案/EEP Report Module

訊光科技 / 沈俊杰

前言

隨著『企業資訊化』的這個名詞的提出,企業自動化的變革已在我們的身邊無聲無息的發展開來。在這樣的e時代裡,企業管理機制已經從原先的人工化管理開始轉變為應用軟體系統化管理。而報表作為一個統計資訊中最直觀的呈現方式,使用者最容易有變化上的要求、最可能被要求擴增功能,自然成為了應用軟體系統中非常重要的環節。爲了解決報表的製作問題,提高開發的效率,在市場上也出現許多專門的報表工具。對於報表系統最顯著的特徵除了要能高速開發之外,就是要能夠讓使用者自行定義與擴展。這些報表資料透過Web瀏覽器可按照User自己的需求來呈現報表然後輸出到Excel中,或者通過電子郵件等來接收報表等。
 

使用者的報表需求

作為企業級的報表工具,必須還要解決以下幾個重點方向:
1.   用戶自定義報表製作:承如前文所說的,使企業報表更加個性化與彈性化。
2.   高速開發製作與分發:可以很簡單的方式就可以高速開發出各式格式的報表,並以更方便的方式來分發報表到User手上。
3.   資料量與效能:很多的報表都需要高量的資料作為瀏覽,並且執行報表的速度與反應不能太慢,以避免讓User等待過久。
4.   儲存再利用:報表的資料不僅只是用來瀏覽,有時必須使用通用的檔案格式儲存再加以二次利用,方便User可以自行加工與轉發分享,當然如果是機密資料反而是缺點。
5.   不必寫程式:如果不需依靠開發人員撰寫程式來達到開發報表的目的,只要下達資料來源的簡易SQL再加上親和的元件屬性設定,就可以輕易完成開發與發佈,這應該也是現今報表工具的主流。
 

EEP Report Module

EEP Report Module就是專門給系統設計人員配合EEP的Query元件 (如ClientQuery元件),並能在完全不開發程式情況下的高速報表解決方案,過程中只需要開發者設定所需輸出資料的SQL或Entity SQL語句,即可透過屬性設定方式來輸出所需的報表。同時,EEP Report Module提出了終端使用者(End User)二次開發的概念,User可以根據自己的需要對報表進行一些細微功能的調整與設定,這樣的開發模式,大大提高了報表靈活性與彈性。

EEP2010 Report Module使用了微軟最新Silverlight的技術來展現使用者體驗的介面,鑒於Silverlight的RIA特性,我們也同時開發了基於Silverlight的報表工具(開發代號為 Silverlight EasilyReport)。這個報表工具與之前Web或Windows版的EasilyReport設計,和最終產生的畫面是非常類似的。之間的區別在於Silverlight版可以用拖拉的方式取代了之前的一些繁瑣的屬性設定方式,真正做到”所見即所得WYSIWYG”的境界(What you see is what you get)。

 

EEP Report Module特色

Silverlight EEP Report Module作爲訊光的新一代報表工具,它不但繼承大多原有Report Module的基本功能外,同時也有如下的幾個特色:

 1.  快速易學化:即使沒有 VS 使用經驗,EEP Report Module的輕便性可讓一個開發新手在最短時間內上手,只需通過屬性設定即可快速產生報表。
 2.  報表範本化:EEP Report Module可將程式師或使用者的報表經驗,以範本的方式保存在EEP的系統資料表中(SYSTEM Table)。來達到經驗承傳再利用的作用,使得報表的開發工作變得更加快速。
 3.  設計雙向化:EEP Report Module提出了雙向設定的概念,即程式師與使用者都可對報表進行設定,從而提高了報表的靈活度與彈性,當然程式師的設定介面會比使用者多一些設定,並也可以用程式來動態控制報表的屬性與格式。
 4.  權限管控化:EEP提供了全面的權限管控,即便在雙向設計的機制下,用戶可以根據Login到EEP的權限設定,來達到該User是否有權進行報表的修改行為。
 5.  整合EEP強大的ClientQuery查詢功能:提供了一個共用的報表表單 (名稱為ReportCommonForm ),將EEP ClientQuery的功能與Report輸出的功能整合在一個Silverlight頁面當中,便於User來直接使用,這樣就只需開發報表即可,不必還要另外開發頁面來呈現。

  

實例開發

下面就讓我們用一個 ”訂單統計表” 的實例來說明Silverlight版的EasilyReport設計方式:

STEP 1:首先,我們執行EEP特有的Report Manager(報表管理員),放在EFWebClient這個WebSite的ReportManagerMain.aspx,這是一個Web介面,如果發佈在網站上時,開發者可以透過Web直接來設計EasilyReport的報表,打開的頁面如下:

 STEP 2:請選擇File->New->Report…用來新增一個新的報表。

STEP 3:新增Report的畫面如下圖,我們將Report ID設定為Report20110413,Report Name設定為訂單統計報表,按下Data Source Provider右邊的Add…按鈕,會彈出RemoteNameEditorDialog這個窗口,它用來選擇Server端哪一個資料服務(DLL)的那一個Entity資料源,我們選擇SNorthwind中的Orders(訂單資料)來做為資料來源。(限於篇幅,Server端的sWCF001.DLL及Orders的Entity我們省略不說明)。 Detail DataMember(指報表明細的資料表)選擇為Orders,最後按OK完成新增。

STEP 4:接下來開始設計報表的格式,我們先來設計查詢介面,一般報表都有查詢介面,在此用了EEP的ClientQuery元件功能,因此設定的屬性和ClientQuery是一模一樣的,如下,我們設定了從訂單日期到訂單日期(期間),還有是否指定客戶或是否指定員工等等條件。

 

STEP 5:接著設計報表頭,點選到表頭這頁時,可以從左邊的常用參數中拖拉一些常用的報表參數,如報表名稱、頁次、日期、製表人等等,在此我們拖入報表名稱與頁次即可,如下圖,字型可以自由設定,如下圖。

  

STEP 6:設計報表明細,這是最重要的部分,報表明細欄位,可以從左側的資料表(Orders)中選擇所需要的欄位,拖拉入右邊報表Grid中。在本例中我們可以拖入希望輸出的欄位,因為我們要為訂單金額加總,所以我們拖入訂單金額欄位。每個欄位都有自己的屬性可以設定,包括欄位表頭、字型、是否加總等等,如下圖。

 

STEP 7:設計報表尾,與報表表頭很類似,從左側的常用參數中拖拉進來一些基本變數,如我們拖入用戶名稱與印表日期兩個變數進來,如下圖。

  

STEP 8:基本報表的設定,之前我們已經設定好了報表的名稱,所以在此我們就略過,不必設定。

 

 STEP 9:如果想事先看一下設計的報表長什麽樣,我們可以使用File->Export的功能來預覽一下報表的輸出結果,它是一個Excel的結果。

  

 

STEP 10:如果你是配合我們前面說的共用頁面來輸出這張報表,那你就可以不必設計任何頁面與程式,直接打開EEP專用的 EEPManager 來設定該張報表的功能表單位置與權限。注意下面的Package名稱必須設定為 SLEasilyReportCommonForm才可以有效打開該報表,並在Item Params中設定該報表的代號為 Report20110413(就是你剛剛所設計的報表代號)。

STEP 11:設定完EEPManager之後就可以從Login的頁面進去,點選Menu中的”訂單統計報表”打開剛剛設定完的報表。可以看到如下的介面,上面的部分是我們剛才設定的Query介面。下面部分是Report的設計介面,這個是用來給使用者自行調整報表的(如果不想讓User設計,則在EEPManager選擇另一個共用表單即可SLEasilyReportCommonRunOnly。 

 

STEP 12:當然,現在我們就可以輸入查詢條件,將報表輸出出去,但我們可以透過這個介面來讓User自行調整報表,於是在下方這個”Report”頁籤來改變一下這個報表,點選”報表明細”,並在頁面下方勾選一下分組匯總,然後設定訂單金額這個欄位的GroupTotalCaption為“小計”,如下圖。另外,User也可以使用拖拉的方式掉換欄位或增減欄位來調整報表。

  

STEP 13:按一下”報表輸出”就可以輸出報表。此時會彈出一個小視窗讓你去下載這個報表的Excel檔。同樣的,User也可以透過”存檔”的功能將這個自訂的格式存檔起來,下次可以持續沿用。

 

點選 “按此下載此Excel檔案”的連結時,就可以打開我們設計完的報表結果,如下圖。  

 


結論

之前的EEP Report Module推出目的,就是希望將報表產生速度能更上層樓,也能讓程式師們更加省時省事。開發者可以在不寫程式的情況下,產出多數常用的報表;同時,使用者也可根據自己的需求,對報表進行調整與更改,並可以另存型版下次重複使用。這對於報表設計系統來説是一個躍進,這種躍進將會給使用者和設計者帶來更多的便利與福音。Silverlight 版更是在此基礎上發揚光大,更能讓你以拖拉的方式去取代了那些繁瑣的屬性設定,讓你或是你的User可以更直覺更快速的去開發與維護報表。 (完)