天天看點

activiti7(一):思想指導實踐——BPMN2.0規範背景前言一、BPMN2.0介紹二、BPMN2.0規範的基礎元素三、後記

背景

我們都知道用acitiviti進行開發的一個基本流程是:

1)使用bpmn符号畫業務流程圖——》對業務流程進行模組化

2)部署業務流程——》将畫好的業務流程圖交給工作流引擎解析執行

3)啟動流程執行個體

4)查詢待辦任務

5)辦理待辦任務(④、⑤可能會循環好幾遍)

6)流程結束

第一步就是畫流程圖,但如果對bpmn符号不熟悉,畫不出來流程圖,就無法開展接下來的工作。一些特殊的業務流程,需要特殊的bpmn符号來處理,如果不知道這個bpmn符号的話,開發思路就會受到限制。是以無論是作為工作流開發任務還是業務人員,都有必須先了解一下bpmn規範。

前言

個人認為activiti工作流引擎要分為兩部分學習,第一個是BPMN2.0規範,第二個是activiti架構本身。他倆的關系是一個定義了規範,一個負責規範的實作,就好比JMS和ActiveMQ的關系、JDBC和各種資料庫連接配接驅動的關系一樣,先有規範後有具體的實作。規範通俗點講,就是一個大家商量好的共同去遵守的東西,就跟各種協定似的。學會了規範再看具體實作的時候,思路脈絡就會很清晰,就能知其是以然了。在計算機世界裡面,規範很重要。

一、BPMN2.0介紹

BPMN2.0(Business Process Model And Notation,業務流程模型和符号),是一種業務流程模組化規範,提供了一套對業務流程模組化的标記語言。起初由BPMI(The Business Process Management Initiative)在2004年推出BPMN1.0版本,後BPMI并入到OMG組織,OMG于2011年推出BPMN2.0标準。BPMN的主要目标是提供一套被所有業務使用者容易了解和使用的标準符号,利用這些符号将業務流程模組化簡單化、圖形化,将複雜的模組化過程視覺化,讓業務模組化者、業務實施人員、管理監督人員對BPMN描述的業務流程有一個更加清晰明了的認識。從業務流程模組化分析到流程的實作,直到最終使用者的管理監控,BPMN2.0都貫穿其中。可以說BPMN在業務流程設計(業務流程圖)與流程實作(工作流引擎)之間搭建了一條标準化的橋梁。一句話BPMN2.0幫助我們規範的畫流程圖。

ps:

bpmn2.0有一個很大的符号集合,如果業務流程比較簡單,隻需要了解幾個關鍵的符号即可,當已知的bpmn符号無法滿足業務需求時,再去學習更多的bpmn符号也不遲。

下面對bpmn符号進行一下簡單介紹。

二、BPMN2.0規範的基礎元素

大緻分為四類:

1、流對象(Flow Objects):包括事件、活動、網關,是BPMN中的核心元素。

1.1、事件

作用:用于對流程生命周期中發生的事件進行模組化。

分類:

1.1.1 開始事件:開始事件訓示流程從何處開始。

    1)空開始事件

定義:沒有啟動事件,需要調用startProcessInstanceByXXX方法執行該空開始事件。

圖形表示

activiti7(一):思想指導實踐——BPMN2.0規範背景前言一、BPMN2.0介紹二、BPMN2.0規範的基礎元素三、後記

XML表示

<startEvent id="start" name="my start event" />
           

1.1.2 中間事件:

1.1.3 結束事件:标志着流程的結束。

   1)空結束事件

定義:沒有結束事件,當流程引擎檢測到執行到該空結束事件時會自動執行,已結束整個流程。

圖形表示

activiti7(一):思想指導實踐——BPMN2.0規範背景前言一、BPMN2.0介紹二、BPMN2.0規範的基礎元素三、後記

xml表示

<endEvent id="end" name="my end event" />
           

4)邊界事件:

1.2任務(活動)

