SmartObject + InfoPath = Efficiency
這一回要準備一個真實上線的系統,做一個報銷流程。要在最短的時間內完成。一開始,我在自己的電腦上設計InfoPath表單,建立Schema是花了些時間,大概就十來分鐘。再來是拉表單的畫面,這就多花了些時間,以公司的報銷表單為基礎進行設計,東拖西放的也花了快半個小時。表單設計完畢,就要準備資料來源了。在最初的構想中,只打算上流程,基礎的資料就寫寫Web Service去銜接就行了。但是轉念一想,決定用SmartObject。
於是重新換了VPC(原本是用自己的工作站設計InfoPath,再上到一個中文的MOSS VPC上,沒有K2在裡面。換了VPC(BP101)後,我在自己的工作站上用K2 Studio for Visual Studio,很快的設計了幾個SmartObject(總共有六個),包含員工資料、貨幣參照資料、作業中心參照資料、費用類別…。這個構思和設計的時間大概花上半小時左右。接著再花上十來分鐘建立各個SO的維護頁面,放入基礎的資料。這些頁面都不是為了應付 POC,所以在格式上、排序上都做了安排。到目前為止大約經過快兩個小時,只能說有維護的畫面和InfoPath表單,但還沒有接在一起,看不出最後的效益。
接下來有趣了,按照過去的設計,我要針對既有的六個Table分別撰寫Web service,提供所有必要的Web Method。如果前面我在設計維護頁面時,有將資料存取的功能包裝成類別,那這些Web service就只是再加上一層服務呼叫就行,花的時間大概不會太多,但也要個十來分鐘,並且做些測試。但由於前面根本沒寫這樣的程式碼,所以要做出測試過的完整方法,大概得花上半個多小時。但現在我可以花上不到兩分鐘的時間加上所有必要的SO方法呼叫。接下來再花上十多分鐘配置Form開發的規則,取得欄位值,進行呼叫、預覽、修改、再預覽。最重要的是,發現有些方法構思的不清楚,漏放了一個呼叫,只要再加入SO方法就行。如果換成漏了Web service,就要再加程式碼,這可能又是十來分鐘。因此,就在近半個小時(截至目前為止總共經過了不到兩個半小時)的安排測試後,所有表單的功能都確認了。如果是過去,從頭開始設計,我必須要:
1. 建立資料表(table)
2. 建立資料存取類別(data access class),包裝SQL Statements或stored procedure
3. 建立Web Service
4. 設計InfoPath表單
5. 指定資料連線、測試、修正、再測試。
這中間如果有任何變動調整(例如欄位名稱錯了),整個修正程序會再走一遍。因此設計到好可以用,大概得四個多小時的時間。如果用ASP.NET的頁面做,有可能也是要四個多小時(再多一些),主要是因為有一些效果在InfoPath中只要設定,ASP.NET中要寫程式碼。但在訂最初的頁面帶出資料時,設定起來有些繁瑣,而且邏輯要很清楚。但在ASP.NET中只要一直寫程式碼(不過還是要邏輯很清楚,不然就要不斷測試、除錯),熟練的人速度會快一些。
不過如果我們把要求再往前推一些,例如主動驗證資料的關聯性,依條件決定格式…,那ASP.NET又要退到一旁了。而在有了目前的基礎之後,我可以很有次序的繼續準備後續的功能。
整個過程的感覺是,開發的時間不但縮短了,而且是在很從容、有順序的感覺下進行。會漏東西的情況不多見,每一步只要稍微再思考一下,就可以透過工具的協助建立起良好的架構。而剩下的都是不斷重組既有的功能再加上新功能。很舒服的感覺。效率提昇了,品質也提昇了(我根本就沒有做什麼除錯的動作,沒有程式碼可以除錯),校正的全是邏輯上的問題(例如沒有提供參數,Load方法自然不能正確執行),而不是SQL敘述拼錯、欄位名稱給錯…之類很討厭的問題。這樣的除錯我就甘願,畢竟邏輯不好怪不得別人。
到這裡,還沒有用到流程,而在表單發佈到MOSS,用Form Service時,它已經是一個系統了,有基本資料的維護頁面,有費用報銷填寫的表單,能存起來日後檢閱,表單有自動填單、檢錯的功能。在過去,這樣的系統大概快一點也得花上兩天(要Web enabled,通過測試)。我計劃明天再花兩個小時把流程的功能加上(因為還有核決權限表要開發,當然是用SO)。好,可以交差了。真愉快。