溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

activiti BPMN---順序流、網(wǎng)關(guān)、任務(wù)、子流程

發(fā)布時間:2020-08-09 11:00:29 來源:網(wǎng)絡(luò) 閱讀:13951 作者:獨孤環(huán)宇 欄目:開發(fā)技術(shù)

一、順序流

1、條件順序流:一個條件

2、默認(rèn)順序流: 只有在節(jié)點的其他外出順序流不能被選中是,才會使用它作為外出順序流繼續(xù)執(zhí)行。 默認(rèn)順序流的條件設(shè)置不會生效。默認(rèn)順序流通過對應(yīng)節(jié)點的default屬性定義

二、網(wǎng)關(guān)

1、排它網(wǎng)關(guān): 內(nèi)部是一個“X”圖標(biāo),用來在流程中實現(xiàn)決策。 當(dāng)流程執(zhí)行到這個網(wǎng)關(guān),所有外出順序流都會被處理一遍。 其中條件解析為true的順序流會被選中,讓流程繼續(xù)運行。 

2、并行網(wǎng)關(guān): 內(nèi)部是一個“加號”圖標(biāo)。它允許將流程 成多條分支,也可以把多條分支 匯聚到一起

3、包含網(wǎng)關(guān): 內(nèi)部包含一個圓圈圖標(biāo),可以看做是排他網(wǎng)關(guān)和并行網(wǎng)關(guān)的結(jié)合體。 和排他網(wǎng)關(guān)一樣,你可以在外出順序流上定義條件,包含網(wǎng)關(guān)會解析它們。 但是主要的區(qū)別是包含網(wǎng)關(guān)可以選擇多于一條順序流,這和并行網(wǎng)關(guān)一樣。

4、基于事件網(wǎng)關(guān): 網(wǎng)關(guān)的每個外出順序流都要連接到一個中間捕獲事件。 當(dāng)流程到達(dá)一個基于事件網(wǎng)關(guān),網(wǎng)關(guān)會進(jìn)入等待狀態(tài):會暫停執(zhí)行。 與此同時,會為每個外出順序流創(chuàng)建相對的事件訂閱。

三、任務(wù)

1、用戶任務(wù): 用戶任務(wù)用來設(shè)置必須由人員完成的工作。 當(dāng)流程執(zhí)行到用戶任務(wù),會創(chuàng)建一個新任務(wù), 并把這個新任務(wù)加入到分配人或群組的任務(wù)列表中。 
2、腳本任務(wù)
:  腳本任務(wù)是一個自動節(jié)點。當(dāng)流程到達(dá)腳本任務(wù), 會執(zhí)行對應(yīng)的腳本。 腳本任務(wù)的流程可以訪問的所有流程變量,都可以在腳本中使用。 也可以在腳本中設(shè)置流程變量,直接調(diào)用 execution.setVariable("variableName", variableValue)。 

<script>

     def scriptVar = "test123"

     execution.setVariable("myVar", scriptVar)

</script>

3、Java服務(wù)任務(wù):  用來調(diào)用外部java類。
4、Web Service任務(wù)
:  用來同步調(diào)用一個外部的Web service
5、業(yè)務(wù)規(guī)則任務(wù)
:  的功能和ServiceTask一樣
6、郵件任務(wù)
:  自動郵件任務(wù)
7、Mule任務(wù)
: mule 是一個以Java為核心的輕量級的消息框架和整合平臺
8、Camel任務(wù)
:  可以從Camel發(fā)送和介紹消息
9、手工任務(wù)
:  用來表示工作需要某人完成,而引擎不需要知道,手工任務(wù)是直接通過的活動, 流程到達(dá)它之后會自動向下執(zhí)行。 
10、Java接收任務(wù)
:  接收任務(wù)是一個簡單任務(wù),它會等待對應(yīng)消息的到達(dá)。
11、Shell任務(wù)
: shell任務(wù)可以執(zhí)行shell腳本和命令

