新公司首個專案為 OA 系統,環境:ASP.NET MVC 2 + SQL Server 2008。因涉及工作流引擎,自行研究設計,本文記錄核心設計思路(僅供參考,高手輕噴)。

未使用圖形化設計器,採用強制定義 HTML 結構,後台解析:
<table><tbody><tr><td id="title" class="editable">申請人</td><td>...</td></tr>...</table>
table > tbody > tr > td 固定結構td[@id='title'] 為欄位標題class 標記(如 editable、readonly、time)var nodes = doc.DocumentNode.SelectNodes("//table/tbody/tr/td[@id='title']");
// 解析出 11 個節點:申請人、申請日期、部門、假期類別、請假時間、扣薪形式、請假理由、審批人、審批日期、審批結果、審批意見

日期欄位標記 class='time',前端 jQuery 動態綁定日期選擇器。




| 屬性 | 說明 |
|---|---|
| 節點序號 | 步驟順序 |
| 節點名稱 | 步驟顯示名稱 |
| 允許附件/會簽 | 控制區塊顯示/隱藏 |
| 下一步標識 | 可流轉目標步驟(支援多條路徑) |
| 不可寫字段 | 當前步驟唯讀欄位(如經理審批時,申請人資訊不可修改) |
正常流程:員工填寫 → 經理審批 → 總監審批 → 人事備案(4 步)
總監請假:填寫表單 → 人事備案(2 步,跳過經理/總監)
透過「下一步標識」多選機制實現動態路由。

輸入流程名稱確認後,直接跳轉流程頁面,資料庫寫入第一步記錄。


採用「全 HTML 存儲」策略:將整個表單 HTML(含使用者輸入值)存入資料庫。流轉時讀取最新 HTML 顯示給下一關卡人員。
技術細節:$("#formTableID")無法直接取得value,需用 jQuery.attr('value', 文字值)回寫 DOM 再存儲。

這是一個從零開始的自定義工作流實踐,雖有不足,但核心流轉邏輯已跑通。後續規劃引入圖形化設計器、支援子流程、優化表單資料存儲結構,持續迭代完善。