一直在探索一個(gè)可以靈活流轉(zhuǎn)的OA工作流機(jī)制。以前聽說都是用什么domino來做的,用ASP的時(shí)候很少有人去探求這個(gè)機(jī)制的實(shí)現(xiàn)方法。到了ASP.NET的時(shí)候好像大家都醒悟了,認(rèn)識(shí)了工作流引擎,公司老板、CTO等都嚷嚷要上工作流引擎實(shí)現(xiàn)企業(yè)信息審批流程化。我公司也在去年引進(jìn)了深信通的工作流引擎,作為公司其他系統(tǒng)開發(fā)調(diào)用的工作流審批組件,基本是符合WFMC標(biāo)準(zhǔn)的定義的。這個(gè)驗(yàn)收我也去了,看起來是很適合我們公司用的。它設(shè)計(jì)的思路如下:
首先定義每個(gè)操做,就是定義流程步,定義流程步主要包括:操作的接口地址、操作參數(shù)、操作類型(起始操作、中間操作等)。定義操作的目的是接著為每個(gè)操作設(shè)置關(guān)系和定義流程時(shí)選用這些定義好的操作步。
第二定義操作的參數(shù),有了接口地址外,還需要定義操作參數(shù)。
第三是定義操作步之間的關(guān)系。就是定義一個(gè)流程中每個(gè)操作步的前驅(qū)、后繼的操作步。
第四是定義流程了,必要的信息是流程名稱等基本信息和定義流程的各個(gè)操作步以及流轉(zhuǎn)規(guī)則。流程基本信息就不用說了。流程步定義比較復(fù)雜,設(shè)置定義步驟類型(起始、中間、終結(jié)),入口步驟、出口步驟、通知模式(郵件?短信),人員(以人員優(yōu)先)、角色、發(fā)送通知的內(nèi)容。
第五是涉及跳步情況的定義,比如需要根據(jù)參數(shù)的不同提交到不同的步驟進(jìn)行審批,這里叫做流程步驟變遷規(guī)則設(shè)置。設(shè)置的內(nèi)容需要:原步驟、目標(biāo)步驟、變遷方向(正/負(fù))、條件規(guī)則(判斷參數(shù)時(shí)用與還是用或)。接著設(shè)置參數(shù)和參數(shù)值及比較條件。
第六是授權(quán)管理。這個(gè)比較簡(jiǎn)單了。判斷被提交的人是否處于授權(quán)狀態(tài),是進(jìn)行授權(quán)處理。
上面介紹的是一種商業(yè)組件,沒MONEY可用不到。下面來說說本人的“小土槍”。
我的小土槍在行家的眼里可能不屑一顧,請(qǐng)不吝賜教.
首先我的思路是:一個(gè)流程有多個(gè)流程步組成,一個(gè)系統(tǒng)模塊有多個(gè)流程組成.在流程步里定義該步的審批人或?qū)徟慕巧约叭肟陧撁婧蛥?shù)、下一步可以提交的步驟等等。
所以流程定義的就兩個(gè)表,一個(gè)流程表,一個(gè)流程步表。流程表在定義流程時(shí)需要定義所屬模塊,其他都是簡(jiǎn)單的描述等. 這是一個(gè)表.表結(jié)構(gòu)如下:
PKID,流程名稱\流程描述\啟用時(shí)間\停用時(shí)間\停啟用標(biāo)志\所屬模塊
流程步表包括如下信息:
流程步ID、所屬流程、流程步描述、流程步的審批人、流程步的審批角色、入口URL,出口URL,可提交的流程步(比如這步驟能提交到第4和第5步,這里就保存這個(gè)4,5)、可退回的流程步、還設(shè)置了一個(gè)是否可以選擇全部人的標(biāo)志,用于在如果提交下一步時(shí)如果不能明確事前制定某個(gè)審批人,就可以在在所有人中按部門篩選待辦人員。還有一些待閱入口URL和查看的URL。下表可以看一下。
定義就是這樣了。
下面就要說怎么用了。
先說一下背景,企業(yè)里的公文、各種單據(jù)流轉(zhuǎn)實(shí)質(zhì)上就是給“特定”人看某個(gè)頁面,說的更白一點(diǎn)就是給那個(gè)審批人的待辦工作模塊增加一條記錄,給他進(jìn)去看的窗口。接著是他進(jìn)行審批,這時(shí)有兩種可能:退回跟通過(當(dāng)然有些步驟還有編輯)。那么如何用上面設(shè)計(jì)的數(shù)據(jù)字典實(shí)現(xiàn)這些功能呢?首先看一個(gè)頁面:
這是一個(gè)提交審批的流程,首先有一個(gè)下一流程步的列表框,這個(gè)列表框是用來顯示可以提交的那幾個(gè)流程步,就是按照數(shù)據(jù)表中的字段:FlowSltNext,這個(gè)字段里可以放幾個(gè)流程步,中間用逗號(hào)隔開,所以下一流程步去數(shù)據(jù)就是先取出這個(gè)當(dāng)前流程步的FlowSltNext值,然后再select ………WHERE PKID IN (FlowSltNext).這樣就出來可選的流程步。如果下一流程步是可選的,還要根據(jù)用戶所選的流程列出候選人,所以這個(gè)列表框應(yīng)該自動(dòng)回傳服務(wù)器的。
然后就是填寫意見,這個(gè)沒什么說的了。
最后就是選擇候選人,把他加入到待辦人員去,同樣可以做出待閱的效果。
如何列出候選人呢,根據(jù)用戶選擇的下一流程,查找FlowStepCheckMan(審批人)和FlowStepCheckRole(審批角色)內(nèi)容,先找FlowStepCheckMan的內(nèi)容,如果存在就不看FlowStepCheckRole的內(nèi)容,已審批人優(yōu)先,就按照審批人的內(nèi)容列出獲選人人名。如果FlowStepCheckMan沒有內(nèi)容,再看FlowStepCheckRole內(nèi)容,按照FlowStepCheckRole內(nèi)容選擇屬于這個(gè)角色的人名。
對(duì)了還有如何記錄審批人的審批動(dòng)作問題,這里用了一個(gè)審批記錄表,表結(jié)構(gòu)是:
然后還要生成待辦記錄、更新審批實(shí)體的流程信息等等。
上面說完了提交流程的實(shí)現(xiàn),那么如果選擇退回呢,這個(gè)很簡(jiǎn)單,在流程記錄表中查找出所有已審批過的流程步并且是屬于流程步規(guī)定的可退回步驟,即FlowSltBack字段的內(nèi)容。候選人按所選那一步的處理人列表就可以了。
大概就這樣吧,自己寫得好辛苦。越寫越?jīng)]耐心。
|
|