自定義報表開發說明_第1頁
自定義報表開發說明_第2頁
自定義報表開發說明_第3頁
自定義報表開發說明_第4頁
自定義報表開發說明_第5頁
已閱讀5頁,還剩13頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、自定義報表開發說明目錄1.自定義報表的目的32.自定義報表的開發過程33.自定義報表的技術原理44.獨立的報表設計方法65.程序對獨立報表的調用實現126.報表的部署157.報表的現場修改171. 自定義報表的目的開發自定義報表的目的有以下幾點:1、 實現報表和程序分離。分離的報表和程序的分離是實現自定義報表工作的最主要目的。程序和報表分離可以使得報表的設計工作、程序的開發工作、報表的部署工作、報表的修改工作和報表的測試工作各自獨立分開的來進行。減少開發人員在報表上的工作量,實現報表設計的專業化分工。提高報表的開發效率和質量。2、 實現專業化的獨立報表制作。報表設計工作的獨立進行可以更好的實現

2、報表的專業化制作,原來每個報表的設計和制作都合并到了應用程序的開發過程中,由程序員各自來實現不同的報表。不同的程序員實現報表的方法不盡相同,研究新的報表類型要花不少時間,互相之間沒有足夠的時間來討論總結各種報表的最佳實現方法。獨立的專業化報表制作工作可以使得報表設計人員有大量的機會接觸到不同類型的報表。隨著報表制作經驗的積累,可以有效總結出越來越多的不同類型報表的最優制作方法,形成有效的專業知識,提高公司開發報表的速度和可實現報表的廣度。并且方便對報表進行獨立測試,提高報表質量。3、 提高項目開發效率。報表和程序的獨立,使得各自的工作方向更加專注。不但使得項目開發工作能夠并行,節省開發時間,而

3、且使得各自的工作更容易深入,提高各自工作的攻關能力和工作質量。4、 方便部署。報表和程序分離后,各自部分能夠獨立更新。避免了更新報表也產生新的軟件版本的問題。在報表更新后軟件部分沒有變化的情況下,可以單獨發布報表版本。實現了項目產品的靈活部署和配置。5、 靈活的報表定制。不同用戶的報表格式不盡相同,相同的業務數據在不同的用戶那里會以不同的組織形式構成報表。而且用戶的打印機型號更是多種多樣。報表制作時使用的打印機型號和紙張可能是用戶那里沒有的,需要在用戶那邊進行報表樣式的定制和打印效果的調試。以往這種調試只能由實施人員在現場反饋回開發團隊,然后開發團隊在看不到現場打印效果的情況下調整報表,不但交

4、互次數多也不便與保證報表效果。2. 自定義報表的開發過程自定義報表的開發過程遵循軟件工程的過程:1、 需求調研需求人員從用戶處獲得報表需求,包括報表的尺寸、樣式、顯示哪些數據、數據的類型、數據的格式、打印的份數和打印機的類型等等。需求人員提交報表需求時應詳述報表細節,如有可能則提供紙質報表樣式。2、 報表設計設計人員根據需求人員提供的報表要求設計出報表的實際結構,生成獨立的報表文件。設計人員根據報表需求和完成的報表文件,進行報表的單元測試。設計人員需要模擬用戶數據綁定到報表,查看打印預覽并打印實際報表,將打印結果與提交的報表需求進行對比,確認報表文件可以滿足用戶需求。然后提交設計結果。3、 報

5、表接口開發及調用程序員根據報表需求的數據結構要求開發獲得報表數據的代碼。然后開發將封裝的報表數據與指定報表文件綁定的方法。指定的報表文件名稱可以從本地配置文件或數據庫應用配置表中得到。程序員應對完成的程序進行單元測試確保程序能夠將數據綁定到報表,并且能夠成功的調用報表預覽和打印。4、 報表的測試測試人員根據報表需求和設計人員提交的報表文件,進行報表測試。測試人員需要在應用軟件環境中模擬用戶數據綁定到實際報表,查看打印預覽并打印實際報表,將打印結果與提交的報表需求進行對比,確認報表文件可以滿足用戶需求,記錄測試通過,通知報表設計人員提交報表文件版本到配置管理。或者及時通知程序員或報表設計人員修改

