You are on page 1of 10

1.

問題描述

客戶來電,提出設置及應用電腦預算執行情形表,關於”小計”以及”

合計”的計算方式有誤,須修正。

2. 問題分析
由於報表總共會分為兩個部分,一是顯示,另一個是讀取,所以要了

解的部分大致有下面兩項:

 ASP.NET:顯示報表

 SQL Server 2008:讀取資料庫數據

1
3. 問題解決流程

3.1. 得知網站基本設定

2
3.2. 找出須修正的程式

若有發現程式中要修改的部分包含 runat=”server”,則表示須修

改的程式在 aspx.cs 內。

3
從這個檔案可以看出我們需要知道程式的兩個部分,分別敘述如下:

 公司目前所用的 ORM framework 為利民所開發,而辨認這個

framework 最快的方式就是在讀寫 DB 時,均會用到 Model 這個

class。我們需要了解 Plan 這個 class 中的 GetSeasonReportPrint

method,才能知道程式如何讀取資料庫中的數據。

 利用 XSLT 的方式,將資料庫中的數據讀進 XML,然後再利用

CSS 做樣式排版。我們也需要了解 XSLT 的撰寫語法,才能修改

程式。

4
3.3. 了解 XSLT 格式

由”預算數”得知此列為計算”預算數”之部分,往下移至計算”固定費

用 ” 之 欄 位 , value-of 為 抓 取 資 料 的 語 法 , 可 得

知../fee[@pid=$pid]/@hbuy 即為資料來源,而 format-number 猜想

應為變更資料顯示格式的語法。所以我們必須在 DB 內找出上述的資料來

源。

5
3.4. 找出 DB 的資料來源

我們須先從 Plan 這個 class 找出 GetSeasonReportPrint method,才

能知道是從 DB 的哪個部分讀取資料。由於 Plan 為 class,所以可從

App_Code 目錄下找出 Plan.cs,並且找到 GetSeasonReportPrint 的定

義,得知該 method 是由 P_SeasonReportPrint 所取得。

6
得知所讀取 DB 的來源之後,接下來要由 web.config 得知 DB 擺放的

位置在 192.168.1.100\sql2008。

7
使用 SSMS 連接至 DB 找出 P_SeasonReportPrint 這個 store procedure,

即可修改其 script 內容。

8
由單字內容可猜出,@pid 即為計畫編號,@hbuy 為硬體購置,而這

兩個欄位均在 fee tag 內。對照 season_print.xslt 其他欄位及這個 store

procedure,即可得知其餘 tag 的意義,也就可以修改程式了。

4. 後記
這個需求所用到的技術如下:

 ASP.NET (C#)

 IIS

 SQL Server

 XSLT

 Limin’s ORM framework

 English

基本上就算不會寫程式,也要會”讀”程式。而”讀”程式的第一要件就

9
是要會英文,再來就是要有能舉一反三的能力,如果有了這兩項,我覺得

基本要項就達到了,剩下就是多看多讀。

像這個客戶的需求,我覺得可以拿來當做 case study 的原因是在於結

合了許多不同的技術。像是利民的 ORM 可以拿來做為.NET 底層讀取資料

庫的架構、XSLT 則是可以結合 XML 並且拿來顯示報表。

這個需求裡面的許多寫法我沒有看過,不過憑著英文以及之前看過的

許多資料,也可以自己”讀”懂程式,更進一步則可以修改程式。在這邊分

享給大家,希望可以作為”讀”程式的入門磚。

10