1、背景
最近因工作需要,需要用C#自己實現一個支持 BPMN 2.0 的流程引擎。
網上查了查相關C#的開源,實現程度都很少。還沒有象 Java 中 Activity 包好用的包。
不得已,自動手豐衣足食!
不過要多一點的部份實現 BPMN 2.0 ,至少實現的內容不能和 BPMN 2.0 相沖突。就需要細細研究一下 BPMN 2.0 了。
不得已,自己閱讀規范。在有時間的情況下,翻譯兩段,用於記錄。
因為是人工翻譯,如果有翻譯出錯,還請不令指出方便深入理解和改正。
2、BPMN 2.0 規范
BPMN2.0規范 http://www.omg.org/spec/BPMN/2.0/
請點擊下載標准:BPMN 2.0 規范
3、部份小節翻譯
3.1 第10節翻譯
(注:本文由廖貴賓翻譯,email:531622@qq.com,若引用請保留本申明和原鏈接)
10 Process (原文145頁)
工作流(Process) 用來描述組織為完成目標而進行的一個序列的活動。在BPMN中工作流(Process)被繪成一張由定義了執行語義的工作流節點組成的圖,這些節點包括多個活動節點( Acitivities)、事件節點(Events),網關節點(Gateways)以及關聯的流轉箭頭(Sequence flows)。如圖 10.1。組織中的任意層級都可以定義工作流(Processes),可以是整個企業范圍應用的工作流(Processes),也可以是單人使用的工作流(Processes)。較低級別的工作流(Processes)可以組合起來,用來實現通用組織目錄。
注:在BPMN規范中 Process 關鍵詞意味着一組可流轉節點的組合(flow elements)。在建模 Process 之間的交互時,規范中使用 Collaboration 和 Choreography 關鍵詞表示。
我們使用XML文檔來描述工作流的定義。在xml文檔中,一個Process節點在Definitions節點中被定義時,在一個Process節點會包含一組流節點(Activities, Events 和 Gateways)以及它們之間如何流轉的箭頭(Sequence Flow)。這些元素如果轉換成類,可以用UML圖繪制出它們之間的關系(如圖 10.2)。
如圖10.2所示,Process類是 CallableElement 的子類,允許被其它的 Process 類通過 Call Acitivity 結構來索引或重用。在這種方式下,Process類應該定義一組能被處部訪問的行為接口(Interfaces)。Process 類是可以被重用的元素,可以在其它 Definition 類中被導入(import)和使用。
圖 10.3 展示了 Process 類中屬性(attributes)和關聯(associations)的細節內容。
類 Process 繼承了 CallableElement 和 FlowElementContainer 的屬性和關聯(分別見表 10.24和 8.45)。而下表 10.1 是 Process 新增的屬性和關聯。
表 10.1 :Process類屬性和模型關聯表
屬性名稱 |
使用說明 |
processType:ProcessType = none {None | Private | Public} |
processType 屬性指定 Process 可用的范圍。 Public 狀態,表示Process對外部用戶可見,但不顯示流程內部的流轉細節。這種狀態下可以被 Collaboration 類發現和調用。注:ProcessType 的 public 值是在 BPMN1.2 中被命名的。 Private 狀態,表示Process 只用於特定組織內部。 默認值是 None 狀態,表示沒有指定。 |
IsExecutable:Boolean[0..1] |
是可選的屬性,表是Process 是否可執行。 可執行的 Process 是按照 14章的語義標准建模的(參見原文426頁)。當然,在 Process 開發過程中,會出現沒有足夠細節來執行的時候。 不可執行的 Process 是一個私有的流程,是在模型定定級別,以描述Process行為的文檔。這些流程定義中,並不包含那些需要需要執行的信息,如條件表達式信息。 對於處於 public 狀態下的 Process,沒有這個屬性就等效於IsExecutable 為 False。對 public 狀態下的 Process , IsExecutable 不應該為 True。 |
auditing :Auditing[0..1] |
這個屬性用於關聯特性(properties)審計信息。 |
monitoring:Moitoring[0..1] |
這個屬性用於關聯特性(properties)監測信息。 |
artifacts:Artifact[0..*] |
這個屬性用於本Process存儲一個構件(Artifacts)列表。 |
IsClosed:Boolean=false |
布爾值。當Process被運行或操作時,該值用於表明交互功能是否能發生,比如消息(Messages)和事件(Events)是否能發送和接收。 |
supports:Process[0..*] |
建模時可以申明一個流程(Process) 或一組流程(Processes) 需要支持的功能和操作。這意味着,這一組流程(Processes)中每一個流程(Process)都支持相同的功能和操作。 |
properties:Property[0..*] |
建模時自定義的特性(properties)應該被加到流程類(Process)中。這些特性(properties)被包含在Process類中。所有的任務類(Tasks)和子流程類(SubProcess)需要能訪問這些特性(properties)。 |
resources:ResourceRole[0..*] |
定義了資源(resource)可以執行和對流程類(Process)負責。這里的資源包括流程的執行者(performer)以及表單(form)中指定的個人(individual)、小組(group)、組織角色(organization role)、職位(position)和組織(organization) 注:對流程類(Process)中資源(resources)進行賦值,並不影響該流程類中所包含的活動類(Activities)的資源。關於資源賦值更多的細節信息查看原文的 154 頁。 |
correlationSubscriptions: CorrelationSubscription[0..*] |
關聯訂閱(correlationSubscriptions)是基於內容關聯的特征(feature)見原文章節 8.3.3。關聯訂閱(correlationSubscriptions)用於將進入消息(Messages)關聯到流程(Process)中的數據。一個流程(Process)可以包含多條關聯訂閱(correlationSubscriptions) |
definitionalCollaborationRef: Collaboration[0..1] |
對於與其他參與者交互的流程組(Processes),其中的流程(Process)可以引用一個明確的協作(Collaboration)。通過這個協作(Collaboration)描述該流程的參與者,也可以描述參與者通過消息流(Message Flows)關聯的服務(service)、發送和接收任務(Task)或者信息事件(Message Event)。這個明確的協作(collaboration)不能被禁止。另外,這個協作(collaboration)也能在流程類(Process)中用來包含會話(Conversation) |
另外,流程實例含有一個可以被表達式(Expression)引用的屬性(attribute)。這些值只有在流程類(Process)被執行時才是有效的。見表 10.2
表 10.2 -- 流程實例屬性表
屬性名 |
使用說明 |
state: string = None |
在原文13.2.2節查找允許的值,查看圖13.2(BPMN Activity的生命周期) |
10.1.1 流程基本概念 (Basic Process Concepts)
10.1.1 BPMN流程中的類型(Types)
商業流程(Business Process)建模補廣泛用於和各種人群溝通各類信息。BPMN 被設計成覆蓋多種類型的建模,允許明確的端到端(end-to-end)的商業過程(Business Processes)。這里有三種基本的商業流程(Business Processes):
1、 (內部)私有的不需要運行的商業流程(Business Processes)
2、 (內部)私有的能執行的商業流程
3、 公共的商業流程
10.1.1.1 (內部)私有的商業流程(Business Processes)
私有商業流程存在於某個特定組織內部。這些流程組(Processes)通常被稱為工作流(workflow)或BPM流程(如圖 10.4))。另一個典型的同義詞應用在Web services領域,叫做流程編排服務(Orchestration of services)。存在兩種私有流程:能執行的和不能執行的。能執行的流程是為某種目的,按14章(原文426頁)的要求,依照語義定義建模實現的。當然在開發過程中,會有因細節信息不足而不能執行的階段。不能執行的流程是為使用流程文檔化的目的,在詳細建模的級別上進行建模。通常這樣的流程缺少執行信息,如缺少條件表達式(condition Expressions)。
如果私有商業流程使用了一個泳道符號(例如在協作圖 Collaboration 中,如下圖),那么私有商業流程將包含一個單一的泳池(Pool)。流程中的流節點(flow)因此被包含在泳池中,不能放到泳池外。但消息流(Messages)能穿過池子的邊界,用來表示在不同的私有商業流程間進行交互。
10.1.1.2 公共流程(Public Process)
一個公共流程用於描述一個私有流程和其它流程或參與者之間的交互(如圖 10.5)。僅有那些用於和其它參與者通信的活動(Activities)加上這些活動上的訂單(order)被包括在公共流程中。這個私有商業流程中的所有其它的內部活動(Activities)不會在公共流程中顯示。因此,公共流程顯示需要商業流程與外部交互的外部世界的消息(Messages)和消息內的訂單(order)信息。公共流程可單獨建模,或者作為一個協作(Collaboration)的部分出現,用於顯示公共的流程活動(Process Activities)和其他參與者之間的消息流(Messages)。注:流程的公共類型屬性在BPMN 1.2中被提出的。
10.1.2 使用BPMN 的通用元素(Common Elements)
一些 BPMN 元素在流程(Process)和流程編排(Choreography)和協作(Collaboration)中是通用的。接下來的幾個小節描述消息(Messages)消息流(Message Flows)參與者(Participants)箭頭(Sequence Flows)構件(Artifacts)關聯(Correlations)表達式(Expressions)和流程編排中的服務(services in Choreography)的用法。
網關(Gateways)和事件(Events)作為關鍵的圖形元素,在流程編排(Choreography)和流程(Process)之間也是通用的。因為他們是非常重要的符號,會作為本章的主要小節出現(事件Events 在原文的 233頁,網關Gateways 在原文的 287頁)。