簽核流程功能

開發簽核流程功能

一般常見的簽核流程功能像是請假流程、公文簽核流程,管理人員事先定義好某個流程的簽核順序和條件,在使用者建立一筆待審核的資料後,系統就會按照順序把簽核工作送給每個關卡的負責人,並且記錄每一個簽核的過程,這樣的功能對於系統的自動化有很大的幫助。簽核流程功能通常是整個軟體系統的一部分,需要考慮整合性和一致性,包含所使用的開發工具和使用者的操作介面風格。在這裡我們建立了一個簽核流程功能,用來處理人事管理系統 (以下稱本系統) 的請假流程,它同時也可以應用在各式各樣的系統。

安裝人事管理系統

本系統包含4個 project,點選文字上的連結可以直接到 Github 網站下載 :
 • Base project:底層的公用程式
 • BaseFlow project:與流程有關的公用程式(下載url與Base相同)
 • BaseWeb project:與Web有關的公用程式(下載url與Base相同)
 • HrAdm project:本系統的主要程式

安裝的步驟為 :
1.先在你的本機建立一個目錄, 例如: d:\_project,再從 GitHub 分別下載這2個 repository 的原始碼到此目錄:

2.解壓縮2個檔案後,移除目錄名稱後面的 master,結果如下:

3.在VS 2019 開啟 HrAdm/HrAdm.sln,裡面有4個project,重新編譯整個方案:

4.進入SQL Server Management Studio (SSMS),建立一個空白的資料庫,名稱為Hr,同時把它切換為目前的工作資料庫。 

5.在SSMS下執行 HrAdm/_sql/createDb.sql,這個動作會建立本系統所有的資料表,並且產生資料,欄位的內容說明可以參考HrAdm/_sql/資料庫.docx 這個檔案。


一個比較完整的簽核流程功能,包含以下4個部分:
• 流程設計畫面
• 簽核畫面
• 相關資料表
• 流程核心程式

流程設計畫面

在這裡我們使用第三方套件 jsPlumb (community 版本) 來建立這個功能,它是一套製作流程圖的函式庫,具有很好的方便性和穩定性。透過圖形化的設計畫面,可以讓你簡化維護流程時的複雜性,進入本系統的 [流程管理] 功能後可以看到一筆請假流程資料,以下是它的編輯畫面,畫面的左邊是輸入欄位和功能按鈕,右邊是所建立的流程資料:

在畫面中,這個請假流程總共有三個節點分別為:代理人、主管、總經理,當請假的時數超過24小時的話,系統會將資料送給總經理審核。

畫面左側有5個欄位和按鈕,它們的用途為:
• 流程代碼欄位:用來表示流程的唯一代號,以供相關程式存取,請假流程的代碼為 Leave
• 流程名稱欄位:流程顯示名稱
• Start按鈕:增加一個開始節點,每個流程只能有一個開始節點
• Node按鈕:增加一個一般的節點
• End按鈕:增加一個結束的節點

流程資料的基本元素為:節點和流程線,節點用來決定簽核者的身份,流程線則是決定流程的執行方向;節點內部的橘色小四方形,用來拖拉產生流程線。透過這兩種元素可以組合建立出各式各樣複雜的流程。當你在某個節點或流程線點選右鍵時系統會出現一個小的功能表,讓你編輯或是刪除所選取的元件,以下是節點的編輯畫面:

流程線的編輯畫面如下:

 

簽核畫面 

當你進入功能表上的 [請假作業] 新增加一筆請假資料之後,系統就會根據這個請假流程的設定,來建立這筆請假資料的待簽核資料,在以下的畫面中,這筆資料有2個簽核的節點為分別為代理人和主管:

當我們以主管 Nick 的身份登入系統進入 [待簽核假單] 功能,他就可以看到這一筆等待簽核的資料,並且進行審核。 
 

相關資料表

如同一開始所說明的,簽核流程功能是系統的一部分,而不是獨立存在,所以在這裡我們把流程的相關資料表放在人事系統的資料庫裡面,詳細的欄位說明可以參考資料庫.docx,流程的設定資料為以下4個資料表:
• Flow:流程設定資料
• FlowNode:流程節點
• FlowLine:流程線
• FlowSign:簽核資料

除此之外,你可以為任何的資料加上流程簽核的功能,只要在資料表裡面加上一下這兩個欄位,如同資料表 Leave 一樣:
FlowLevel:流程目前簽核關卡
FlowStatus:流程簽核狀態
 

流程核心程式

我們希望簽核流程功能可以經過標準化,讓它變成軟體積木的一部分,在實作個別的簽核功能時,可以大幅減少程式碼的撰寫,讓系統變得更加簡單、容易維護。在這裡我們把這些共用的功能放在流程的核心程式,它主要包含兩個主要功能:第一是根據流程的設定來產生簽核資料,第二是當簽核者送出簽核資料後,系統把待簽核資料送到下一個節點。