flowable 會(huì)簽功能實(shí)現(xiàn)理論介紹
1.????什么是會(huì)簽
a)????在流程業(yè)務(wù)管理中,任務(wù)是通常都是由一個(gè)人去處理的,而多個(gè)人同時(shí)處理一個(gè)任務(wù),這種任務(wù)我們稱之為會(huì)簽任務(wù)。
2.????會(huì)簽的種類
a)????按數(shù)量通過(guò):達(dá)到一定數(shù)量的通過(guò)表決后,會(huì)簽通過(guò)。
b)????按比例通過(guò):達(dá)到一定比例的通過(guò)表決后,會(huì)簽通過(guò)。
c)????一票否決:只要有一個(gè)表決時(shí)否定的,會(huì)簽通過(guò)。
d)????一票通過(guò):只要有一個(gè)表決通過(guò)的,會(huì)簽通過(guò)。
3.????flowable實(shí)現(xiàn)會(huì)簽
a)????flowable實(shí)現(xiàn)會(huì)簽是基于多實(shí)例任務(wù),將節(jié)點(diǎn)設(shè)置成多實(shí)例,主要通過(guò)在UserTask節(jié)點(diǎn)的屬性上配置
4.????多實(shí)例相關(guān)屬性,以eclipse中的可視化圖形操作為例

b)????選則一個(gè)用戶任務(wù)在下面的屬性中選擇Multil instance,可以看到有很多屬性
i.????Sequential:執(zhí)行順序。必選項(xiàng),可選值有true、false。用于設(shè)置多實(shí)例的執(zhí)行順序。True:多實(shí)例順序執(zhí)行,false:多實(shí)例并行
ii.????loop cardinality:循環(huán)基數(shù)??蛇x項(xiàng)??梢灾苯犹钫麛?shù),表示會(huì)簽的人數(shù)。
iii.????Collection:集合??蛇x項(xiàng)。會(huì)簽人數(shù)的集合,通常為list。和loop cardinality二選一
iv.????Element variable:元素變量。選擇Collection時(shí)必選,為collection集合每次遍歷的元素
v.????Completion condition:完成條件??蛇x。Activiti會(huì)簽有個(gè)特性,比如設(shè)置一個(gè)人完成后會(huì)簽結(jié)束,那么其他人的代辦任務(wù)都會(huì)消失。
1.????這里需要介紹一下會(huì)簽環(huán)節(jié)中設(shè)計(jì)的幾個(gè)默認(rèn)流程變量
2.????nrOfInstances(numberOfInstances):會(huì)簽中總共的實(shí)例數(shù)
3.????nrOfCompletedInstances:已經(jīng)完成的實(shí)例數(shù)量
4.????nrOfActiviteInstances:當(dāng)前活動(dòng)的實(shí)例數(shù)量,即還沒(méi)有完成的實(shí)例數(shù)量
條件${nrOfInstances == nrOfCompletedInstances}表示所有人員審批完成后會(huì)簽結(jié)束。
條件${ nrOfCompletedInstances == 1}表示一個(gè)人完成審批,該會(huì)簽就結(jié)束。
其他條件依次類推,同時(shí)這里也可以寫自己添加的流程變量。后面實(shí)例中會(huì)體現(xiàn)。
5.任務(wù)監(jiān)聽(tīng)
????a).為了更好的實(shí)現(xiàn)會(huì)簽可以結(jié)合監(jiān)聽(tīng)功能處理,非必選項(xiàng)
b).監(jiān)聽(tīng)種類:有Java class、Expression、Delegate expression、Alfresco execution script、Alfresco task script,因?yàn)楸O(jiān)聽(tīng)非必選,所以只介紹Java class類型的監(jiān)聽(tīng)
????c).監(jiān)聽(tīng)的觸發(fā)條件:對(duì)于任務(wù)監(jiān)聽(tīng)而言有四種觸發(fā)條件,
????????i.create:任務(wù)創(chuàng)建的時(shí)候觸發(fā)監(jiān)聽(tīng)
????????ii.Assignment:設(shè)置受理人的時(shí)候觸發(fā)監(jiān)聽(tīng)
????????iii.Complete:任務(wù)完成的時(shí)候觸發(fā)監(jiān)聽(tīng)
????????iv.All:以上三種事件都會(huì)觸發(fā)監(jiān)聽(tīng)
d).監(jiān)聽(tīng)實(shí)現(xiàn):監(jiān)聽(tīng)的類需要實(shí)現(xiàn)TaskListener接口,重寫notify方法
e).添加監(jiān)聽(tīng),如下圖

?

如上圖所示根據(jù)紅框中的標(biāo)記可以很容易的將自己的監(jiān)聽(tīng)添加到任務(wù)中
6.會(huì)簽實(shí)例:以請(qǐng)假申請(qǐng)為例展示會(huì)簽,會(huì)簽一人拒絕申請(qǐng)不通過(guò),所有人同意申請(qǐng)通過(guò)。
?? ?a).請(qǐng)假流程圖以及相屬性

?

?

這里的Assigner和下圖中的Element variable相同

上圖中的${signList}是存儲(chǔ)會(huì)簽人員的流程變量,signer為每次遍歷時(shí)的臨時(shí)變量名和上圖${signer}對(duì)應(yīng),${pass == false}上文中提到此處可以用會(huì)簽中默認(rèn)的流程變量控制會(huì)簽的過(guò)程也可以使用自己定義的流程變量,這里的pass就是自己定義的流程變量,在會(huì)簽人員處理自己任務(wù)是添加到流程中


b).添加監(jiān)聽(tīng)
i.會(huì)簽人員完成任務(wù)后,需要統(tǒng)計(jì)該任務(wù)的審批結(jié)果,判斷最終該會(huì)簽是通過(guò)還是拒絕本實(shí)例采用監(jiān)聽(tīng)的方式處理,新建監(jiān)聽(tīng)SignListener,
ii.為會(huì)簽任務(wù)添加監(jiān)聽(tīng),事件選擇complete,如下圖

微信技術(shù)交流:zh110906424 ,flowable體驗(yàn)地址:49.233.19.240