流程部署設計到的表
act_re_deployment(部署對象表)存放流程定義的顯示名和部署時間,每部署一次增加一條記錄
act_re_procdef(流程定義表)
存放流程定義的屬性資訊,
部署每個新的流程都會在這張表中增加一條記錄。當流程定義的key相同的情況下,使用的是版本更新。
act_ge_bytearry(資源檔案表)
存放流程定義相關的部署資訊。即流程定義文檔的存放處。每部署一次會增加兩條記錄,一條是
關于bpmn規則檔案的,一條是圖檔的(如果部署時隻指定了bpmn一個檔案,Folwable會在部署時
解析bpmn檔案内容自動生成流程圖)。兩個檔案不是很大,都是以二進制形式存儲在資料庫中。
act_ge_property:主鍵生成政策表。
流程定義相關知識點
流程定義:
流程定義類。可以從這裡獲得資源檔案等。
類似我們定義的java類,提前定義一系列的規則。
流程執行個體:
代表流程定義的執行執行個體。如學生張三請了一天的假,他就必須發出一個流程執行個體的申請。
一個流程執行個體就表示了所有的運作節點,我們可以利用這個對象來了解目前流程執行個體的進度等資訊。
流程執行個體就表示一個流程從開始到結束的最大的流程分支,即一個流程中流程執行個體隻有一個。
流程執行個體通常也可以叫做執行執行個體的根節點。
流程執行個體和流程定義為一對多的關系。
執行執行個體:
ProcessInstance Extends Execution,即ProcessInstance就是Execution。
啟動流程的時候會首先建立流程執行個體,然後建立執行執行個體。
流程運轉過程中永遠執行的是自己對應的執行執行個體。
當所有的執行執行個體按照規則執行完畢之後,則執行個體随之結束。
Flowable用這個對象去描述流程執行的每一個節點。
流程按照流程定義的規則執行一次的過程,就可以表示執行對象Execution.
一個流程中,執行對象可以存在多個,但是流程執行個體隻能有一個。
執行執行個體的父級或者父級的父級為流程執行個體。
執行執行個體可能會暫停到某一個活動節點,需要我們去通過特定的api去完成,然後執行執行個體繼續往下走。
節點相關知識點
開始節點:
開始節點代表一個規則的開始。
在一個規則檔案中,開始節點隻能是一個,不能是多個。如果是多個則部署的時候會報錯。
子流程以及引用流程也是如此。開始節點隻能是一個。
啟動流程的時候,從開始節點讓流程執行個體運作。
結束節點:
結束節點代表一個規則的結束。
在一個規則檔案中,結束節點可以是多個。
如果執行個體運轉到結束節點的時候,則表示目前的執行執行個體要結束了,執行執行個體結束則流程執行個體也随之結束。
節點說明:
Flowable中很多類型的事件、活動、網關。
事件有開始事件、結束節點之類的
活動類型比較多,比如人工任務節點,服務任務節點,腳本任務,使用者任務等。
活動節點大概分為兩類:一種是等待節點,也就是說執行個體走到這個類型的節點之後,會停留在這個節點,需要
我們手工去完成目前的節點,這樣執行個體才能繼續往下運轉。一種是非等待節點,也就是說執行個體走到這個節點的時候,會直接完成。
網關可以根據一些條件規則決定執行個體往哪個地方運轉。
接受任務節點(receivetask)使用-流程定義:
接受任務是一個簡單的任務,他會等待對應消息的到達。目前,官方隻是實作了這個任務的java定義。當流程達到接收任務,流程狀态會儲存到資料庫中。
在任務建立後,意味着流程會進入等待狀态,知道流程引擎接收了一個特定的消息,這會觸發流程穿過接收任務繼續執行。
接收任務不會向act_ru_task表中插入資料。
任務說明:
在flowable任務中,主要分為兩大類查詢任務(個人任務群組任務)
确切指定了辦理者的任務,這個任務将成為指定者的私有任務,即個人任務
無法指定具體某一個人來辦理的任務,即可以把任務配置設定給幾個人或者一到多個小組,讓這個範圍内的使用者可以選擇性(如有空餘時間時)來辦理這類任務,即組任務。
設定個人任務處理人的三種方式:
在bpmn中直接寫assignee="張胖子"
在bpmn中寫assignee="#{userId}",變量的值要是String類型的,使用流程變臉指定辦理人
使用TaskListener接口,要使類實作該接口,在類中定義:delegateTask.setAssignee("張胖子");//指定個人任務的辦理人
設定組任務處理人的方式:
在bpmn檔案中直接寫candidateUsers="張胖子,高胖子"。
在bpmn中寫candidateUsers="#{userIds}",變量的值要是String的
使用流程變量指定辦理人:
Map<String,Object> vars=new HashMap<String, Object>();
vars.put("userIds","張胖子,高胖子");
使用TaskListener接口,要使類實作該接口,在類中定義:delegateTask.addCandidateUser("張胖子");
組任務說明:
在類中使用delegateTask.addCandidateUser(userId)的方式配置設定組任務的辦理人,此時張胖子和高胖子是下一任務的辦理人。
通過taskService.claim(taskId, userId)将組任務配置設定給個人任務,也叫認領任務。
注意:認領任務的時候,可以是組任務成員中的人,也可以不是組任務成員中的人,此時通過Type的類型為participant來指定任務的辦理人。
addCandidateUser()向組任務中添加成員,deleteCandidateUser()删除組任務中的成員。
在開發中,可以将每一個任務的辦理人規定好,例如張三的上司是李四和王五,這樣張三送出任務,由李四或者王五去查詢組任務,可以看到對應張三的申請。李四或者王五再由任務認領的方式,由某個人去完成這個任務。
組任務配置設定給個人任務(認領任務):taskService.claim(taskId, userId)。
個人任務配置設定給組任務:taskService.setAssignee(taskId, null)。
個人任務群組任務存放辦理人對應的表:
act_ru_identitylink表存放任務的辦理人,包括個人任務群組任務,表示正在執行的任務
act_hi_identitylink表存放任務的辦理人,包括個人任務群組任務,表示曆史任務
如果是個人任務TYPE的類型表示participant(參與者)
如果是組任務TYPE類型表示candidate(候選者)和participant(參與者)
使用者行為類:UserTaskActivityBehavior,任務處理方法。handleAssignments()方法
服務任務使用:
服務任務是不等待節點。
執行執行個體走到服務任務節點之後會繼續往下流轉。
腳本任務:
腳本任務是不等待節點,經過節點不報錯執行個體繼續向下走。
腳本類型有javascript、groovy、juel
網關:
網關分為三種:排他網關、并行網關、相容網關。
網關主要是為了滿足一些特殊的業務,比如排他網關,可以讓流程執行個體出線分支,當有多個條件滿足的時候隻會走一個執行樹。
并行網關有分流和聚合兩個功能。
相容網關可以成為并行網關使用,也可以當做排他網關使用。
變量相關的操作
流程變量相關概念
流程變量在整個工作流中扮演很重要的作用。例如:請假流程中的請假天數、請假原因等一些參數都為流程變量的泛微。
流程變量的作用域範圍是隻對應一個流程執行個體。各個流程執行個體的流程變臉是不互相影響的。
流程執行個體結束完成以後流程變量還儲存在資料庫中。
設定全局變量說明
流程變量的作用域是流程執行個體,是以隻要設定就可以,不用管在那個階段設定。
基本類型設定流程變量,在taskservice中使用任務ID,定義流程變量的名稱,設定流程變量的值。
Javabean類型設定流程變量,需要這個javabean實作Serializable接口。
設定流程變量的時候,向act_ru_variable和act_hi_variable表中插入資料。
擷取變量說明
流程變量的擷取針對流程執行個體(即1個流程),每個流程執行個體擷取的流程變量是不同的。
使用基本類型擷取流程變量,在taskservice中使用任務ID,流程變量的名稱,擷取流程變量的值。
Javabean類型設定擷取流程變量,除了需要這個javabean實作serializable接口外,還要求流程變量對象的屬性不能發生變化,否則抛出異常。
解決方案:在javabean對象中添加,private static final long serialVersionUID;
runtimeService對象可以設定流程變量和擷取流程變量。
taskService對象可以設定流程變量和擷取流程變量
流程執行個體啟動的時候可以設定流程變量。
任務辦理完成的時候可以設定流程變量。
流程變量可以通過名稱/值的形式設定單個流程變量。
流程變量可以通過Map集合,同僚設定多個流程變量。
Map集合的key表示流程變量的名稱,value表示流程變量的值。
變量總結:
在流程執行或者任務執行的過程中,用于設定和擷取變量,使用量程變量在流程傳遞的過程中傳遞業務參數。
act_ru_variable:正在執行的流程變量表。
act_hi_variable:流程變量曆史表。
sertVariable:設定流程變量的時候,流程變量名稱相同的時候,後一次的值替換前一次的值,而且可以看到task_id的字段不會存放任務ID的值。
setVariableLocal:設定流程變量的時候,針對目前活動的節點設定流程變量,若果一個流程中存在兩個活動節點,針對每個活動節點都設定的流程變量,
即使流程變量的名稱相同,後一次的版本的值也不會替換前一次版本的值,他會使用不同的任務ID作為辨別,存放兩個流程變量值,
而且可以看到task_id的字段會存放任務ID的值。
sertVariable和setVariableLocal的差別:使用setVariableLocal說明流程變量綁定了目前的任務,當流程繼續執行時,下個任務擷取不到這個流程變量(因為
正在執行的流程變量中沒有這個資料),是以查詢真在執行的任務時不能查詢到我們需要的資料,此時需要查詢曆史流程變量。
臨時變量不會持久化到資料庫中。使用場景例如:任務節點後連線中變量參與計算 但是不用持久化到資料庫中的資料。