在做某個管理專案時,被要求實現一套流程管理,比如請假的申請審批流程等,在參考了很多資料,並和同事討論後,得到了乙個自主實現的流程管理。
以下提供我的設計思路,知道了思路,實現起來就簡單很多了。
首先我設計了5個類來實現流程的自主設定,主要是對流程的定義和流程流轉。
注:這是設計的圖,並不是實現
dictionary:資料字典,不多說,流程型別存在這裡面
flow:流程,即流程的定義,其中包括流程名稱,描述,型別,啟用時間,備註等;目前是通過判斷某個類別的流程啟用時間來進行判斷當前流程是否啟用的。
乙個類別只啟用乙個流程。所以只需要通過流程類別即可確定流程,並不要特定的狀態字段。
flowinfomovingnode:流程節點,在分析流程流轉的時候,我們發現,流轉一步就相當於從乙個節點跳到另乙個節點,所以我們設計這個流程節點類來表示每一步。
其中包括,所屬流程,節點名稱,節點描述,監聽許可權。
解釋下監聽許可權是什麼. 由於我們做的大部分是審核的流程,所以每個節點都需要有個審核的過程才進入下乙個節點,所以我們要這個handlerrole屬性來確定這個節點究竟是什麼許可權來審核。我們也知道,審核一般是某個人審核,這個我們後面說。這裡是規定某個許可權,即可以審核這個節點的許可權。
flowinfomovingrole:流程流轉規則,為了解決從節點出來的各個分支,我們設計了這個流轉規則,本來其實可以一起放到flowinfomovingnode中,但這樣話無論從資料上 還是管理上來說都不如加流轉規則方便清楚。flowinfomovingrole主要用來確定流轉規則,比如某個節點通過了應該去哪個節點,某個節點沒通過應該去哪個節點,這樣無論是分支還是單支還是迴圈都可以通過相同的方式來進行設定。transition為變換規則,參照shiro驗證許可權的方式,我們也使用純字串格式來進行判斷變換規則。
flowinfomoving:流程流轉資訊,這裡是每一步流轉資訊的存放,基本在進行流程流轉的過程中,都是通過此類,其中包括:所屬節點(得到所屬節點同時也就得到所屬流 程),申請源(因為我們不知道申請源是什麼,我們只是管流程是怎麼運轉的,其申請源跟我們沒有任何關係,我們儲存申請源的唯一標識,若是想在審核的過程中進行檢視申請源資訊,則可以請求在flow中監聽的url(handlerurl),來進行檢視,我會把申請源的唯一標識當做引數傳遞到url中)。
由於這個是操作最頻繁的,所以我來具體解釋下這個類。
以下為本人具體實現的類設計,屬性欄位均有注釋進行解釋:
複製**
/*** 流程流轉資訊
* @author lichao *
*/@entity
@table(name = flowinfomoving.table_name)
public class flowinfomoving extends baseauditentity
複製**
這樣整個流程定義就結束了,我們可以自由設定流程的流程規則,來設定流程的流轉方式。這樣無論任何複雜的流程都可以進行自定義,並且可以隨意的修改。
這樣設計的結果首先是可以任意的自定義流程,其次是申請源不需要去管流程的流轉了,只需要提交乙份申請,其他的事情均由流程進行操作實現。
那麼我們來看看乙個流程是如何進行運轉的。
1.首先通過乙個介面來傳遞具體的一些申請資訊。
2.通過介面中的gettype()來確定是哪個流程
3.查詢到開始的流程節點。
4.將開始的資訊儲存到流轉資訊中,並等待處理
5.由審核人處理,指定下乙個審核人
6.通過處理結果來獲得下乙個流程節點
7.查詢下乙個節點
8.將這次的處理資訊和下乙個節點的資訊儲存到流轉資訊中,並等待處理
9.由審核人處理,這樣一直迴圈知道流程結束
10.通過審核資訊查詢的下乙個節點為null,則表示此流程已經結束,
11.將結束的資訊儲存到流程流轉資訊中
12.將整個流程流轉的狀態改為已結束。
複製**
// 得到申請的id,與類別進行聯合查詢,用於確定具體是哪個流程
long getid();
// 得到申請的類別,用於確定具體是哪類流程
// 得到變換條件,用於確定申請後的第乙個步驟
string gettransition();
// 得到此次申請的描述
string getdiscription();
// 得到審批人,即第乙個步驟由誰審批
user gethandleruser();
}複製**
然後是主要的控制流程流轉和申請的介面
複製**
/***
*@description:處理流程業務的service
*@author:lichao
*@since:oct 10, 201412:02:39 pm
*/public inte***ce flowmainservice
工作流流程狀態管理及變遷
這是我們 東方易維 工作流產品設計過程中採取的設計 一 流程例項的狀態 狀態分為5種 例項化 執行中 掛起 手工結束 正常結束。狀態的變遷如下圖 二 節點例項的狀態 狀態分為5種 例項化 執行中 掛起 手工結束 正常結束。狀態的變遷如下圖 三 具體節點的狀態 細分 a 人工節點 等待節點 這兩個節點...
工作流流程狀態管理及變遷
這是我們 東方易維 工作流產品設計過程中採取的設計 一 流程例項的狀態 狀態分為 5種 例項化 執行中 掛起 手工結束 正常結束。狀態的變遷如下圖 二 節點例項的狀態 狀態分為 5種 例項化 執行中 掛起 手工結束 正常結束。狀態的變遷如下圖 三 具體節點的狀態 細分 a 人工節點 等待節點 這兩個...
Openerp 工作流的流程返回
乙個簡單的審批工作流程,流程圖如下 普通流程是直線的,這個流程的難點在於增加了乙個退回的節點,這就需要在流程設計時,有乙個觸發訊號位於此流程之外。如下 流程節點定義 record model workflow.activity id act draft setting field name wkf ...