定義:任務表示流程中具體要做的事情,通常一個任務表示工作需要被外部實體完成,比如人工任務和自動服務。

圖形表示:任務通常有圓角矩形表示,内部文字為任務名稱或描述,左上角的圖示表示任務類型。

分類:

1.2.1 人工任務(user task)

定義:

最典型的任務。需要由人工來完成的任務,比如請假審批、财務稽核等。

圖形符号

activiti7(一):思想指導實踐——BPMN2.0規範背景前言一、BPMN2.0介紹二、BPMN2.0規範的基礎元素三、後記

xml表示

id是必須的,name是可選的,通過documentation元素對任務進行描述。任何bpmn2.0元素都可用documentation元素進行描述。

<userTask id="theTask" name="Schedule meeting" > <documentation> Schedule an engineering meeting for next week with the new hire. </documentation> </userTask>
           

到期日

可通過dueDate字段設定任務的到期時間。

使用者配置設定

人工任務可配置設定給三種人:assignee(辦理人、受讓人),candidate(候選人),candidateGroup(候選人組)

》assignee是任務的實際辦理人,任務隻能同時有一個辦理人。

》任務可以有多個候選人,每個候選人都能看到該任務,候選人需要claim(拾取)任務成為assignee後,才能進行任務的辦理,任務被拾取後其他候選人就看不到該任務了。候選人在拾取任務後可以unclaim,将任務歸還,此時其他候選人可以看到并claim任務。

》不想單獨指定多個候選人,可以指定一個候選人組,一般為角色ID。

配置設定方式有三種:

1)畫圖時寫死。

2)通過UEL表達式動态設定。

3)通過TaskListener監聽器指定。

1.2.2 java服務任務(service task)

定義:

用于調用外部Java代碼。

圖形符号

activiti7(一):思想指導實踐——BPMN2.0規範背景前言一、BPMN2.0介紹二、BPMN2.0規範的基礎元素三、後記

xml表示

<serviceTask id="javaService" name="My Java Service Task" activiti:class="org.activiti.MyJavaDelegate" />
           

1.2.3 腳本任務(script task)

定義:

用于執行腳本檔案(如javascript)

圖形符号

activiti7(一):思想指導實踐——BPMN2.0規範背景前言一、BPMN2.0介紹二、BPMN2.0規範的基礎元素三、後記

xml表示

<scriptTask id="theScriptTask" name="Execute script" scriptFormat="groovy"> 
    <script> 
        sum = 0 
        for ( i in inputArray ) { 
            sum += i 
        } 
    </script> 
</scriptTask>
           

1.2.4 web服務任務

:用于調用外部web接口服務。

1.2.5 郵件任務(acticiti專有,非BPMN2.0規範)

:用于發送郵件。

還有手工任務、java接收任務、shell任務等。

1.3網關(節點)

作用:用來控制流程的流向。

圖形表示:網關通常以菱形圖形表示,内部帶有一個圖示。該圖示顯示網關的類型。

分類:

1.3.1 排他網關(exclusiveGateway)

定義

也叫XOR網關,對所有的傳出分支進行條件判斷,僅選擇一個條件為true的分支執行,當有多個分支條件滿足時,預設執行xml中定義的第一個。若多個分支條件都不滿足時,就走預設順序流。如果沒有預設順序流,将抛出異常。

圖形符号

activiti7(一):思想指導實踐——BPMN2.0規範背景前言一、BPMN2.0介紹二、BPMN2.0規範的基礎元素三、後記

xml表示

<exclusiveGateway id="exclusiveGw" name="Exclusive Gateway" />
           

1.3.2 并行網關(parallelGateway)

定義:

并行網關模拟多個同時并行執行的流程這種情況。兩個特點:

1、具有fork-join行為(發散和彙聚,想起了java中的fork-join線程架構),即從并行網關傳出的流程會并行執行,傳入并行網關的流程會進入裡面等待,知道并行的流程都進入到并行網關後,再一起發散出去。

2、并行網關忽略分支的條件判斷。

圖形符号

activiti7(一):思想指導實踐——BPMN2.0規範背景前言一、BPMN2.0介紹二、BPMN2.0規範的基礎元素三、後記

xml表示

<parallelGateway id="myParallelGateway" />
           

包含網關(inclusiveGateway)

定義:

看作是排他網關和并行網關的組合,包含網關既能進行條件判斷,又能并行執行多個分支。

圖形符号

activiti7(一):思想指導實踐——BPMN2.0規範背景前言一、BPMN2.0介紹二、BPMN2.0規範的基礎元素三、後記

xml表示

<inclusiveGateway id="myInclusiveGateway" />
           

還是事件網關等。

2、順序流。

定義:順序流就是事件,活動和網關之間的連線,顯示為一條實線 帶有箭頭,在BPMN圖形中每個順序流都有一個源頭和一個 目标引用,包含了 活動,事件或網關的id。

<sequenceFlow id="myFlow" name="MyFlow" sourceRef="sourceId" targetRef="targetId" />
           

分類:

2.1 條件順序流

定義:

給順序流添加表達式條件,當條件判斷為true時,該順序流将會被執行。這意味着如果多個順序流的條件都為true時,會有多個順序流并行執行。

圖形符号:

activiti7(一):思想指導實踐——BPMN2.0規範背景前言一、BPMN2.0介紹二、BPMN2.0規範的基礎元素三、後記

XML表示

條件序列流在XML中表現為正常序列流,其中包含conditionExpression子元素。目前conditionalExpression僅可與UEL一起使用。

<sequenceFlow id="flow" sourceRef="theStart" targetRef="theTask"> 
    <conditionExpression xsi:type="tFormalExpression"> 
        <![CDATA[${order.price > 100 && order.price < 250}]]> 
    </conditionExpression>
</sequenceFlow>
           

2.2 預設順序流

定義:

所有BPMN 2.0任務和網關都可以具有預設序列流。當且僅當其他條件順序流都為false時,才選擇執行預設順序流。預設序列流的條件總是被忽略。

圖形符号:

預設序列流是開始處帶有斜杠标記的正常順序流。

activiti7(一):思想指導實踐——BPMN2.0規範背景前言一、BPMN2.0介紹二、BPMN2.0規範的基礎元素三、後記

xml表示:

通過default屬性執行預設順序流。flow2為排他網關的預設順序流。

<exclusiveGateway id="exclusiveGw" name="Exclusive Gateway" default="flow2" />         
      <sequenceFlow id="flow1" sourceRef="exclusiveGw" targetRef="task1">     
          <conditionExpression xsi:type="tFormalExpression">
            ${conditionA}    
          </conditionExpression> 
       </sequenceFlow> 
      <sequenceFlow id="flow2" sourceRef="exclusiveGw" targetRef="task2"/> 
      <sequenceFlow id="flow3" sourceRef="exclusiveGw" targetRef="task3"> 
         <conditionExpression xsi:type="tFormalExpression">
            ${conditionB}
         </conditionExpression> 
      </sequenceFlow>
</exclusiveGateway>
           

3 泳道(Swimlanes):包括池和道兩種類型;

4人工産物(包含文字注釋、組和資料對象)

三、後記

本文章的目的,幫助大家了解BPMN2.0規範的内容,更好的畫業務流程圖,當你看到一個BPMN2.0符号時,能認識他、知道它的作用、知道怎樣用xml來表示該符号就行了。

好了,BPMN2.0規範就先介紹這麼多吧,靈活運用以上符号能解決70%的業務流程場景。如果有需要了解更多bpmn2.0規範的小夥伴,可以在評論區留言,我會适當的更新更多的内容。

參考:

https://www.activiti.org/userguide/

https://docs.awspaas.com/reference-guide/aws-paas-process-reference-guide/process_structure/README.html

http://www.mossle.com/docs/jbpm4devguide/html/bpmn2.html

繼續閱讀