6、相關缺陷。5、 報表部署配置管理員將最新提交的報表文件發布給實施人員。實施人員拿到報表文件后在用戶環境中進行測試。確認無誤后將報表文件安裝到用戶的客戶機或服務器。3. 自定義報表的技術原理水晶報表程序控制上有兩種模式,也就是PULL模式和PUSH模式。口語化點就是拉模式和推模式。拉(PULL)模式:由水晶報表模板(引擎)直接連接數據庫(源),從數據庫(源)里拉取數據。就是我們在水晶報表里設置好數據庫信息,以及相關的表。當我們在程序中調用水晶報表引擎,掛載模板后,水晶報表引擎會根據模板里的數據庫信息,及表信息主動連接數據庫,返回數據給報表模板,模板根據設計樣式進行呈現。基本流程如下圖所示推(PU

7、SH)模式:由應用程序從數據庫(源)獲取數據,然后把數據推送給水晶報表引擎。水晶報表本身不跟數據庫進行交互。其基本流程圖如下對比兩個圖,黑色的箭頭表示我們要自己進行編碼,藍色的箭頭表示是水晶報表與數據源的自動交互過程,不需編碼。這樣我們很容易看到,使用PUSH模式將會比PULL模式多了不少代碼。而且因為PULL模式是直連數據庫,比PUSH模式的先獲取數據結果,然后推送給水晶報表少了一個過程。而中間結果集本身就占用系統資源。所以PULL模式比PUSH執行效率高。那么兩者的差異就出來了1:PULL模式代碼量少2:PULL模式執行效率高3:實際開發過的朋友也有體會,使用PULL模式,模板開發的速度也

8、比PUSH模式模板簡單一些這幾點上,似乎PULL模式已經完全把PUSH模式打敗了,那么為什么 PUSH模式還存在,且被大量使用呢?我們再返回去看上面兩個示意圖,大家注意到PULL模式中,是由水晶報表連接的數據庫,也就是說,水晶報表引擎單獨占用了一個數據庫連接。而只有在水晶報表對象釋放后,數據庫連接才會釋放(這個時段對系統時間來說,是比較長的,特別是如果要翻頁等需要長時間連接數據庫的情況)。而在PUSH模式中,數據庫是由應用程序去連接的,水晶報表本身不連接數據庫。這樣,系統就能使用公用的數據庫連接。這樣一來,就節約了數據庫的連接消耗。這一點,在多用戶的系統環境內,少一次數據庫連接對系統性能的影響

9、對系統的影響是比較關鍵的。當然,我們也應該注意到,PUSH因為存在一個Dataset,所以會占用系統資源。這兩個方面大家需要綜合考量。這是個基本的,下面是PUSH的優勢。1:可以公用系統數據庫連接,減少數據庫連接損耗2:可自由組合多數據源(如多數據庫等),這一點PULL模式也可以實現,但是不如這個方便3: 靈活多變靈活多變的說法,是因為由于我們是把數據獲取后,再PUSH給水晶報表的,那么在這個中間,就有很多數據再加工的可能性。鑒于自定義報表在開發獨立性和部署靈活性方面的要求,PUSH模式的報表開發是必然選擇。4. 獨立的報表設計方法下面詳細講解一下PUSH模式下的報表的獨立設計。1、 新建一個

10、CrystalReports應用程序項目,(實際設計人員可以新建WinForm項目和Web項目,沒有區別)彈出下面這個界面后,輸入“ExampaleCrystalReportsProject”然后點確定,會生成新的解決方案,并彈出報表制作向導選擇窗口。選擇作為空白報表,點擊確定。進入一個空白報表界面。2、 在解決方案資源管理器中的項目下新建一個數據集在數據集設計界面上,點右鍵,添加一個datatable,命名為myTable。然后在myTable里增加3個列。注意要設置好類型。(ID:Int32;Name:String;Age:Int32)特別說明:因為水晶報表里不認datatime型,對于2

