Activiti與BPMN2.0規(guī)范

本章內(nèi)容根據(jù)BPMN2.0規(guī)范的分類劃分為以下部分:
1.啟動與結(jié)束事件(event)
2.順序流(Sequence Flow)
3.任務(wù)(Task)
4.網(wǎng)關(guān)(Gateway)
5.子流程(Subprocess)
6.邊界事件(Boundary Event)
7.中間事件(Intermediate Event)
8.監(jiān)聽器(Listener)

一 啟動事件與結(jié)束事件

啟動事件與結(jié)束事件是很重要的一部分攀细,分別負(fù)責(zé)流程的開始與結(jié)束
圖例:


結(jié)束事件
啟動事件
1.1 啟動事件

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

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

以上XML表示一個空啟動事件接谨,由于startEvent標(biāo)簽內(nèi)沒有任何元素定義剂癌,因此表示一個空啟動事件

屬性名稱 屬性說明
avtiviti:formKey Activiti擴展的formKey屬性哪自,可以用來指定啟動事件關(guān)聯(lián)的表單文件
activiti:initiator activiti擴展的initiator事件线得,可以用來記錄啟動流程人的ID顶霞,啟動流程之后此屬性指定的變量就會自動設(shè)置當(dāng)前人的名稱

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

定時啟動事件

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

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

屬性名稱 屬性說明
timeDate 一次性定時啟動睦擂,具體到一個日期
timeDuration 設(shè)置多長時間之后啟動流程
timeCycle 周期性啟動任務(wù),用來設(shè)定循環(huán)的時間間隔杖玲,表示多長時間執(zhí)行一次循環(huán)

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

異常啟動事件

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

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

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

消息啟動事件
1.2 結(jié)束事件

結(jié)束事件又分為:
空結(jié)束事件
異常結(jié)束事件
取消結(jié)束事件

1.空結(jié)束事件
結(jié)束事件是拋出型的囤采∈瞿牛空結(jié)束事件不處理拋出結(jié)果,空結(jié)束事件一般用于正常結(jié)束流程

空結(jié)束事件

2.異常結(jié)束事件
異常結(jié)束事件時有拋出結(jié)果的蕉毯,它定義了需要拋出的錯誤代碼乓搬,如果找到了異常開始事件定義的異常代碼思犁,則會觸發(fā)異常開始事件,否則按照空結(jié)束事件處理

異常結(jié)束事件

3.終止結(jié)束事件
他可以終止一個流程實例的執(zhí)行

終止結(jié)束事件

4.取消結(jié)束事件
取消結(jié)束事件可以取消一個事務(wù)子流程的執(zhí)行缤谎,同時也能在子流程中使用抒倚,
當(dāng)子流程在執(zhí)行過程中出現(xiàn)異常時,可以設(shè)置一個取消結(jié)束事件

二 任務(wù)

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

2.1 用戶任務(wù)

用戶任務(wù)

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

以上XML定義了一個用戶任務(wù)

屬性名稱 屬性說明
activiti:assignee 用來指定用戶任務(wù)的處理人
activiti:cadidateUsers 用來指定用戶任務(wù)的候選人坷澡,多個用逗號隔開
activiti:cadidateGroups 用來指定多個候選組托呕,多個用逗號隔開
activiti:dueDate 設(shè)置任務(wù)的到期日,通常用變量代替而不是設(shè)定一個具體的日期
activiti:priority 設(shè)定任務(wù)的優(yōu)先級频敛,取值區(qū)間[0,100]

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

腳本任務(wù)
屬性名稱 屬性說明
scriptFormat 用來指定符合規(guī)范的腳本類型
activiti:resultvariable 把腳本處理的結(jié)果保存到一個變量中
activiti:priority 設(shè)定任務(wù)的優(yōu)先級项郊,取值區(qū)間[0,100]

2.3 Java Service 任務(wù)
JavaService 任務(wù)允許指定一個實現(xiàn)了指定接口的java類,或者執(zhí)行一個表達(dá)式斟赚,可以把一個結(jié)果保存到一個變量中

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

2.4 WebServices 任務(wù)
通過WebServices任務(wù)可以調(diào)用外部的WebServices資源着降,完成調(diào)用只需要一些必須的配置就行

2.5 業(yè)務(wù)規(guī)則任務(wù)
業(yè)務(wù)規(guī)則任務(wù)可以根據(jù)流程變量的值預(yù)設(shè)的業(yè)務(wù)規(guī)則,就是把業(yè)務(wù)數(shù)據(jù)交由規(guī)則引擎處理拗军,規(guī)則引擎根據(jù)不同的業(yè)務(wù)規(guī)則得到最終的結(jié)果在返回給調(diào)用者

業(yè)務(wù)規(guī)則任務(wù)
屬性名稱 屬性說明
activiti:relues 定義規(guī)則的名稱任洞,多個用逗號隔開
activit:ruleVariablesInput 業(yè)務(wù)規(guī)則需要的 數(shù)據(jù)源使用${fooVar方式定義,多個用逗號隔開}
activit:ruleVariablesName 規(guī)則執(zhí)行結(jié)果變量发侵,變量的值為ruleVariablesInput定義的變量集合
activiti:execlude 用來設(shè)置是否排除某些規(guī)則

2.6 郵件任務(wù)
郵件任務(wù)可以通過Activiti發(fā)送郵件交掏,其中郵件的信息通過變量的方式傳遞

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

三 網(wǎng)關(guān)

網(wǎng)關(guān)用于控制流程的走向步责,可分為:
排他網(wǎng)關(guān)
并行網(wǎng)關(guān)
包容網(wǎng)關(guān)
事件網(wǎng)關(guān)
3.1 排他網(wǎng)關(guān)
排他網(wǎng)關(guān)用來對流程中的決定進行建模返顺,流程執(zhí)行到該網(wǎng)關(guān)時,按照輸出流的順序逐個計算勺择,當(dāng)條件計算結(jié)果為true時,繼續(xù)執(zhí)行伦忠,如果多個線路的計算結(jié)果都為true時省核,那么只會執(zhí)行第一個值為true的網(wǎng)關(guān)

排他 網(wǎng)關(guān)

3.2 并行網(wǎng)關(guān)
并行網(wǎng)關(guān)用來對并發(fā)的任務(wù)進行流程建模,并行網(wǎng)關(guān)的任務(wù)取決于輸入昆码,輸出順序流
拆分:并行執(zhí)行所有的輸出輸入順序流气忠,并且為每一條順序流創(chuàng)建一個并行執(zhí)行線路
合并:所有從并行網(wǎng)關(guān)拆分并執(zhí)行完成的線路均在此等候邻储,直到所有的線路都執(zhí)行完成才繼續(xù)向下執(zhí)行

并行網(wǎng)關(guān)

3.3包容網(wǎng)關(guān)
包容網(wǎng)關(guān)融合了排他網(wǎng)關(guān)和并行網(wǎng)關(guān)的特性,包容網(wǎng)關(guān)既可以同事執(zhí)行多條線路旧噪。有允許在網(wǎng)關(guān)上設(shè)置條件吨娜,也分為拆分與合并

包容網(wǎng)關(guān)

3.4 事件網(wǎng)關(guān)
事件網(wǎng)關(guān)是專門為中間捕獲事件設(shè)置的,它允許多個輸出流指向多個不同的中間捕獲事件淘钟。當(dāng)流程執(zhí)行到事件網(wǎng)關(guān)后流程處于等待的狀態(tài)宦赠,因為中間等待事件需要依賴中間拋出事件觸發(fā)

事件網(wǎng)關(guān)

四 子流程

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

4.1 調(diào)用活動
調(diào)用活動解決的問題是流程的通用性勾扭,和子流程一樣只不過表現(xiàn)的方式不同而已

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

五 監(jiān)聽器

在Activiti 中開發(fā)人員可以通過配置監(jiān)聽器的方式監(jiān)聽各種動作铁瞒,例如流程 的啟動妙色,結(jié)束,創(chuàng)建慧耍,任務(wù)的完成
監(jiān)聽器分為兩類:執(zhí)行監(jiān)聽器和任務(wù)監(jiān)聽器

執(zhí)行監(jiān)聽器可以捕獲的事件如下:
流程實例的啟動身辨,結(jié)束
輸出流的捕獲
活動的啟動,結(jié)束
路由開始芍碧,結(jié)束
中間事件開始煌珊,結(jié)束
觸發(fā)開始事件,觸發(fā)結(jié)束事件

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 {
}
}

任務(wù)監(jiān)聽器相對于執(zhí)行監(jiān)聽器的使用范圍要小的多师枣,因為它只適用于用戶任務(wù)怪瓶,用來監(jiān)聽3鐘事件
create:在任務(wù)被創(chuàng)建且所有的任務(wù)屬性設(shè)置完成后才觸發(fā)
assignment:在任務(wù)被分配給某個辦理人之后觸發(fā)
complete:在配置了監(jiān)聽器的上一個任務(wù)完成時觸發(fā)

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
}
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市践美,隨后出現(xiàn)的幾起案子洗贰,更是在濱河造成了極大的恐慌,老刑警劉巖陨倡,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件敛滋,死亡現(xiàn)場離奇詭異,居然都是意外死亡兴革,警方通過查閱死者的電腦和手機绎晃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來杂曲,“玉大人庶艾,你說我怎么就攤上這事∏婵保” “怎么了咱揍?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長棚饵。 經(jīng)常有香客問我煤裙,道長掩完,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任硼砰,我火速辦了婚禮且蓬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘题翰。我一直安慰自己恶阴,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布遍愿。 她就那樣靜靜地躺著存淫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沼填。 梳的紋絲不亂的頭發(fā)上桅咆,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機與錄音坞笙,去河邊找鬼岩饼。 笑死,一個胖子當(dāng)著我的面吹牛薛夜,可吹牛的內(nèi)容都是我干的籍茧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼梯澜,長吁一口氣:“原來是場噩夢啊……” “哼寞冯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起晚伙,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤吮龄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后咆疗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漓帚,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年午磁,在試婚紗的時候發(fā)現(xiàn)自己被綠了尝抖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡迅皇,死狀恐怖昧辽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情登颓,我是刑警寧澤搅荞,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響取具,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜扁耐,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一暇检、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧婉称,春花似錦块仆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至俗壹,卻和暖如春科汗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绷雏。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工头滔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人涎显。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓坤检,卻偏偏與公主長得像,于是被迫代替她去往敵國和親期吓。 傳聞我的和親對象是個殘疾皇子早歇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容