1.新建一個(gè)流程實(shí)例:
模型名稱:由用戶自定義輸入
模型分類:由用戶自定義選擇
模型key:需要使用審批流程的功能模塊的實(shí)體類名稱(比如請(qǐng)假流程,他的實(shí)體類為L(zhǎng)eave)
模型描述:由用戶自定義輸入
2.解釋審批流首界面屬性含義:
流程名稱:生成的審批流png圖片的后綴,就是一個(gè)標(biāo)識(shí)
名稱:生成審批流文件的前綴,就是一個(gè)標(biāo)識(shí)
描述:目前審批流實(shí)例描述
流程作者:由用戶自定義輸入
流程版本:目前這一版的bpmn.xml的版本,就是一個(gè)標(biāo)識(shí),不是流程模型的版本
目標(biāo)命名空間:bpmn.xml中的targetNameSpace,用來(lái)區(qū)分bpmn.xml文件的,自定義輸入即可
執(zhí)行監(jiān)聽器:業(yè)務(wù)流程運(yùn)行中監(jiān)聽整個(gè)開始,結(jié)束,連線(全局)
事件監(jiān)聽器:選擇流程實(shí)例中的事件進(jìn)行監(jiān)聽(一個(gè)流程實(shí)例中的所有內(nèi)置事件)
信號(hào)定義:定義一些信號(hào)的引用給信號(hào)事件使用,就是讓信號(hào)事件使用我這邊定義的信號(hào)
消息定義:定義一些消息的引用給消息事件使用,跟上面那個(gè)一樣的
3.線含義解釋
流向線:
順序流:也就是單向的連線,比較常用
關(guān)聯(lián)流:跟具體的某個(gè)活動(dòng)進(jìn)行關(guān)聯(lián)比如我那個(gè)補(bǔ)償事件就是一個(gè)做關(guān)聯(lián)用的
4.開始事件
id:當(dāng)前這個(gè)活動(dòng)的id,意思是什么呢就是一個(gè)Id標(biāo)識(shí)相當(dāng)于跟任務(wù)的key一樣,必須唯一,不填內(nèi)部生成一個(gè)sid拼接activiti內(nèi)部規(guī)則生成的唯一id,并且有命名規(guī)則:要以字母或下劃線或(-)字符開頭,后接 XML 規(guī)范中允許的任意字母數(shù)字以清、重音字符展父、變音符號(hào)纹冤、句點(diǎn) (.)陵叽、連字符(-)和下劃線 (_) 的組合。
名稱:由用戶自定義輸入,當(dāng)前節(jié)點(diǎn)名稱
描述:由用戶自定義輸入,當(dāng)前節(jié)點(diǎn)描述
執(zhí)行監(jiān)聽器:業(yè)務(wù)流程運(yùn)行中監(jiān)聽整個(gè)開始,結(jié)束,連線(針對(duì)于當(dāng)前這個(gè)節(jié)點(diǎn))
發(fā)起人:由用戶自定義輸入(可以在監(jiān)聽器中做用戶判斷,一般沒(méi)什么用)
自定義表單:也是由用戶自己設(shè)置表單路徑提供給后端代碼做處理實(shí)現(xiàn)每個(gè)節(jié)點(diǎn)打開頁(yè)面不同,目前功能未實(shí)現(xiàn)
動(dòng)態(tài)表單屬性:設(shè)置一些表單內(nèi)部的一些字段的數(shù)據(jù),目前功能未實(shí)現(xiàn)
5.用戶任務(wù)
任務(wù)監(jiān)聽器:監(jiān)聽目前任務(wù)節(jié)點(diǎn)的生命周期有代理人賦值階段,創(chuàng)建階段,完成階段,刪除階段,后面給大家做實(shí)驗(yàn)
id:跟開始事件ID一樣的,就不多講解了
名稱:由用戶自定義輸入,當(dāng)前節(jié)點(diǎn)名稱
描述:由用戶自定義輸入,當(dāng)前節(jié)點(diǎn)描述
異步:跟定時(shí)器相關(guān)的操作,如果勾選了異步就代表你目前的這個(gè)任務(wù)不在主線程中執(zhí)行,在子線程中執(zhí)行,那
獨(dú)立:把目前這個(gè)異步的節(jié)點(diǎn)進(jìn)行一個(gè)串行化,為什么會(huì)有這個(gè)獨(dú)立這個(gè)東西存在呢,可以看下方解釋
執(zhí)行監(jiān)聽器:業(yè)務(wù)流程運(yùn)行中監(jiān)聽整個(gè)開始,結(jié)束,連線(針對(duì)于當(dāng)前這個(gè)節(jié)點(diǎn)),后面給大家做實(shí)驗(yàn)
任務(wù)多實(shí)例:多實(shí)例就跟寫java代碼使用for循環(huán)一樣,目的把這個(gè)任務(wù)動(dòng)態(tài)的根據(jù)集合分發(fā)給集合中設(shè)置的代理人,就是實(shí)現(xiàn)了個(gè)跟多人審批一樣的操作
下方的這些屬性我采用通俗易懂的講解
基數(shù)(多實(shí)例): 定義創(chuàng)建分發(fā)任務(wù)的次數(shù)(寫法:填數(shù)字就行了比如5),相當(dāng)于for循環(huán)中的i,比如++i
集合(多實(shí)例): 定義創(chuàng)建分發(fā)任務(wù)的集合(寫法:${bean.方法}),相當(dāng)于for循環(huán)讀取的那個(gè)List的集合
元素變量(多實(shí)例):定義集合的變量(寫法:item),相當(dāng)于for循環(huán)讀取的集合中每一個(gè)元素的變量
完成條件(多實(shí)例):定義結(jié)束for循環(huán)的條件(寫法:${bean.方法}),相當(dāng)于for循環(huán)中的break
是否為補(bǔ)償:標(biāo)注目前任務(wù)為補(bǔ)償任務(wù),如果有任務(wù)出錯(cuò)觸發(fā)了錯(cuò)誤邊界事件,會(huì)觸發(fā)補(bǔ)償任務(wù)進(jìn)行補(bǔ)償,需要搭配邊界修正事件一起使用,其實(shí)說(shuō)白了就在出錯(cuò)了再來(lái)一次。
代理人:由誰(shuí)來(lái)處理這個(gè)任務(wù),內(nèi)部又分代理人,候選人,候選組,后面會(huì)給大家測(cè)試
自定義表單:也是由用戶自己設(shè)置表單路徑提供給后端代碼做處理實(shí)現(xiàn)每個(gè)節(jié)點(diǎn)打開頁(yè)面不同,目前功能未實(shí)現(xiàn)
到期日期:由用戶自定義一個(gè)到期日期,這個(gè)日期數(shù)據(jù)是提供給后端代碼做處理,目前功能為實(shí)現(xiàn)(注意采用iso-8601格式比如2021-04-18T15:30:00)
6.結(jié)束事件
id:跟開始事件ID一樣的,就不多講解了
名稱:由用戶自定義輸入,當(dāng)前節(jié)點(diǎn)名稱
描述:由用戶自定義輸入,當(dāng)前節(jié)點(diǎn)描述
執(zhí)行監(jiān)聽器:業(yè)務(wù)流程運(yùn)行中監(jiān)聽整個(gè)開始,結(jié)束,連線(針對(duì)于當(dāng)前這個(gè)節(jié)點(diǎn)),后面給大家做實(shí)驗(yàn)
7.流向線
id:跟開始事件ID一樣的,就不多講解了
名稱:由用戶自定義輸入,當(dāng)前節(jié)點(diǎn)名稱
描述:由用戶自定義輸入,當(dāng)前節(jié)點(diǎn)描述
流轉(zhuǎn)條件:指定條件就行了,然后會(huì)根據(jù)條件是否走你這條線比如${num==5}
執(zhí)行監(jiān)聽器:業(yè)務(wù)流程運(yùn)行中監(jiān)聽整個(gè)開始,結(jié)束,連線(針對(duì)于當(dāng)前這個(gè)節(jié)點(diǎn)),后面給大家做實(shí)驗(yàn)
默認(rèn)流轉(zhuǎn):比如目前有3條線然后這三條線條件都為false,此時(shí)你其中一條勾選了默認(rèn)流轉(zhuǎn),就會(huì)走你勾選了默認(rèn)流轉(zhuǎn)的那條線路,并且忽略掉這一條的流轉(zhuǎn)條件
2.使用bpmn中的常用功能
新增了四個(gè)用戶:小貓,小可愛(ài),小狗,小豬
1.用戶活動(dòng)任務(wù)監(jiān)聽器,監(jiān)聽目前用戶任務(wù)節(jié)點(diǎn)生命周期,創(chuàng)建,代理人賦值,完成,刪除
事件:代理人賦值時(shí),創(chuàng)建,完成,刪除四種,后面測(cè)試他們有什么區(qū)別
注意:類,表達(dá)式,委托表達(dá)式 3選一
類:實(shí)現(xiàn)了TaskListener接口的實(shí)現(xiàn)類,直接復(fù)制粘貼他的類全路徑就好了
表達(dá)式:使用el表達(dá)式就行${bean.方法()}
委托表達(dá)式:使用實(shí)現(xiàn)了activiti內(nèi)置的一些接口的bean比如實(shí)現(xiàn)了TaskListener的bean,此時(shí)直接使用bean的名字就可以了不需要再去調(diào)用方法了,activiti內(nèi)部幫你調(diào)用了
注意:需要給目前的類添加到spring容器中
字段:可以把目前設(shè)置的數(shù)據(jù)注入到類中的成員變量中去
名稱:類中的成員變量名稱
注意:數(shù)據(jù)這邊有三個(gè)填入,只能使用一種
字符串:用FixedValue接收
表達(dá)式:用Expression接收
生命周期順序:如下
用戶點(diǎn)擊提交
進(jìn)入監(jiān)聽代理人賦值階段
進(jìn)入監(jiān)聽用戶任務(wù)創(chuàng)建階段
用戶點(diǎn)擊審批目前任務(wù)
進(jìn)入監(jiān)聽用戶任務(wù)完成階段
進(jìn)入監(jiān)聽用戶任務(wù)刪除階段
2.用戶活動(dòng)執(zhí)行監(jiān)聽器,監(jiān)聽你這個(gè)節(jié)點(diǎn)的啟動(dòng),結(jié)束,還有一個(gè)是監(jiān)聽連線的,在線上面設(shè)置才有用
事件:監(jiān)聽節(jié)點(diǎn)的啟動(dòng),監(jiān)聽節(jié)點(diǎn)的結(jié)束,還有一個(gè)是監(jiān)聽連線的,在線上面設(shè)置才有
其他的就不過(guò)多講解了,上面都講過(guò)了
用戶點(diǎn)擊提交
進(jìn)入監(jiān)聽節(jié)點(diǎn)啟動(dòng)階段
用戶點(diǎn)擊審批
進(jìn)入監(jiān)聽節(jié)點(diǎn)結(jié)束階段
還有一個(gè)是在連線上設(shè)置的
只要到達(dá)了這條線就會(huì)進(jìn)入監(jiān)聽的方法
3.代理
代理人:可以設(shè)置目前用戶名稱比如,小狗
那此時(shí)到達(dá)這個(gè)節(jié)點(diǎn)是小狗用戶就是處理人
候選人:可以設(shè)置多個(gè)用戶用逗號(hào)隔開, 小狗,小可愛(ài),小貓
那此時(shí)到達(dá)這個(gè)節(jié)點(diǎn) 小狗,小可愛(ài),小貓 3人就會(huì)收到這個(gè)流程任務(wù),然后其中一個(gè)用戶處理了該任務(wù)其他用戶那里的流程任務(wù)也會(huì)被刪除,相當(dāng)于就是一個(gè)多人審批其中其中一個(gè)審理了就過(guò)了
候選組:這里是選擇項(xiàng)目中目前的角色,然后查詢當(dāng)前角色下的用戶進(jìn)行一個(gè)分發(fā)流程任務(wù),目前這個(gè)功能未實(shí)現(xiàn)
4.EL表達(dá)式用法
springBrean容器方式:{bean.getUserName('test')}
獲取設(shè)置變量的方式: 有全局變量,跟局部變量
全局變量:整個(gè)流程實(shí)例執(zhí)行中都可以拿到的
局部變量:針對(duì)于某個(gè)節(jié)點(diǎn)才能拿到
例如:${userUp.name}
5.常用的一些網(wǎng)關(guān)
互斥網(wǎng)關(guān):互斥網(wǎng)關(guān)的作用就是在多條線中只會(huì)選擇一個(gè)線去執(zhí)行,比如我兩條線全部為True就會(huì)根據(jù)線的ID去比較看那個(gè)ID小就去執(zhí)行那條線,兩條線False也是一樣的
并行網(wǎng)關(guān):并行網(wǎng)關(guān)的作用可以讓多條線同時(shí)執(zhí)行,不過(guò)會(huì)無(wú)視掉線中的條件,還可以進(jìn)行一個(gè)多條線是否執(zhí)行完畢統(tǒng)計(jì)
包含網(wǎng)關(guān):內(nèi)部實(shí)現(xiàn)了并行網(wǎng)關(guān)跟互斥網(wǎng)關(guān)兩種網(wǎng)關(guān),其實(shí)就是既支持執(zhí)行多條線又支持有判斷條件
3.補(bǔ)充activiti定時(shí)器功能
1.首先需要添加定時(shí)器配置:
//啟用異步執(zhí)行器
config.setAsyncExecutorEnabled(true);
//激活異步執(zhí)行器線程池(Activiti啟動(dòng)創(chuàng)建線程池)
config.setAsyncExecutorActivate(true);
//激活作業(yè)執(zhí)行器(讓定時(shí)器工作)
config.setJobExecutorActivate(true);
2.講解定時(shí)器流程屬性,基本有些定時(shí)器bpmn屬性都是一樣的,大家注意一些靈活應(yīng)用:
這里講解定時(shí)邊界事件
首先來(lái)了解iso-8601,克隆表達(dá)式就不講了弄java的都是很常見的東西了
[R表示重復(fù),S表示秒,M表示分,D表示天,P表示時(shí)間段(比如8點(diǎn)15分),T表示精確到時(shí)間的時(shí)間段(比如8點(diǎn)15分30秒)注意配合使用]
id:跟開始事件ID一樣的,就不多講解了
名稱:由用戶自定義輸入,當(dāng)前節(jié)點(diǎn)名稱
描述:由用戶自定義輸入,當(dāng)前節(jié)點(diǎn)描述
循環(huán)時(shí)間:第一個(gè)觸發(fā)事件后,每隔多長(zhǎng)時(shí)間再觸發(fā)事件,這是一個(gè)持續(xù)的過(guò)程(目前支持兩種格式iso-8601跟cron表達(dá)式)
iso-8601循環(huán)格式:R[循環(huán)次數(shù)][/開始時(shí)間]/時(shí)間間隔[/結(jié)束時(shí)間]
例子:[]的可以忽略不寫
R4/2021-04-12T15:01/PT5S/2021-04-12T15:02:循環(huán)四次從2021年4月12日15點(diǎn)1分間隔5秒到2021年4月12日15點(diǎn)2分結(jié)束
R4/PT1M:循環(huán)四次間隔1分鐘
開始時(shí)間: 指定開始的時(shí)間(目前只支持iso-8601)。
例子:規(guī)定日期和時(shí)間的組合表示時(shí),要在時(shí)間前面加一大寫字母T
2021-04-12T16:04:30:2021年4月12日下午4點(diǎn)30分30秒
持續(xù)時(shí)間:指定多長(zhǎng)時(shí)間以后觸發(fā)事件。如:15 分鐘,2 天等(目前只支持iso-8601格式)
例子:不支持秒
P1D:代表1天后執(zhí)行此時(shí)間定時(shí)器
P1H:代表1小時(shí)后執(zhí)行此時(shí)間定時(shí)器
P1M:代表1分鐘后執(zhí)行此時(shí)間定時(shí)器
PT1M:代表1分鐘后執(zhí)行此時(shí)間定時(shí)器
結(jié)束時(shí)間:指定結(jié)束時(shí)間(目前只支持iso-8601)乞而。
例子:規(guī)定日期和時(shí)間的組合表示時(shí),要在時(shí)間前面加一大寫字母T
2021-04-12T16:04:30:2021年4月12日下午4點(diǎn)30分30秒
取消活動(dòng): 默認(rèn)true超時(shí)會(huì)直接取消這個(gè)定時(shí)器,為false,不取消,設(shè)置結(jié)束時(shí)間到了就會(huì)刪除這個(gè)定時(shí)任務(wù)
3.實(shí)踐操作:
具體定時(shí)器可以做很多事情,我這里為大家演示一般常用的審批代辦提醒功能吧
配置郵件服務(wù)器:開啟pop3,或者開啟對(duì)應(yīng)的郵件smtp服務(wù)器
配置郵件服務(wù)器:
配置定時(shí)邊界事件,循環(huán)4次間隔5秒
提交審批