11、009-06-26 9:23:15會自動截斷為2009-06-26所以datatime型數據在xsd文件中,可設置為string型而代碼中的SQL中可把字段轉換為String傳入。3、 xsd設計完畢后,開始進入報表模板設計階段。進入剛才生成的空白報表界面,在字段資源管理器中的“數據庫字段”上點右鍵,選“數據庫專家”在彈出的界面上,點“項目數據”,依次點開,找到我們剛才自己做的mytable加入到右側選定的表中確定后,在“數據庫專家”下面會出現表名mytable,點開后會看到字段,把字段拖到模板上的詳細資料節即完成基礎模板的制作了點一下預覽,會看到雖然我們還沒有任何實際的數據操作,但是界面上已

12、經有數據了,這是水晶報表的一個虛擬數據,可以看到一個最終顯示的效果。4、 最后制作完成后點擊保存項目。可在項目文件夾中找到項目最后生成的獨立報表文件。5. 程序對獨立報表的調用實現下面詳細介紹一下程序對獨立報表的調用以及如何綁定數據到報表。1、 創建一個新的WinForm應用程序項目,取名為CrytalReportInvoker.點擊確定2、 在Form1中添加一個CrystalreportViewer3、 在Form1類中添加如下代碼 public static ReportDocument ConfigureCrystalReports(string filename) ReportDoc

13、ument reportDocument; reportDocument = new ReportDocument(); reportDocument.Load(filename); return reportDocument; ConfigureCrystalReports方法負責加載指定路徑的報表文件,生成報表文檔對象。在From_Load事件中添加如下代碼 private void Form1_Load(object sender, EventArgs e) ReportDocument rt = ConfigureCrystalReports("crystalReport1.

14、rpt"); /rt.SetDataSource(GetData(); rt.SetDataSource(GetDataTable(); crystalReportViewer1.ReportSource = rt; 在窗體加載時先從指定路徑加載特定的報表文件名稱,然后綁定數據源,數據源可以是DataTable,或者是實現了Ienumerable接口的集合類,比如Ilist<>等。有一點需要注意,不論是DataTable還是Ilist包含的對象都必須含有報表數據集結構中的ID、Name、Age三列或屬性。4、 將獨立設計生成的報表文件CrystalReport1.rpt復

15、制到本項目的bindebug目錄5、 執行應用程序,可以看到程序成功的加載了獨立設計的報表。實現了報表和程序的獨立開發。6. 報表的部署報表部署根據應用程序的類型不同分為C/S和B/S部署方式1、 C/S部署在C/S模式下應用程序直接訪問本地文件,可將獨立的報表文件復制到應用程序所在的文件目錄。或者與開發人員進行約定將要訪問的報表文件路徑和報表文件名稱設置成可配置的。然后將報表集中部署到指定路徑中。再將配置信息放到應用程序的配置文件中。(由于不同的客戶端硬盤分區不盡相同,安裝路徑也不一樣。放到數據庫中配置不能統一)<appSettings><add key="Rep

16、ortsPath" value="/Reports"/><add key="入庫單報表文件名稱" value="WarehousingEntry.rpt"/></appSettings>2、 B/S部署在B/S模式下應用程序通過瀏覽器訪問服務器文件文件,可將獨立的報表文件復制到應用程序所在的服務器文件目錄。或者與開發人員進行約定將要訪問的報表文件路徑和報表文件名稱設置成可配置的。然后將報表集中部署到指定服務器文件路徑中。再將配置信息放到應用程序的Webconfig配置文件中。(由于不同的客戶端硬

17、盤分區不盡相同,安裝路徑也不一樣。放到數據庫中配置不能統一)<appSettings><add key="ReportsPath" value="/Reports"/><add key="入庫單報表文件名稱" value="WarehousingEntry.rpt"/></appSettings>7. 報表的現場修改修改報表的過程和設計報表的過程類似。之所以單獨來說明主要是為產品實施人員在用戶現場為特定用戶進行定制修改提供顯明幫助。這里所說的修改一般是指在用戶現場進行報表修改以滿足用戶需要的方式。1、 現場文件更新現場文件更新是指用戶提出比較大的報表修改,包括數據結構、報表格式等等,現場實施人員將用戶意見反饋回到開發部門。報表開發人員和程序員溝通共同完成程序和報表文件的更改。配置管理員將新的文件版本發送給實施人員。實施人員和部署方式一樣將文件安裝到指定的文件路徑。完成修改過程。2、 現場報表修

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論