12、執(zhí)行監(jiān)聽器

執(zhí)行監(jiān)聽器可以執(zhí)行外部java代碼或執(zhí)行表達(dá)式,當(dāng)流程定義中發(fā)生了某個事件。 可以捕獲的事件有:

  • 流程實例的啟動和結(jié)束。

  • 選中一條連線。

  • 節(jié)點的開始和結(jié)束。

  • 網(wǎng)關(guān)的開始和結(jié)束。

  • 中間事件的開始和結(jié)束。

  • 開始時間結(jié)束或結(jié)束事件開始。

13、任務(wù)監(jiān)聽器

任務(wù)監(jiān)聽器可以在發(fā)生對應(yīng)的任務(wù)相關(guān)事件時執(zhí)行自定義java邏輯 或表達(dá)式。

任務(wù)監(jiān)聽器支持以下屬性:

  • event(必選):任務(wù)監(jiān)聽器會被調(diào)用的任務(wù)類型。 可能的類型為:

    • create:任務(wù)創(chuàng)建并設(shè)置所有屬性后觸發(fā)。

    • assignment:任務(wù)分配給一些人時觸發(fā)。 當(dāng)流程到達(dá)userTask, assignment事件 會在create事件之前發(fā)生。 這樣的順序似乎不自然,但是原因很簡單:當(dāng)獲得create時間時, 我們想獲得任務(wù)的所有屬性,包括執(zhí)行人。

    • complete:當(dāng)任務(wù)完成,并尚未從運行數(shù)據(jù)中刪除時觸發(fā)。

    • delete:只在任務(wù)刪除之前發(fā)生。 注意在通過completeTask正常完成時,也會執(zhí)行。

  • class:必須調(diào)用的代理類。 這個類必須實現(xiàn)org.activiti.engine.delegate.TaskListener接口。

    public class MyTaskCreateListener implements TaskListener {

     public void notify(DelegateTask delegateTask) {
       // Custom logic goes here
     }

    }

    可以使用屬性注入把流程變量或執(zhí)行傳遞給代理類。 注意代理類的實例是在部署時創(chuàng)建的 (和activiti中其他類代理的情況一樣),這意味著所有流程實例都會共享同一個實例。

  • expression:(無法同時與class屬性一起使用): 指定事件發(fā)生時執(zhí)行的表達(dá)式。 可以把DelegateTask對象和事件名稱(使用task.eventName) 作為參數(shù)傳遞給調(diào)用的對象。

    <activiti:taskListener event="create" expression="${myObject.callMethod(task, task.eventName)}" />
  • delegateExpression可以指定一個表達(dá)式,解析一個實現(xiàn)了TaskListener接口的對象, 這與服務(wù)任務(wù)一致。

    <activiti:taskListener event="create" delegateExpression="${myTaskListenerBean}" />
  • 在activiti 5.12中,我們也介紹了新的任務(wù)監(jiān)聽器,org.activiti.engine.impl.bpmn.listener.ScriptTaskListener。 腳本任務(wù)監(jiān)聽器可以為任務(wù)監(jiān)聽器事件執(zhí)行腳本。

 四、子流程

1、子流程: 一個包含其他節(jié)點,網(wǎng)關(guān),事件等等的節(jié)點。 它自己就是一個流程,同時是更大流程的一部分。
2、事件子流程:  事件子流程可以添加到流程級別或任意子流程級別。用于觸發(fā)事件子流程的事件是使用開始事件配置的。
3、事務(wù)子流程:  事務(wù)子流程是內(nèi)嵌子流程,可以用來把多個流程放到一個事務(wù)里。 事務(wù)是一個邏輯單元,可以把一些單獨的節(jié)點放在一起,這樣它們就可以一起成功或一起失敗。
4、調(diào)用活動(子流程): 這個流程定義需要被很多其他流程定義調(diào)用的時候。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI