activiti5/6 系列之--Activiti與BPMN2.0規范相關節點對應關系


根據BPMN2.0規范的分類划分為以下部分:
1.啟動與結束事件(event)
2.順序流(Sequence Flow)
3.任務(Task)
4.網關(Gateway)
5.子流程(Subprocess)
6.邊界事件(Boundary Event)
7.中間事件(Intermediate Event)
8.監聽器(Listener)

一 啟動事件與結束事件

啟動事件與結束事件是很重要的一部分,分別負責流程的開始與結束
圖例:


 
結束事件
 
啟動事件
1.1 啟動事件

啟動事件又分為:
空啟動事件
定時啟動事件
異常啟動事件
1、空啟動事件

<startEvent id="startevent" name="開始"></startEvent>

以上XML表示一個空啟動事件,由於startEvent標簽內沒有任何元素定義,因此表示一個空啟動事件

屬性名稱 屬性說明
avtiviti:formKey Activiti擴展的formKey屬性,可以用來指定啟動事件關聯的表單文件
activiti:initiator activiti擴展的initiator事件,可以用來記錄啟動流程人的ID,啟動流程之后此屬性指定的變量就會自動設置當前人的名稱

2.定時啟動事件
定時啟動事件可以用於一次性定時啟動,也可以用於特定時間定時啟動

 
定時啟動事件

<startEvent id="timerstartevent1" name="Timer start">
<timerEventDefinition></timerEventDefinition>
</startEvent>

以上XML就表示一個空定時啟動事件

屬性名稱 屬性說明
timeDate 一次性定時啟動,具體到一個日期
timeDuration 設置多長時間之后啟動流程
timeCycle 周期性啟動任務,用來設定循環的時間間隔,表示多長時間執行一次循環

3.異常啟動事件
異常啟動事件可以出發一個異常子流程,但不能通過API方式啟動,總是在另外一個子流程拋出異常結束事件的時候被觸發
異常啟動事件"捕獲型",而異常結束事件是拋出型的

 
異常啟動事件

<endEvent id="errorendevent1" name="ErrorEnd">
<errorEventDefinition></errorEventDefinition>
</endEvent>

以上XML就表示一個空定時啟動事件

4.消息啟動事件
消息啟動事件可以通過一個消息名稱觸發,從而啟動一個流程實例,還可以結合消息拋出事件一起使用

 
消息啟動事件
1.2 結束事件

結束事件又分為:
空結束事件
異常結束事件
取消結束事件

1.空結束事件
結束事件是拋出型的。空結束事件不處理拋出結果,空結束事件一般用於正常結束流程

 
空結束事件

2.異常結束事件
異常結束事件時有拋出結果的,它定義了需要拋出的錯誤代碼,如果找到了異常開始事件定義的異常代碼,則會觸發異常開始事件,否則按照空結束事件處理

 
異常結束事件

3.終止結束事件
他可以終止一個流程實例的執行

 
終止結束事件

4.取消結束事件
取消結束事件可以取消一個事務子流程的執行,同時也能在子流程中使用,
當子流程在執行過程中出現異常時,可以設置一個取消結束事件

二 任務

任務時流程中重要的組成部分,可分為:
用戶任務
腳本任務
WebServices任務
業務規則任務
郵件任務
Mule任務
Camle任務
手動任務
JavaService任務
Shell任務

2.1 用戶任務

 
用戶任務

<process id="myProcess" name="My process" isExecutable="true">
<userTask id="usertask1" name="User Task"></userTask>
</process>

以上XML定義了一個用戶任務

屬性名稱 屬性說明
activiti:assignee 用來指定用戶任務的處理人
activiti:cadidateUsers 用來指定用戶任務的候選人,多個用逗號隔開
activiti:cadidateGroups 用來指定多個候選組,多個用逗號隔開
activiti:dueDate 設置任務的到期日,通常用變量代替而不是設定一個具體的日期
activiti:priority 設定任務的優先級,取值區間[0,100]

2.2 腳本任務
腳本任務可以運行引擎依賴的語言之外的腳本語言

 
腳本任務
屬性名稱 屬性說明
scriptFormat 用來指定符合規范的腳本類型
activiti:resultvariable 把腳本處理的結果保存到一個變量中
activiti:priority 設定任務的優先級,取值區間[0,100]

2.3 Java Service 任務
JavaService 任務允許指定一個實現了指定接口的java類,或者執行一個表達式,可以把一個結果保存到一個變量中

 
JavaServices任務
屬性名稱 屬性說明
activiti:class 實現了接口JavaDelegate的Java類
activit:expression 一個表達式
activiti:delegateExpression 實現了指定接口的表達式
activiti:resultvariable 把腳本處理的結果保存到一個變量中

2.4 WebServices 任務
通過WebServices任務可以調用外部的WebServices資源,完成調用只需要一些必須的配置就行

2.5 業務規則任務
業務規則任務可以根據流程變量的值預設的業務規則,就是把業務數據交由規則引擎處理,規則引擎根據不同的業務規則得到最終的結果在返回給調用者

 
業務規則任務
屬性名稱 屬性說明
activiti:relues 定義規則的名稱,多個用逗號隔開
activit:ruleVariablesInput 業務規則需要的 數據源使用${fooVar方式定義,多個用逗號隔開}
activit:ruleVariablesName 規則執行結果變量,變量的值為ruleVariablesInput定義的變量集合
activiti:execlude 用來設置是否排除某些規則

2.6 郵件任務
郵件任務可以通過Activiti發送郵件,其中郵件的信息通過變量的方式傳遞

 
郵件任務
屬性名稱 是否必須 描述
mailServerHost 郵件任務的主機名,默認為host
mailServerPost 是,如果不是默認的端口 默認為25,如果是使用SSL則為465
mailServerDefaultFrom 發件人email,如果不設置默認為:activiti@activiti.org
mailServerUsername 否,是否需要認證設置 郵件服務認證賬號
mailServerPassword 否,是否需要認證設置 郵件服務認證密碼
屬性名稱 屬性說明
to 必填,收件人,多個收件人用逗號隔開
from 郵件發送人地址,如果不設置則使用mailServerDefaultFrom屬性指定的發件人
subject 發件人email如果不設置,默認為activiti@activiti.org
cc 抄送人列表
bcc 密送人列表
charset 郵件內容字符集,建議使用UTF-8
text 純文本內容的郵件內容
html html格式的郵件內容

三 網關

網關用於控制流程的走向,可分為:
排他網關
並行網關
包容網關
事件網關
3.1 排他網關
排他網關用來對流程中的決定進行建模,流程執行到該網關時,按照輸出流的順序逐個計算,當條件計算結果為true時,繼續執行,如果多個線路的計算結果都為true時,那么只會執行第一個值為true的網關

 
排他 網關

3.2 並行網關
並行網關用來對並發的任務進行流程建模,並行網關的任務取決於輸入,輸出順序流
拆分:並行執行所有的輸出輸入順序流,並且為每一條順序流創建一個並行執行線路
合並:所有從並行網關拆分並執行完成的線路均在此等候,直到所有的線路都執行完成才繼續向下執行

 
並行網關

3.3包容網關
包容網關融合了排他網關和並行網關的特性,包容網關既可以同事執行多條線路。有允許在網關上設置條件,也分為拆分與合並

 
包容網關

3.4 事件網關
事件網關是專門為中間捕獲事件設置的,它允許多個輸出流指向多個不同的中間捕獲事件。當流程執行到事件網關后流程處於等待的狀態,因為中間等待事件需要依賴中間拋出事件觸發

 
事件網關

四 子流程

把一切需要處理的任務歸結到一起作為作為一個大流程的一部分,因為子流程嵌入在主流程中,所有也叫"嵌入式子流程"
子流程限制:
只能包含一個空啟動事件
至少有一個結束事件
在子流程中不能把輸出流設置到子流程之外的活動上

4.1 調用活動
調用活動解決的問題是流程的通用性,和子流程一樣只不過表現的方式不同而已

 
調用活動
屬性名稱 屬性說明
calledElement 流程的ID對應的流程應該獨立存在
activiti:in 調用外部流程時傳入的變量,被調用活動需要獲取主流的信息
activiti:out 調用活動完成后的結果

五 監聽器

在Activiti 中開發人員可以通過配置監聽器的方式監聽各種動作,例如流程 的啟動,結束,創建,任務的完成
監聽器分為兩類:執行監聽器和任務監聽器

執行監聽器可以捕獲的事件如下:
流程實例的啟動,結束
輸出流的捕獲
活動的啟動,結束
路由開始,結束
中間事件開始,結束
觸發開始事件,觸發結束事件

import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.ExecutionListener;
public class ExecutionListenerForFlow implements ExecutionListener{
@Override
public void notify(DelegateExecution delegate) throws Exception {
}
}

任務監聽器相對於執行監聽器的使用范圍要小的多,因為它只適用於用戶任務,用來監聽3鍾事件
create:在任務被創建且所有的任務屬性設置完成后才觸發
assignment:在任務被分配給某個辦理人之后觸發
complete:在配置了監聽器的上一個任務完成時觸發

import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
public class ExecutionListenerForFlow implements TaskListener{
@Override
public void notify(DelegateTask arg0) {
// TODO Auto-generated method stub
}
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM