天天看點

Flowable基礎知識點總結流程部署設計到的表流程定義相關知識點節點相關知識點 變量相關的操作

流程部署設計到的表

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說明流程變量綁定了目前的任務,當流程繼續執行時,下個任務擷取不到這個流程變量(因為

                      正在執行的流程變量中沒有這個資料),是以查詢真在執行的任務時不能查詢到我們需要的資料,此時需要查詢曆史流程變量。

      臨時變量不會持久化到資料庫中。使用場景例如:任務節點後連線中變量參與計算 但是不用持久化到資料庫中的資料。