一、工作流概念
1.案例(case):工作流系統(tǒng)的基本目的就是處理案例,保險索賠、績效考核、抵押申請等等都是案例。每一個案例都有一個唯一的標識,案例在出現(xiàn)和消失之間總是處于某個特定狀態(tài),這個狀態(tài)有三個元素組成:
(1)案例相關(guān)的屬性,指出特定條件下案例是否被執(zhí)行或者忽略
(2)已經(jīng)滿足的條件,說明案例的進展。
(3)案例的內(nèi)容,可能是文檔、文件、檔案或者數(shù)據(jù)庫
2.任務(wù)(task),泛指一般的工作單元,而非具體案例活動的一次具體執(zhí)行(這一般稱為活動),為了區(qū)分這一點,引入了工作項(work item)和活動的概念(activity)。工作項是指將要被執(zhí)行的實際工作塊,而活動就是指工作項的執(zhí)行。
3.過程(process):過程指出了哪些任務(wù)需要被執(zhí)行,以什么順序執(zhí)行??梢詫⑦^程理解為具體案例的藍圖。過程定義了案例的生命周期,每個生命周期都有start和end。
4.路由(route):決定了那些任務(wù)被執(zhí)行和以何種方式執(zhí)行,包括順序、并行、選擇和循環(huán)四種形式的路由
5.啟動(start):觸發(fā),工作項是有一個resource來啟動的,觸發(fā)的形式包括:
(1)資源驅(qū)動,比如某個員工
(2)外部事件,一個JMS消息
(3)時間信號,比如凌晨2點觸發(fā)某任務(wù)等等。
顯然,觸發(fā)是由環(huán)境而非工作流系統(tǒng)負責的。
二。Petri網(wǎng)
Petri網(wǎng)是一種過程建模和分析工具,是1962年由Carl Adam Petri提出的,它有著堅實的數(shù)學基礎(chǔ),完全形式化的,可以將Petri網(wǎng)應(yīng)用于工作流的建模和分析過程。
1.傳統(tǒng)的Petri網(wǎng):
Petri網(wǎng)有place(庫所)和transition(變遷)組成
place用于容納token,token用以表示具體的案例,通過transition的firing(實施)來表現(xiàn)過程的狀態(tài)轉(zhuǎn)變。理解幾個概念:
(1)transition enabled(變遷的就緒):當且進當transition的每一個輸入place都至少有一個token的時候,變遷就緒,可以實施。
(2)transition firing(變遷的實施):變遷的從每個輸入place取走一個token,并往它的每個輸出place增加一個token。
看一個Petri網(wǎng)進行過程建模的例子:

圓圈表示place;矩形表示transition;用黑點表示token,存在于place中,這里沒有表示出來,我在網(wǎng)上隨便找的一張圖,不過這里也展示了And-split、And-join、Or-split和Or-join的四種任務(wù)以及四種形式路由(從上到下依次是:順序、并行、選擇和循環(huán))的Petri網(wǎng)建模。
2.高級Petri網(wǎng)
傳統(tǒng)Petri網(wǎng)有一些缺點,比如無法對某些活動進行有效的建模,容易變的龐大而難以理解,因此通過擴展,就可以對復雜情況用結(jié)構(gòu)化、容易理解的方式建模。關(guān)注三種擴展:顏色擴展、時間擴展和層次擴展。
1.顏色擴展,為token引入顏色,用以區(qū)分同一place中的不同token,顏色其實代表了token(具體到某個案例)的屬性,通過顏色擴展,我們可以為將要被消耗的token值設(shè)置了前置條件,那么變遷就緒的前提變化為:每個輸入place都至少有一個token,并且滿足前置條件。顏色擴展,也將產(chǎn)生的token與消耗的token進行了關(guān)聯(lián),產(chǎn)生token的值和數(shù)目將依賴于被消耗的token的值。
2.時間擴展,當需要對一個過程的預期性能進行判斷時,引入了時間擴展,為token加入時間戳,只有當被消耗的token的時間戳早于當前時間,就緒的transition才可以firing,而產(chǎn)生的token的時間戳就等于firing的時間加上延時。通過引入時間擴展,我們將可以對類似十字路口紅綠燈時間敏感的復雜過程進行建模。
3.層次擴展,過程是由一系列的place、transition、弧線和子過程組成的,為了反映這樣的層次結(jié)構(gòu),適應(yīng)復雜過程的建模,引入了層次擴展。
三、工作流概念到Petri網(wǎng)的映射
1.過程:過程是由條件和任務(wù)組成,映射到Petri網(wǎng),place就是條件,而transition就是任務(wù)。條件和place都是被動元素,而任務(wù)和變遷都是主動元素。案例就是token,案例的屬性通過顏色擴展來映射,token的值包含了案例的屬性值。比如保險索賠案例的屬性:賠額、索賠人、時間等等。
2.路由:四種路由的Petri網(wǎng)建模,上面的圖片已經(jīng)給出。簡單分析下:
(1)順序路由,對應(yīng)圖1,任務(wù)A和B是順序執(zhí)行的,任務(wù)B的輸入是任務(wù)A的結(jié)果。通過在兩個任務(wù)之間引入一個place來解決,中間的圓圈對應(yīng)的place是任務(wù)B執(zhí)行前的必須滿足的條件,同時是任務(wù)A執(zhí)行的結(jié)果。
(2)并行路由:對應(yīng)圖2,為了并行地執(zhí)行任務(wù)B和C,引入了任務(wù)A,稱為And-split,在A和B、C之間引入兩個place,當A任務(wù)實施后,為兩個輸出place產(chǎn)生token,任務(wù)B和C就處于就緒狀態(tài)可以實施。當B和C都實施之后,類似的實行And-join任務(wù)(任務(wù)D)合并兩個任務(wù)。
(3)選擇路由:圖3對選擇路由的建模并不正確,選擇執(zhí)行B或者C,那么在B和C之前引入兩個新任務(wù)t11、t12和兩個place(合并稱為Or-split),在前一個place的token,要么實施t11,要么實施t12,假設(shè)實施t11,那么任務(wù)B將就緒,反之則任務(wù)C就緒。同樣的可以建模Or-join。選擇路由還根據(jù)選擇的時刻劃分為兩類,具體不再展開。
(4)循環(huán)路由,圖四的建模也不是很精確,循環(huán)也跟編程語言中的循環(huán)分為:repeate ...until...和while ...do...兩種,前者至少執(zhí)行一次,而后者可能不執(zhí)行,
3.啟動的映射:我們知道工作項是案例和準備執(zhí)行的任務(wù)的組合,而活動是指一個工作項的實際執(zhí)行,一旦工作項被實際執(zhí)行,它就轉(zhuǎn)換成活動。映射到Petri網(wǎng),工作項就是就緒的變遷(enabled transition),而活動對應(yīng)一個transition的firing。Petri網(wǎng)中的transition是“饑餓”的,一旦它們就緒,就會立刻執(zhí)行,這樣的變遷成為自動的。而工作流中的觸發(fā)并非是自動的,它可能是資源驅(qū)動、外部信號驅(qū)動以及時間驅(qū)動的。為了建模觸發(fā),我們在變遷的上面添加符號來區(qū)分:向下的箭頭表示資源驅(qū)動,信封表示外部信號驅(qū)動,而時鐘表示時間驅(qū)動。
初步了解了Petri網(wǎng),確實是對工作流甚至業(yè)務(wù)過程建模的良好工具,對于利用Petri網(wǎng)進行過程分析,還待進一步學習。