江日念,林 霞,許 錕
(中國(guó)石油勘探開發(fā)研究院 計(jì)算機(jī)應(yīng)用技術(shù)研究所,北京 100083)
審批流程是工作流的一部分,是一類能夠完全或者部分自動(dòng)執(zhí)行的業(yè)務(wù)過程,它根據(jù)一系列過程規(guī)則,使得文檔、信息或任務(wù)能夠在不同的執(zhí)行者之間傳遞與執(zhí)行[1-3]。它通常由審批流程定義和審批流程實(shí)例兩大部分組成,在建模階段,將業(yè)務(wù)過程定義在審批流程定義里,在啟動(dòng)階段,將相應(yīng)的流程定義拷貝到流程實(shí)例,在運(yùn)行階段,審批人在相應(yīng)審批節(jié)點(diǎn)選擇同意或者拒絕本次審批后,將選擇一條流轉(zhuǎn)路徑,以便將審批業(yè)務(wù)對(duì)象流轉(zhuǎn)到下一節(jié)點(diǎn)。一般的審批流程流轉(zhuǎn)方式為按序流轉(zhuǎn)到各審批節(jié)點(diǎn),直到流程終結(jié)。而在實(shí)際操作過程中,審批流程的“異?!鼻闆r非常多,其原因是流程規(guī)則具有不確定性[4]。所以,此種方式未考慮到現(xiàn)實(shí)情況中審批業(yè)務(wù)對(duì)象的部分參數(shù)對(duì)審批路徑選擇的影響,同時(shí)未能考慮到有子流程和分支流程的情況。
為了讓審批流程能滿足各種業(yè)務(wù)需求,具備一定的柔性,一般企業(yè)會(huì)采用開源工作流或者根據(jù)自身情況量身定制一套流程引擎。常用的開源工作流是基于BPMN2.0[5-8]協(xié)議jBPM[9]和Activiti[10],這兩者功能強(qiáng)大,但入門門檻較高,而且不能滿足一些使用場(chǎng)景,比如流程撤回、跳過某個(gè)流程節(jié)點(diǎn)執(zhí)行等。而自主研發(fā)的工作流更適應(yīng)國(guó)內(nèi)審批業(yè)務(wù)現(xiàn)狀,出于實(shí)際業(yè)務(wù)考慮,在一種自主研發(fā)的柔性審批流程模型[11]基礎(chǔ)上提出了一種路徑選擇策略,將節(jié)點(diǎn)和路徑由常規(guī)的鏈?zhǔn)酱鎯?chǔ)變?yōu)榛谟邢驁D結(jié)構(gòu)的存儲(chǔ)[12-14],通過條件路徑、缺省路徑、默認(rèn)回退路徑的定義為路徑選擇策略的實(shí)施奠定基礎(chǔ),流程實(shí)例基于路徑選擇策略選擇一條合適的流轉(zhuǎn)路徑后,形成審批流程的流轉(zhuǎn)記錄,直至審批結(jié)束。在流程路徑的研究方面,當(dāng)前的一些研究[15-16]以基于流程關(guān)鍵路徑的工作流調(diào)度為目標(biāo),也取得了較好的效果。
審批流程的定義是審批流程的核心部分,定義部分規(guī)定了流程運(yùn)行所需要的相關(guān)信息,包括流程所屬業(yè)務(wù)、流程參數(shù)、流程可用部門、流程節(jié)點(diǎn)、流程路徑等信息。在流程啟動(dòng)階段,根據(jù)可用部門和所屬業(yè)務(wù)找到一個(gè)可用的流程定義,將流程定義中的節(jié)點(diǎn)信息、流程參數(shù)信息、路徑信息、節(jié)點(diǎn)下崗位信息拷貝到流程實(shí)例。這樣生成的流程實(shí)例和流程定義將解耦,單個(gè)審批業(yè)務(wù)對(duì)象的流程變更,不會(huì)影響其他流程實(shí)例。為了審批流程更具柔性,在審批過程定義階段盡可能地預(yù)見各種柔性需求,為具體執(zhí)行提供可選情況。當(dāng)一些在創(chuàng)建時(shí)不能完全預(yù)見的情況出現(xiàn)時(shí),需要及時(shí)地調(diào)整原有過程定義和運(yùn)行中的實(shí)例,滿足業(yè)務(wù)對(duì)象的審批需求。流程定義ER圖如圖1所示。
圖1 審批流程定義ER圖
由以上ER圖可知,該審批流程定義的核心是基于有向圖存儲(chǔ)的。有向圖工作流模型是一種應(yīng)用廣泛的流程定義模型,它是一種基于活動(dòng)的IPO(輸入—處理—輸出)的模型?;谟邢驁D存儲(chǔ)流程定義為靈活的路徑定義提供了基礎(chǔ),也符合目前主流工作流模型設(shè)計(jì)理念。
以下給出該審批模型幾個(gè)概念定義:
定義1:審批模型。審批模型可用一個(gè)二元組表示wf=(N,P)。其中N={nb,n2,…,nn-1,ne}是流程節(jié)點(diǎn)的集合,P為節(jié)點(diǎn)之間的路徑集合,P的形式化表示為P={pi|pi=
活動(dòng)節(jié)點(diǎn)集合N包含三類:起始節(jié)點(diǎn)、活動(dòng)節(jié)點(diǎn)、結(jié)束節(jié)點(diǎn)。在一個(gè)合法的流程定義中,必須包含唯一的一個(gè)起始節(jié)點(diǎn)nb、唯一的一個(gè)結(jié)束節(jié)點(diǎn)ne和至少一個(gè)活動(dòng)節(jié)點(diǎn),且只有活動(dòng)節(jié)點(diǎn)才關(guān)聯(lián)到相應(yīng)崗位。路徑集合P中
定義2:條件路徑。在路徑定義里流轉(zhuǎn)條件不為空的路徑。條件路徑也是路徑選擇策略中的優(yōu)先路徑,它是為了將審批業(yè)務(wù)對(duì)象中的參數(shù)傳給流轉(zhuǎn)條件,以匹配滿足條件的路徑。無論審批結(jié)果是“同意”還是“拒絕”都適用條件路徑。
比如,在項(xiàng)目立項(xiàng)審批業(yè)務(wù)中,假設(shè)金額大于300萬元和部門編碼為“test”的項(xiàng)目將選擇一條條件路徑,這條路徑的匹配條件condition則為:@JE>300 and @ORGCODE='test',其中@JE和@ORGCODE為流程參數(shù)表定義的兩個(gè)參數(shù):@JE的參數(shù)類型為數(shù)值型,@ORGCODE的類型為文本型。前臺(tái)界面將項(xiàng)目立項(xiàng)表單中所需參數(shù)組裝成類型為Map
①將Map中的鍵和流程參數(shù)定義表中的參數(shù)進(jìn)行匹配,若找不到與鍵匹配的流程參數(shù)定義則丟棄該鍵值,否則轉(zhuǎn)到②。
②根據(jù)流程參數(shù)表中定義的參數(shù)類型,將路徑中定義的條件condition中的參數(shù)進(jìn)行替換,如果參數(shù)為數(shù)值型,則直接用Map中值替換;如果參數(shù)為文本型,則Map中值加上單引號(hào)替換。假設(shè)傳遞的Map為(<@JE,200>,<@PARA,'para'>,<@ORGCODE, test>),則匹配后替換的condition為:200>300 and 'test'='test',轉(zhuǎn)到③。
③將替換后的條件作為SQL語句的一個(gè)條件,以O(shè)racle為例,則判定'select 1 from dual where "+condtion+"'是否有返回值,如果無返回值或者SQL異常,則判定匹配該路徑失敗,否則匹配成功。
條件路徑的匹配流程如圖2所示。
圖2 條件路徑匹配流程
定義3:缺省路徑。缺省路徑是指在路徑定義里指定的缺省路徑,即路徑定義中屬性“是否為缺省路徑”取值為“true”的路徑。
缺省路徑的優(yōu)先級(jí)次于條件路徑,在未設(shè)置條件路徑或條件路徑匹配失敗時(shí),缺省路徑有效。缺省路徑的存在可以避免因條件路徑不存在或者條件路徑匹配失敗導(dǎo)致流程無法正常流轉(zhuǎn)。缺省路徑也可以是條件路徑,即該路徑定義中屬性“流轉(zhuǎn)條件”不為空。
定義4:默認(rèn)回退路徑。審批人選擇“拒絕”時(shí),由當(dāng)前節(jié)點(diǎn)默認(rèn)回退到第一個(gè)活動(dòng)節(jié)點(diǎn)的路徑。
默認(rèn)回退路徑未在路徑定義中明確定義,是該審批模型處理回退的默認(rèn)路徑。在系統(tǒng)中處理流程回退時(shí),一旦無法找到條件路徑和缺省路徑則執(zhí)行默認(rèn)回退路徑。該路徑的優(yōu)先級(jí)次于條件路徑和缺省路徑。
以上三種路徑的優(yōu)先級(jí):條件路徑>缺省路徑>默認(rèn)回退路徑。
上述審批流程模型中定義了條件路徑、缺省路徑和默認(rèn)回退路徑三類路徑,在流程執(zhí)行階段,審批人在選擇兩類審批結(jié)果“同意”或者“拒絕”后,都將選擇一條執(zhí)行路徑,將審批業(yè)務(wù)對(duì)象傳遞到下一審批節(jié)點(diǎn)。根據(jù)節(jié)點(diǎn)下審批人選擇的審批結(jié)果,執(zhí)行兩類路徑選擇策略,即“同意”時(shí)流程通過的路徑選擇策略和“拒絕”時(shí)流程回退的路徑選擇策略。
①將傳遞的Map參數(shù)與當(dāng)前節(jié)點(diǎn)為起始點(diǎn)且路徑類別為“同意”的路徑進(jìn)行條件匹配,匹配策略如定義2中條件路徑的匹配策略,如果匹配成功,轉(zhuǎn)到④,否則轉(zhuǎn)到②;
②尋找一條當(dāng)前節(jié)點(diǎn)為起始點(diǎn)的缺省路徑,如果尋找到該路徑轉(zhuǎn)入④,否則轉(zhuǎn)到③;
③拋出“未找到一條合法審批流轉(zhuǎn)路徑”的異常;
④該路徑作為當(dāng)前審批流程的執(zhí)行路徑,并且路徑的終止點(diǎn)為審批流程的下一執(zhí)行節(jié)點(diǎn)。
應(yīng)該注意到,在第一個(gè)活動(dòng)節(jié)點(diǎn),即填報(bào)人節(jié)點(diǎn),以填報(bào)人節(jié)點(diǎn)為起始點(diǎn)的路徑類別均為“同意”,作為第一個(gè)活動(dòng)節(jié)點(diǎn),因不會(huì)有流程回退情況出現(xiàn),所以它只會(huì)執(zhí)行“同意”時(shí)路徑選擇策略。在最后一個(gè)活動(dòng)節(jié)點(diǎn),當(dāng)審批人“同意”流程通過時(shí),有且只有一條這樣缺省路徑:以最后一個(gè)活動(dòng)節(jié)點(diǎn)為起始點(diǎn),流程的結(jié)束節(jié)點(diǎn)ne的路徑。
①將傳遞的Map參數(shù)與當(dāng)前節(jié)點(diǎn)為起始點(diǎn)且路徑類別為“拒絕”的路徑進(jìn)行條件匹配,匹配策略如定義2中條件路徑的匹配策略,如果匹配成功,轉(zhuǎn)到④,否則轉(zhuǎn)到②;
②尋找一條當(dāng)前節(jié)點(diǎn)為起始點(diǎn)的缺省路徑,如果尋找到該路徑轉(zhuǎn)入④,否則轉(zhuǎn)到③;
③將默認(rèn)回退路徑作為執(zhí)行路徑,即填報(bào)人節(jié)點(diǎn)為審批流程的下一執(zhí)行環(huán)節(jié);
④該路徑作為當(dāng)前審批流程的執(zhí)行路徑,并且路徑的終止點(diǎn)為審批流程的下一執(zhí)行節(jié)點(diǎn)。
流程回退時(shí)的審批策略同流程通過的審批策略基本一致,主要區(qū)別在③,即在無法尋找到缺省路徑時(shí),“拒絕”流程可回退到填報(bào)人,而“同意”流程通過卻因?yàn)檎也坏饺笔÷窂綊伋霎惓?。所以為了?guī)避此異常,在流程定義時(shí)必須校驗(yàn)條件路徑的條件參數(shù)必須在流程參數(shù)表中定義,且任一活動(dòng)節(jié)點(diǎn)至少要有一條指向其他節(jié)點(diǎn)的缺省路徑。
下面以請(qǐng)假流程為例,說明路徑選擇策略的使用。某部門的請(qǐng)假流程審批過程為:請(qǐng)假人提出申請(qǐng),填寫請(qǐng)假單,提交到部門經(jīng)理審批,如果部門經(jīng)理審批不通過,則流程回退到請(qǐng)假人,如果審批通過且請(qǐng)假天數(shù)在3天之內(nèi),則流程直接結(jié)束,請(qǐng)假成功,如果請(qǐng)假天數(shù)大于3天,則部門經(jīng)理將申請(qǐng)?zhí)峤唤o老板審批,老板審批通過,則請(qǐng)假成功,否則流程回退到部門經(jīng)理。請(qǐng)假流程圖見圖3,其中所有的流轉(zhuǎn)路徑的路徑類別都在圖中標(biāo)識(shí)。
圖3 請(qǐng)假流程
在圖3中所示的7條路徑中,有6條在路徑定義表中定義,如表1所示。部門經(jīng)理到請(qǐng)假人之間的回退路徑未在路徑定義表中定義,說明該路徑是審批模型處理流程回退的默認(rèn)路徑。流轉(zhuǎn)條件中參數(shù)@day是在流程參數(shù)表中定義的數(shù)值型參數(shù)。
假設(shè)A申請(qǐng)請(qǐng)假4天,申請(qǐng)將提交到部門經(jīng)理審批,部門經(jīng)理B審批通過后,根據(jù)路徑選擇策略,將會(huì)匹配到部門經(jīng)理審批到老板審批這條條件路徑,流程將會(huì)提交給老板審批這個(gè)節(jié)點(diǎn),老板C審批通過,請(qǐng)假成功,否則回退到部門經(jīng)理B重新審批。如果A請(qǐng)假2天,則流程不會(huì)經(jīng)過老板審批的節(jié)點(diǎn)。
表1 請(qǐng)假流程的路徑定義
為了讓審批流程能更好地滿足業(yè)務(wù)需求,適應(yīng)國(guó)內(nèi)各種流程需要,提出一種自主研發(fā)的審批流程模型設(shè)計(jì),并探討了流程路徑選擇策略。流程模型基于有向圖結(jié)構(gòu),并將路徑分為三類:條件路徑、缺省路徑、默認(rèn)回退路徑。通過對(duì)三類路徑的定義、優(yōu)先級(jí)劃分和匹配策略的制定,為審批流程運(yùn)行時(shí)的路徑選擇策略的實(shí)施奠定基礎(chǔ)。在路徑選擇時(shí),根據(jù)審批結(jié)果來執(zhí)行不同的策略,從而保證審批流程正確流轉(zhuǎn)。最后通過一個(gè)請(qǐng)假流程的實(shí)例描述,說明了該路徑選擇策略能夠應(yīng)用于大部分的審批業(yè)務(wù),因?yàn)橥ㄟ^簡(jiǎn)單路徑配置,它能支持條件分支流程、子流程等復(fù)雜流程。目前,采用該路徑選擇策略的審批流程模型已經(jīng)在實(shí)際的系統(tǒng)中得到應(yīng)用。實(shí)踐結(jié)果證明,該策略具有靈活、簡(jiǎn)便、兼容性好的特點(diǎn)。下一步將繼續(xù)完善該模型的路徑選擇策略設(shè)計(jì),使之能滿足“會(huì)簽”、“會(huì)商”的復(fù)雜審批需求。