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