一直在探索乙個可以靈活流轉的oa工作流機制。以前聽說都是用什麼domino來做的,用asp的時候很少有人去探求這個機制的實現方法。到了asp.net的時候好像大家都醒悟了,認識了工作流引擎,公司老闆、cto等都嚷嚷要上工作流引擎實現企業資訊審批流程化。我公司也在去年引進了深信通的工作流引擎,作為公司其他系統開發呼叫的工作流審批元件,基本是符合wfmc標準的定義的。這個驗收我也去了,看起來是很適合我們公司用的。它設計的思路如下:
首先定義每個操做,就是定義流程步,定義流程步主要包括:操作的介面位址、操作引數、操作型別(起始操作、中間操作等)。定義操作的目的是接著為每個操作設定關係和定義流程時選用這些定義好的操作步。
第二定義操作的引數,有了介面位址外,還需要定義操作引數。
第三是定義操作步之間的關係。就是定義乙個流程中每個操作步的前驅、後繼的操作步。
第四是定義流程了,必要的資訊是流程名稱等基本資訊和定義流程的各個操作步以及流轉規則。流程基本資訊就不用說了。流程步定義比較複雜,設定定義步驟型別(起始、中間、終結),入口步驟、出口步驟、通知模式(郵件?簡訊),人員(以人員優先)、角色、傳送通知的內容。
第五是涉及跳步情況的定義,比如需要根據引數的不同提交到不同的步驟進行審批,這裡叫做流程步驟變遷規則設定。設定的內容需要:原步驟、目標步驟、變遷方向(正/負)、條件規則(判斷引數時用與還是用或)。接著設定引數和引數值及比較條件。
第六是授權管理。這個比較簡單了。判斷被提交的人是否處於授權狀態,是進行授權處理。
上面介紹的是一種商業元件,沒money可用不到。下面來說說本人的「小土槍」。
我的小土槍在行家的眼裡可能不屑一顧,請不吝賜教.
首先我的思路是:乙個流程有多個流程步組成,乙個系統模組有多個流程組成.在流程步裡定義該步的審批人或審批的角色以及入口頁面和引數、下一步可以提交的步驟等等。
所以流程定義的就兩個表,乙個流程表,乙個流程步表。流程表在定義流程時需要定義所屬模組,其他都是簡單的描述等. 這是乙個表.表結構如下:
pkid,
流程名稱\流程描述\啟用時間\停用時間\停啟用標誌\所屬模組
流程步表包括如下資訊:
流程步id、所屬流程、流程步描述、流程步的審批人、流程步的審批角色、入口url,出口url,可提交的流程步(比如這步驟能提交到第4和第5步,這裡就儲存這個4,5)、可退回的流程步、還設定了乙個是否可以選擇全部人的標誌,用於在如果提交下一步時如果不能明確事前制定某個審批人,就可以在在所有人中按部門篩選待辦人員。還有一些待閱入口url和檢視的url。下表可以看一下。
flowstepid
int 4
flowid
varchar 10
flowstepdescript
varchar 60
flowstepcheckman
varchar 40
flowstepcheckrole
varchar 40
flowsteptask
varchar
100flowstepurl
varchar
250flowsltnext
varchar
100sltotherpsn
bit 1
flowsltback
varchar
100flowstepreadurl
varchar
250flowviewurl
varchar
250flownextnotes
varchar
100flowbacknotes
varchar
100
定義就是這樣了。
下面就要說怎麼用了。
先說一下背景,企業裡的公文、各種單據流轉實質上就是給「特定」人看某個頁面,說的更白一點就是給那個審批人的待辦工作模組增加一條記錄,給他進去看的視窗。接著是他進行審批,這時有兩種可能:退回跟通過(當然有些步驟還有編輯)。那麼如何用上面設計的資料字典實現這些功能呢?首先看乙個頁面:
這是乙個提交審批的流程,首先有乙個下一流程步的列表框,這個列表框是用來顯示可以提交的那幾個流程步,就是按照資料表中的字段:
flowsltnext
,這個欄位裡可以放幾個流程步,中間用逗號隔開,所以下一流程步去資料就是先取出這個當前流程步的flowsltnext值,然後再select ………where pkid in (flowsltnext).這樣就出來可選的流程步。如果下一流程步是可選的,還要根據使用者所選的流程列出候選人,所以這個列表框應該自動回傳伺服器的。
然後就是填寫意見,這個沒什麼說的了。
最後就是選擇候選人,把他加入到待辦人員去,同樣可以做出待閱的效果。
如何列出候選人呢,根據使用者選擇的下一流程,查詢flowstepcheckman(審批人)和flowstepcheckrole(審批角色)內容,先找flowstepcheckman的內容,如果存在就不看flowstepcheckrole的內容,已審批人優先,就按照審批人的內容列出獲選人人名。如果flowstepcheckman沒有內容,再看flowstepcheckrole內容,按照flowstepcheckrole內容選擇屬於這個角色的人名。
對了還有如何記錄審批人的審批動作問題,這裡用了乙個審批記錄表,表結構是:
checkinstance
varchar
被審批實體的唯一標號
sysid
int流水號
dealresult
varchar
處理結果(退回、通過)
dealpsn
varchar
處理人(審批人)
dealsdate
datetime
審批開始時間
dealedate
datetime
審批結束時間
idear
varchar 意見
flowstep
varchar
流程步useflow
varchar 流程
然後還要生成待辦記錄、更新審批實體的流程資訊等等。
上面說完了提交流程的實現,那麼如果選擇退回呢,這個很簡單,在流程記錄表中查詢出所有已審批過的流程步並且是屬於流程步規定的可退回步驟,即flowsltback欄位的內容。候選人按所選那一步的處理人列表就可以了。
大概就這樣吧,自己寫得好辛苦。越寫越沒耐心。
刪除乙個工作流
刪除乙個工作流 delete from wfprocess t where t.processname wotracking and t.processrev 18 delete from wfsubprocess t where t.processname wotracking and t.pro...
JBPM學習 一 實現乙個簡單的工作流例子全過程
作者更新於2020 06 04 員工提交申請 員工部門經理審批 部門經理 總經理審批 總經理 1.部署流程定義 a 通過直接拿到.jpdl.xml 和.png方式部署 private processengine processengine new configuration setresource ...
JBPM學習 一 實現乙個簡單的工作流例子全過程
員工提交申請 員工部門經理審批 部門經理 總經理審批 總經理 1.部署流程定義 a 通過直接拿到.jpdl.xml和.png方式部署 test public void deployprocessdefinition b 部署完後,在jbpm4 ployment表中有一條記錄 在jbpm4 lob表有...