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

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