EPC是一種過(guò)程建模方法,全稱(chēng)是Event-driven Process Chain。在九十年代初期才由Keller等人提出。對于EPC,國內開(kāi)發(fā)人員是陌生的,可能很多人聽(tīng)說(shuō)EPC【01】,也僅僅是在A(yíng)RIS(Architecture of Integrated Information System)系統框架中接觸過(guò)一些。EPC可能很多人是陌生的,但SAP R3可能很多人或多或少聽(tīng)過(guò),SAP R3就是基于EPC過(guò)程建模的。
作者 :胡長(cháng)城 [ 銀狐999 ]
http://www.javafox.orghttp://blog.csdn.net/james999完成日期:2006-10-8 version 1.0
聯(lián)系信箱:
james-fly@vip.sina.comMSN :
fcxiao2000@hotmail.comEPC是一種過(guò)程建模方法,全稱(chēng)是Event-driven Process Chain。在九十年代初期才由Keller等人提出。對于EPC,國內開(kāi)發(fā)人員是陌生的,可能很多人聽(tīng)說(shuō)EPC【01】,也僅僅是在A(yíng)RIS(Architecture of Integrated Information System)系統框架中接觸過(guò)一些。EPC可能很多人是陌生的,但SAP R3可能很多人或多或少聽(tīng)過(guò),SAP R3就是基于EPC過(guò)程建模的。
我也僅僅只是在2004年中的時(shí)候才接觸過(guò)EPC這個(gè)概念的,那時(shí)候還在思維加速公司(現在叫起步公司了)研發(fā)Biz5.0系統,為了在Process Model這一層尋找一套方法論的支持,查閱了大量的建模方法資料,其中就包括EPC。
但那時(shí)候接觸的業(yè)務(wù)場(chǎng)景和業(yè)務(wù)范圍很局限,雖然對EPC很認同,卻不敢輕易的深入和采用,加上當時(shí)受Alast的YAWL的影響,所以更加癡迷于PetriNet?!苓z憾的是,那個(gè)時(shí)候沒(méi)有看出EPC與PN之間是有很大關(guān)聯(lián)性的,這是后話(huà)。
2004年底進(jìn)入USE(用友軟件工程),接手了工作流引擎的開(kāi)發(fā)。雖然那時(shí)候很想按照自己的思路采用PN或EPC的模型來(lái)開(kāi)發(fā),但當時(shí)在我之前的開(kāi)發(fā)人員已經(jīng)花費了大量時(shí)間在XPDL模型語(yǔ)言上,并做出了一款可運行的Deme和設計器,對我來(lái)說(shuō),當時(shí)的首要任務(wù)是重構出一款實(shí)際可用的引擎,而不是重新開(kāi)發(fā)一個(gè)工作流系統。
不得已,我只能采用XPDL流程模型,也只能選擇重構,這在我去年寫(xiě)的《工作流引擎核心調度算法與PetriNet》【03】已經(jīng)稍稍提及了。雖然模型這個(gè)層面讓我很被動(dòng),但是由于至少還可以把握引擎結構和調度算法這一層,或多或少彌補了很多。
其實(shí),那個(gè)時(shí)候即使允許采用PN或EPC,心里其實(shí)也是沒(méi)有多少底的。畢竟早先我很多的研究基礎也是基于WfMC的參考模型和XPDL描述語(yǔ)言的。兩年之后再回過(guò)頭來(lái)看看,心中已經(jīng)很清晰了,至少那幾個(gè)過(guò)程模型的思想已經(jīng)很有把握了。
說(shuō)道這兒,順帶說(shuō)兩個(gè)方面的個(gè)人觀(guān)點(diǎn),這兩個(gè)方面與主題沒(méi)有直接關(guān)系,但是有間接關(guān)系。以后我會(huì )寫(xiě)專(zhuān)門(mén)的文檔來(lái)闡述我的這兩個(gè)觀(guān)點(diǎn),此處我就不多加解釋了,“仁者見(jiàn)仁,智者見(jiàn)智”,有心者自己把握吧。
第一:我不是很喜歡XPDL流程描述模型,但目前國內絕大多數的廠(chǎng)商采用的是XPDL描述模型及擴展,這沒(méi)有任何不妥。目前國內的流程應用范圍主要還集中在類(lèi)似OA審批流之類(lèi)的應用上,這一層面的應用XPDL的模型所描述的語(yǔ)義基本可以滿(mǎn)足大家的理解和應用了。再加之絕大多數的客戶(hù)更偏重于“離散型活動(dòng)關(guān)系”,這就讓建模的約束又淺了一層。
第二:在引擎構建上,需要把握關(guān)鍵的三點(diǎn):過(guò)程模型建模、引擎調度算法和狀態(tài)變遷、實(shí)例之間的對象關(guān)系。把握了這三點(diǎn),則基本能夠奠定一個(gè)引擎的主線(xiàn)結構。這好比是寫(xiě)文章的“主線(xiàn)”。當然,一篇好的文章,光有一個(gè)好的主線(xiàn)邏輯和構思是不夠的,但主線(xiàn)是核心,寫(xiě)工作流引擎,也類(lèi)似。
自從2005年初寫(xiě)出那款引擎之后,就很長(cháng)時(shí)間沒(méi)有想去寫(xiě)一個(gè)引擎的沖動(dòng)了。這似乎是開(kāi)發(fā)人員的一種詬病,如果感覺(jué)現在所做的研發(fā)或者開(kāi)發(fā),不能讓自己超越現在的自己,則會(huì )喪失很大興趣,甚至放棄。我當時(shí)就是那種狀態(tài)。
我沒(méi)有再去做工作流研發(fā),但是卻沒(méi)有放棄對工作流的研究。從2005年中開(kāi)始,我自己利用業(yè)余時(shí)間在默默地研究,也利用給別人培訓和講課的機會(huì ),對相關(guān)知識進(jìn)行鞏固和升華。這一年多來(lái),收獲是不小的,但是卻沒(méi)有再公開(kāi)什么文章,是比較沉寂的一年。
前面廢話(huà)說(shuō)了一堆,現在正式轉入正題。
前段時(shí)間,公司接了一個(gè)物流的項目,其中有一個(gè)子系統是要做WMS(倉儲管理系統),主要是處理物品入庫、出庫、庫存的流程管理。我看這個(gè)WMS子系統的需求之后,對其內部所需要處理的流程、單據狀態(tài)等業(yè)務(wù)場(chǎng)景,腦海中第一個(gè)念頭就是應該采用EPC用于建模抽象??上н@只是腦海中的一個(gè)念頭而以,現實(shí)中,是不可能這么去實(shí)施這個(gè)項目的。(這是令人痛心的,不過(guò)國內很多項目的實(shí)施,是很應付性的,也很難聽(tīng)取開(kāi)發(fā)人員的意見(jiàn))。
回到家后,又把之前所搜刮到的有關(guān)EPC的資料翻了翻。其中有兩篇文檔在這里提一提:
第一篇就是《SAP R/3 Business Blueprint:Understanding Enterprise Supply Chain Management》【02】,這本書(shū)有一章節專(zhuān)門(mén)講了EPC建模的要素,并且在后續章節中,用了大量的圖例詮釋了如何用EPC流程構建業(yè)務(wù)流程。
書(shū)中主要點(diǎn)了EPC的四個(gè)主要要素:事件(Event)、功能(Function)、組織單元(Orgnization Unit)、信息(Data)(事實(shí)上,OU和Data這兩個(gè)要素是ARIS系統框架中的)。由于本書(shū)的宗旨主要在于業(yè)務(wù)詮釋?zhuān)詫τ谶@幾個(gè)要素講解的不夠概念化、形式化。但讀完后,用EPC的圖例繪制業(yè)務(wù)流程圖,估計沒(méi)有多大難度了。
元素
圖例
描述
Event
描述了狀態(tài)的發(fā)生,同時(shí)又充當了一個(gè)觸發(fā)器
Function
功能描述了一個(gè)任務(wù)的執行,代表了一個(gè)start event和end event轉換過(guò)程
Orgnization Unit
Data
Process Path
流程之間的連接關(guān)系
Logical Connectors
邏輯連符號:AND,OR,XOR
讓我們來(lái)看一個(gè)例子,可以加深對EPC所構建的流程模型的理解:下圖顯示的是一個(gè)貨物接收處理的流程。
第二篇就是Alast大師寫(xiě)的《Formalization and Verification of Event-driven Process Chains》【04】。Alast是位Petri Net領(lǐng)域的專(zhuān)家,這篇文檔也依然沒(méi)有脫離PN角度。
這篇文檔從“過(guò)程”角度給出了EPC的幾個(gè)元素解釋?zhuān)?div style="height:15px;">
元素
描述
Functions
A function corresponds to an activity (task, process step) which needs to be executed.
Events
Events describe the situation before and/or after a function is executed. Functions are linked by events. An event may correspond to the postcondition of one function and act as a precondition of another function.
Logical connectors
Connectors can be used to connect activities and events. This way the flow of control is specified. There are three types of connectors: AND, XOR (exclusive or) and OR
Alast這篇文章另外一個(gè)重要內容,就是做了EPC到PetriNet的映射,但不涉及到對OR邏輯連接符的映射,因為OR的語(yǔ)義有多種詮釋?zhuān)皇欠浅G逦鞔_,這在A(yíng)last的這篇文檔中也已經(jīng)說(shuō)明。
EPC的Event可以映射為PN中的庫所(Place),而Function可以映射為PN中的變遷(Transition)。而至于邏輯連接符AND和XOR的映射在采用Place的控制,很容易表示:
應用的匱乏
看到這兒,估計大家對EPC過(guò)程模型能夠有個(gè)基本的認識。因為本篇不是講解EPC的,而只是想說(shuō)明:EPC在業(yè)務(wù)建模方面為我們提供了很好的參考,但是國內當前基于EPC模型的流程產(chǎn)品或業(yè)務(wù)產(chǎn)品幾乎沒(méi)有。在網(wǎng)絡(luò )上搜索中文EPC的資料,僅有寥寥幾篇,而且主要還都是因為講解ARIS框架而順帶提及的。
到不是說(shuō)EPC是一劑萬(wàn)能的良藥,事實(shí)上EPC也僅是過(guò)程建模的一種。幾個(gè)過(guò)程建模諸如PetriNet、EPC、Activity Diagram、FSM等,如果可能的話(huà),XPDL的定義元模型也算一種。
但是國內這幾年的工作流相關(guān)的產(chǎn)品和應用發(fā)展,受WfMC的XPDL影響很深。
一方面是因為國內自身的理論研究過(guò)于薄弱和蒼白,可能有些研究人員會(huì )注意到上述的那些過(guò)程建模方法,但是由于這些過(guò)程建模方法并沒(méi)有形成完整的形式化描述語(yǔ)言支持(事實(shí)上,是有一些的,比如基于PN的PNML,基于EPC的EPML等,但是這些xml的描述語(yǔ)言過(guò)于理論化,不像XPDL那樣偏應用),所以很難直接被一些開(kāi)發(fā)廠(chǎng)商了解。
而另一方面,這幾年國內工作流應用的主要領(lǐng)域依然是OA及相關(guān)審批流程。在這樣一個(gè)“偏重用戶(hù)自主行為控制”的流程應用領(lǐng)域,XPDL所闡述的流程元模型對象:Process、Activity、Transition、Participant已經(jīng)基本可以描述一個(gè)完整的流程。在可以完整描述完一個(gè)流程之后,大部分廠(chǎng)商都把重點(diǎn)放在了:(1)通過(guò)擴展屬性來(lái)豐富流程定義;(2)通過(guò)完善引擎的功能支持一些用戶(hù)行為化的操作,諸如退回、自由流等。
但很少有廠(chǎng)商真正的反思一下,XPDL的過(guò)程建模就一定完善嗎?合適嗎?。對于XPDL來(lái)說(shuō),有個(gè)最大的缺陷就是缺少對State和Event的描述(在XPDL2.0中已經(jīng)部分的納入Event概念了)。
而對于其他過(guò)程建模PetriNet、EPC、Activity Diagram、FSM這幾個(gè)來(lái)說(shuō),State是一個(gè)核心的元素:
過(guò)程建模方法
基本模型元素
表示State的對象
PetriNet
Place,Transition
Place
EPC
Event,Function,Connectors
Event
Activity Diagram
State,Decision
State
FSM
State,Action
State
XPDL Metedata
Activity,Transition
在這幾個(gè)過(guò)程建模方法中,EPC是最偏重于商業(yè)業(yè)務(wù)化流程的。但是卻是國內應用卻是空白的。
據我所知道的,目前國內已經(jīng)有兩三家廠(chǎng)商已經(jīng)采用PetriNet作為流程描述模型;OSWorkflow和jBpm這兩款開(kāi)源引擎的應用,也已經(jīng)讓部分廠(chǎng)商在不知不覺(jué)中采用了FSM和Activity Diagram模型。唯獨EPC沒(méi)有應用(當然那些采用SAP R3的除外)。
我記得在2001年,我還在有生博大公司研發(fā)RiseOffice5.0公文流程系統,那時(shí)候采用的是Task和Action對象,有些類(lèi)似FSM的State和Action。不過(guò)現在有生博大新版的RiseOffice工作流系統,已經(jīng)采用XPDL模型了?!?其實(shí)這也是國內很多廠(chǎng)商的一個(gè)開(kāi)發(fā)趨勢:雖然不了解“過(guò)程建?!?,但是知道XPDL可以描述流程。
事實(shí)上,EPC所抽象的模型,很適合諸如B2B、供應鏈流程管理、倉儲物流管理等商業(yè)化業(yè)務(wù)流程。這樣的業(yè)務(wù)流程有個(gè)很共同的特點(diǎn),對于“活動(dòng)處理的前后狀態(tài)”很在意。一旦把握了狀態(tài),則可以依據狀態(tài)來(lái)豐富業(yè)務(wù)對象的生命周期控制和業(yè)務(wù)規則控制,這兩點(diǎn)在業(yè)務(wù)系統中是比較重視的。
相比較而言,XPDL的元模型則僅僅只描述了“活動(dòng)與活動(dòng)之間的連接關(guān)系”,則很難在模型角度就看清楚活動(dòng)之間所影響的狀態(tài)及變更關(guān)系。
但很少有開(kāi)發(fā)商或者開(kāi)發(fā)人員去反思這個(gè)問(wèn)題:活動(dòng)與狀態(tài)。XPDL雖然屏蔽了“狀態(tài)”這個(gè)理念,但是由于其是目前最為“完善的XML描述化流程語(yǔ)言”(當然,這里我們不去談?wù)揃PEL、BPML之類(lèi)的規范),對于開(kāi)發(fā)商來(lái)說(shuō),只需要考慮遵循規范和擴展,則可以基本清晰的描述一個(gè)“流程”,雖然不能夠表達流程各個(gè)區段的狀態(tài)問(wèn)題,但是卻可以清楚地展現“活動(dòng)之間的關(guān)系”。
更況,國內的流程發(fā)展,這幾年主要依賴(lài)于辦公自動(dòng)化和審批流,加上國內應用偏重于“離散活動(dòng)點(diǎn)的組合關(guān)系”,也就是說(shuō),在很多客戶(hù)眼力:流程就是一個(gè)個(gè)離散的任務(wù),這些任務(wù)在不同情況下可以很隨意的組合。而這樣的需求,是XPDL所依賴(lài)于的Activity和Transition所基本可以描述的。
加之WfMC畢竟是一個(gè)有著(zhù)十多年的國際化標準組織,對客戶(hù),對開(kāi)發(fā)商來(lái)說(shuō),這樣的組織和標準,都是比較容易接受的。
而EPC,PetriNet,FSM,Activity Diagram則顯得很脆弱,沒(méi)有國際化的組織支撐,沒(méi)有完善的描述語(yǔ)言支撐。最令人嘆息的就是,在XPDL的描述模型中,幾乎找不到任何這四個(gè)模型的影子,似乎WfMC在有意回避這幾個(gè)建模思想。
國內的業(yè)務(wù)化建模流程,應該吸納EPC這樣建模方法,特別是在業(yè)務(wù)化系統中,比如B2B、供應鏈流程管理、倉儲物流管理等商業(yè)化流程系統中。當然這樣的代價(jià)是比較高的,需要基于這些模型元素和思想,自主摸索出一套完整描述語(yǔ)言。事實(shí)上,SAP R3的成功是很值得大家借鑒的。
下面把倉儲管理系統中的一個(gè)入庫流程中的“入庫訂單處理”用EPC模型表示,如下:
【01】G. Keller, M. Nüttgens, A.-W. Scheer. Semantische Prozessmodellierung auf
der Grundlage ?Ereignisgesteuerte Prozessketten (EPK)“. Ver?ffentlichung
des Institut für Wirtschaftsinformatik, Paper 089, Saarbrücken, 1992
(
http://www.iwi.uni-sb.de/iwi-hefte/heft089.ps).
【02】Thomas A. Curran, Andrew Ladd. SAP R/3 Business Blueprint:Understanding Enterprise Supply Chain Management,2003
【03】胡長(cháng)城,《工作流引擎核心調度算法與PetriNet》,2005年
【04】W.M.P. van der Aalst, Formalization and Verification of Event-driven Process Chains