Activiti實戰

《Activiti實戰》筆記java

1、 概覽

1.1 結構圖

Activiti結構圖

1.2 Service

RepositoryService 管理流程定義
RuntimeService 執行管理,包括啓動、推動、刪除流程實例等操做
TaskService 任務管理
HistoryService 歷史管理(執行完的數據的管理)
IdentityService 組織機構管理
FormService 一個可選服務,任務表單管理
ManagerService

1.3 數據庫表格

表前綴 類型 含義
ACT_RE_* repository 包含了流程定義和流程靜態資源 (圖片,規則,等等)
ACT_RU_* runtime 運行時的表,包含流程實例,任務,變量,異步任務等運行中的數據,只在流程實例執行過程當中保存數據,在流程結束時刪除記錄, 這樣運行時表能夠一直很小速度很快。
ACT_ID_* identity 包含身份信息,好比用戶,組等
ACT_HI_* history 包含歷史數據,好比歷史流程實例, 變量,任務等
ACT_GE_* general 用於不一樣場景下,如存放資源文件

1.4 Activiti數據表清單

表分類 表名 解釋
通常數據 ACT_GE_BYTEARRAY 通用的流程定義和流程資源
通常數據 ACT_GE_PROPERTY 系統相關屬性
流程歷史記錄 ACT_HI_ACTINST 歷史的流程實例
流程歷史記錄 ACT_HI_ATTACHMENT 歷史的流程附件
流程歷史記錄 ACT_HI_COMMENT 歷史的說明性信息
流程歷史記錄 ACT_HI_DETAIL 歷史的流程運行中的細節信息
流程歷史記錄 ACT_HI_IDENTITYLINK 歷史的流程運行過程當中用戶關係
流程歷史記錄 ACT_HI_PROCINST 歷史的流程實例
流程歷史記錄 ACT_HI_TASKINST 歷史的任務實例
流程歷史記錄 ACT_HI_VARINST 歷史的流程運行中的變量信息
用戶用戶組表 ACT_ID_GROUP 身份信息-組信息
用戶用戶組表 ACT_ID_INFO 身份信息-組信息
用戶用戶組表 ACT_ID_MEMBERSHIP 身份信息-用戶和組關係的中間表
用戶用戶組表 ACT_ID_USER 身份信息-用戶信息
流程定義表 ACT_RE_DEPLOYMENT 部署單元信息
流程定義表 ACT_RE_MODEL 模型信息
流程定義表 ACT_RE_PROCDEF 已部署的流程定義
運行實例表 ACT_RU_EVENT_SUBSCR 運行時事件
運行實例表 ACT_RU_EXECUTION 運行時流程執行實例
運行實例表 ACT_RU_IDENTITYLINK 運行時用戶關係信息
運行實例表 ACT_RU_JOB 運行時做業
運行實例表 ACT_RU_TASK 運行時任務
運行實例表 ACT_RU_VARIABLE 運行時變量表

1.5 核心API

1.5.1 ProcessInstance

表明流程定義的執行實例。流程實例就表示一個流程從開始到結束的最大的流程分支,即一個流程中流程實例只有一個。數據庫

1.5.2 Execution

執行對象Execution,流程按照流程定義的規則執行一次的過程;緩存

  1. 併發執行的流程, 總線路表明ProcessInstance,而分線路中每一個活動表明Execution
  2. 一個流程中,執行對象併發執行的流程, 總線路表明ProcessInstance,而分線路中每一個活動表明Execution
  3. 能夠存在多個,可是流程實例ProcessInstance只能有一個

2、 Method & table

2.1 DeploymentBuilder.deploy()

Deployment deployment = processEngine.getRepositoryService()//
    .createDeployment()
    .addClasspathResource("diagrams/LeaveBill.bpmn")
    .addClasspathResource("diagrams/LeaveBill.png")
    .deploy();
複製代碼

這一步在數據庫中將操做三張表:併發

  1. act_re_deployment(部署對象表)
    存放流程定義的顯示名和部署時間,每部署一次增長一條記錄
  2. act_re_procdef(流程定義表)
    存放流程定義的屬性信息,部署每一個新的流程定義都會在這張表中增長一條記錄。

    注意:當流程定義的key相同的狀況下,使用的是版本升級框架

  3. act_ge_bytearray(資源文件表)
    存儲流程定義相關的部署信息。即流程定義文檔的存放地。每部署一次就會增長兩條記錄,一條是關於bpmn規則文件的,一條是圖片的(若是部署時只指定了bpmn一個文件,activiti會在部署時解析bpmn文件內容自動生成流程圖)。兩個文件不是很大,都是以二進制形式存儲在數據庫中。
  • ACT_RE_PROCDEF
    流程解析表,解析成功了,在該表保存一條記錄。業務流程定義數據表 ACT_RE_PROCDEF(act_re_procdef)異步

    NAME 字段名 字段描述
    ID_ 流程ID {processDefinitionKey}:{processDefinitionVersion}:{generated-id}
    REV_ 版本號
    CATEGORY_ 流程命名空間 流程定義的Namespace就是類別
    NAME_ 流程名稱 該編號就是流程文件process元素的name屬性值
    KEY_ 流程定義ID 該編號就是流程文件process元素的id屬性值
    VERSION_ 流程版本號 由程序控制,新增即爲1,修改後依次加1來完成的
    DEPLOYMENT_ID_ 部署編號 部署表ID
    RESOURCE_NAME_ 流程bpmn文件名稱
    DGRM_RESOURCE_NAME_ png流程圖片名稱
    DESCRIPTION_ 描述信息 描述
    HAS_START_FORM_KEY_ start節點是否存在formKey 0否 1是
    SUSPENSION_STATE_ 是否掛起 1激活 2掛起

    此表和ACT_RE_DEPLOYMENT是多對一的關係,即一個部署的bar包裏可能包含多個流程定義文件,每一個流程定義文件都會有一條記錄在ACT_RE_PROCDEF表內,每一個流程定義的數據,都會對於ACT_GE_BYTEARRAY表內的一個資源文件和PNG圖片文件。和ACT_GE_BYTEARRAY的關聯是經過程序用ACT_GE_BYTEARRAY.NAME與ACT_RE_PROCDEF.NAME_完成的, 在數據庫表結構中沒有體現ide

  • ACT_RE_DEPLOYMENT
    用來存儲部署時須要持久化保存下來的信息ui

    是否主鍵 字段名 字段描述
    ID_ 部署編號,自增加
    NAME_ 部署包的名稱
    CATEGORY_ 類型 VARCHAR(255)
    DEPLOY_TIME_ 部署時間 TIMESTAMP
  • ACT_GE_BYTEARRAY
    保存全部二進制數據 LeaveBill.bpmn和LeaveBill.png都是ResourceEntity,被添加入表中
    ACT_GE_BYTEARRAY(act_ge_bytearray)spa

    Name 字段名 字段描述
    ID_  ID_ 主鍵ID,資源文件編號,自增加
    REV_ 版本號 INT(11)
    NAME_ 部署的文件名稱,
    DEPLOYMENT_ID_ 來自於父表ACT_RE_DEPLOYMENT的主鍵
    BYTES_ 大文本類型,存儲文本字節流 LONGBLOB
    GENERATED_ 是不是引擎生成 0爲用戶生成,1爲Activiti生成

2.2 RuntimeService().startProcessInstanceByKey()

當流程到達一個節點時,會在ACT_RU_EXECUTION表中產生1條數據,若是當前節點是用戶任務節點,這是會在ACT_RU_TASK表中添加一條記錄設計

  1. ACT_RU_TASK(運行時任務數據表)
    (執行中實時任務)代辦任務查詢表
    ACT_RU_TASK(act_ru_task)

    是否主鍵 字段名 字段描述
    ID_
    REV_ 版本號 INT(11)
    EXECUTION_ID_ 實例id(外鍵EXECUTION_ID_) 執行實例ID
    ** PROC_INST_ID_** 流程實例ID(外鍵PROC_INST_ID_) VARCHAR(64)
    PROC_DEF_ID_ 流程定義ID VARCHAR(64)
    NAME_ 任務名稱 節點定義名稱
    PARENT_TASK_ID_ 父節任務ID 父節點實例ID
    DESCRIPTION_ 任務描述 節點定義描述
    TASK_DEF_KEY_ 任務定義key 任務定義的ID
    OWNER_ 所屬人(老版) 擁有者(通常狀況下爲空,只有在委託時纔有值)
    ASSIGNEE_ 代理人員(受讓人) 簽收人或委託人
    DELEGATION_ 代理團 委託類型,DelegationState分爲兩種:PENDING,RESOLVED。如無委託則爲空VARCHAR(64)
    PRIORITY_ 優先權 INT(11)
    CREATE_TIME_ 建立時間 TIMESTAMP
    DUE_DATE_ 執行時間 耗時
    SUSPENSION_STATE_ 暫停狀態 1表明激活 2表明掛起
  2. ACT_RU_EXECUTION(運行時流程執行實例)
    核心,個人待辦任務查詢表
    ACT_RU_EXECUTION(act_ru_execution)

    是否主鍵 字段名 字段描述
    ID_ ID_
    REV_ 版本號 INT(11)
    PROC_INST_ID_ 流程實例編號 VARCHAR(64)
    BUSINESS_KEY_ 業務主鍵ID VARCHAR(255)
    PARENT_ID_ 父執行流程 父節點實例ID
    PROC_DEF_ID_ 流程定義Id VARCHAR(64)
    SUPER_EXEC_ VARCHAR(64) 64
    ACT_ID_ 實例id 節點實例ID即ACT_HI_ACTINST中ID
    IS_ACTIVE_ 激活狀態 是否存活
    IS_CONCURRENT_ 併發狀態 是否爲並行(true/false)
    IS_SCOPE_ TINYINT(4)
    IS_EVENT_SCOPE_ TINYINT(4)
    SUSPENSION_STATE_ 暫停狀態_ 掛起狀態 1激活 2掛起
    CACHED_ENT_STATE_ 緩存結束狀態_ INT(11)
  3. ACT_RU_IDENTITYLINK(身份聯繫)
    主要存儲當前節點參與者的信息,任務參與者數據表。
    ACT_RU_IDENTITYLINK(act_ru_identitylink)

    是否主鍵 字段名 字段描述
    ID_ ID_
    REV_ 版本號 INT(11)
    GROUP_ID_ 用戶組ID VARCHAR(255)
    TYPE_ 用戶組類型 主要分爲如下幾種:assignee、candidate、owner、starter、participant。即:受讓人,候選人,全部者、起動器、參與者
    USER_ID_ 用戶ID VARCHAR(255)
    TASK_ID_ 任務Id VARCHAR(64)
    PROC_INST_ID_ 流程實例ID VARCHAR(64)
    PROC_DEF_ID_ 流程定義Id VARCHAR(64)
  4. ACT_HI_ACTINST(歷史節點表)
    歷史活動信息。這裏記錄流程流轉過的全部節點,與HI_TASKINST不一樣的是,taskinst只記錄usertask內容

    ACT_HI_ACTINST(act_hi_actinst)

    是否主鍵 字段名 字段描述
    ID_ ID_
    PROC_DEF_ID_ 流程定義ID VARCHAR(64)
    PROC_INST_ID_ 流程實例ID VARCHAR(64)
    EXECUTION_ID_ 流程執行ID VARCHAR(64)
    ACT_ID_ 活動ID 節點定義ID
    TASK_ID_ 任務ID 任務實例ID 其餘節點類型實例ID在這裏爲空
    CALL_PROC_INST_ID_ 請求流程實例ID 調用外部流程的流程實例ID'
    ACT_NAME_ 活動名稱 節點定義名稱
    ACT_TYPE_ 活動類型 如startEvent、userTask
    ASSIGNEE_ 代理人員 節點簽收人
    START_TIME_ 開始時間 DATETIME
    END_TIME_ 結束時間 DATETIME
    DURATION_ 時長,耗時 毫秒值

3、 教程

3.1 setVariable和setVariableLocal的區別

  • setVariable
    設置流程變量的時候,流程變量名稱相同的時候,後一次的值替換前一次的值,且TASK_ID的字段不會存聽任務ID的值
  • setVariableLocal
    設置流程變量的時候,針對當前活動的節點設置流程變量,若是一個流程中存在2個活動節點(分支),對每一個活動節點都設置流程變量,即便流程變量的名稱相同,後一次的版本的值也不會替換前一次版本的值,它會使用不一樣的任務ID做爲標識,存放2個流程變量值,並且能夠看到TASK_ID的字段會存聽任務ID的值

3.2 排他網關

只會返回一條結果。當流程執行到排他網關時,流程引擎會自動檢索網關出口,從上到下檢索若是發現第一條決策結果爲true或者沒有設置條件的(默認爲成立),則流出。
使用流程變量,設置連線的條件,並按照連線的條件執行工做流,若是沒有條件符合的條件,則以默認的連線離開.須要設置流程變量,不設置時拋異常,不會走,默認網關

3.3 並行網關

若是同一個並行網關有多個進入和多個外出順序流, 它就同時具備分支和匯聚功能。 這時,網關會先匯聚全部進入的順序流,而後再切分紅多個並行分支。
並行網關不會解析條件, 即便順序流中定義了條件,也會被忽略

3.4 接收活動receiveTask

在任務建立後,意味着流程會進入等待狀態, 直到引擎接收了一個特定的消息, 這會觸發流程穿過接收任務繼續執行.
ReceiceTask任務,機器自動完成的任務,只會在act_ru_execution表中產生一條數據

3.5 我的任務

設置任務辦理人

3.5.1 使用流程變量

使用流程變量設置我的任務

3.5.2 使用類

使用類設置我的任務1
使用類設置我的任務2
使用類設置我的任務代碼
經過 processEngine.getTaskService().setAssignee(taskId, userId);將我的任務從一我的分配給另外一我的,會覆蓋監聽器設置的代辦人

3.6 組任務

  1. 直接指定辦理人
    直接指定辦理人
    查詢組任務成員列表
List<IdentityLink> list = processEngine.getTaskService().getIdentityLinksForTask(taskId)
複製代碼

act_ru_identitylink:存聽任務的辦理人,包括我的任務和組任務,表示正在執行的任務
act_hi_identitylink:存聽任務的辦理人,包括我的任務和組任務,表示歷史任務
區別在於:
若是是我的任務TYPE的類型表示participant(參與者)
若是是組任務TYPE的類型表示candidate(候選者)和participant(參與者)

  1. 使用流程變量

    使用流程變量-組任務

  2. 使用類-組任務1
    使用類-組任務2
    使用類-組任務code
    經過processEngine.getTaskService().claim (taskId, userId);將組任務分配給我的任務,也叫認領任務,即指定某我的去辦理這個任務.此時不會校驗userId是否在候選人中,若是不在,則將userId加入到候選人列表,對應IdentityLink表格
    領任務的時候,能夠是組任務成員中的人,也能夠不是組任務成員的人,此時經過Type的類型爲participant來指定任務的辦理人

3.7 角色組

act_id_group:角色組表
act_id_user:用戶表
act_id_membership:用戶角色表
在部署流程定義和啓動流程實例的中間,設置組任務的辦理人,向Activiti表中存放組和用戶的信息

角色組code

4、 Activiti實戰

4.1 任務

4.1.1 用戶任務

任務監聽
Create 建立任務,assignment分配任務,complete完成任務
Expression,delegateExpression,Alfresco script
activity:initiator=」xxx」:能夠把啓動流程實例的操做人以變量名稱」xxx」保存到數據庫中,須要配合identityService.setAuthenticatedUserId(authenticatedUserId)使用

4.1.2 腳本任務

能夠運行腳本語言
複製代碼

4.1.3 Service 任務

Service 任務

4.1.4 業務規則任務

能夠和drools整合

業務規則任務

4.1.5 郵件任務

在serviceTask的基礎上由activiti擴展而來,能夠發郵件

4.1.6 Camel

在serviceTask的基礎上由activiti擴展而來,是用來解決消息路由的框架

4.1.7 Manual task

不作任何處理,流程引擎無需關係如何處理它,activiti把手動任務當作一個空任務來處理,當到達此任務時由引擎自動完成並轉向下一個任務

4.1.8 Receive task

在任務建立後開始等待消息的到來,直到被觸發纔會完成任務,能夠經過RuntimeService接口的signal()方法發送信號觸發接收任務

4.1.9 多實例

容許一個任務甚至子流程能夠重複執行屢次如一個申請由多人審批,能夠選擇順序執行和並行執行 能夠設置重複執行,設置完成條件

4.2 網關gateway

4.2.1 排他網關

若是多個線路的計算結果爲true,則會執行第一個值爲true的網關,若線路都沒有true,則拋出異常

4.2.2 並行網關

並行網關聚集處,只有當全部進入的流程都進來了,才能往下走流程

4.2.3 包容網關inclusivegateway

融合了排他網關和並行網關的特性,既能夠同時執行多條線路,又容許在網關上設置條件

4.2.4 事件網關

事件網關是專門爲中間捕獲事件設置,容許設置多個輸出流指向多個不一樣的中間捕獲事件(最少兩個).在流程執行到事件網關後,流程處於」等待」狀態,中間捕獲事件須要依賴中間拋出事件觸發才能更改等待狀態爲活動狀態

4.3 子流程與調用活動

4.3.1 子流程

子流程能夠包含流程規範的大部分模型
最經常使用的是把最通用的流程獨立成子流程,嵌入到各個流程當中

  • 約束
  1. 只能且僅能包含一個空啓動事件
  2. 至少要有一個結束事件
  3. 在子流程中順序流不能直接設置輸出流到子流程以外的活動上,能夠經過邊界事件代替

4.3.2 調用活動 call activiti

和子流程做用一致,但表現方式不一樣,可使用一個調用活動取代嵌入子流程的活動,經過建立一個調用活動模型並制定外部流程的id方式做爲主流程的一個子活動

調用活動

4.3.3 事件子流程

和子流程相似,不一樣的是事件子流程不能直接啓動,而是被動地由其餘的事件觸發啓動 能夠由異常事件,信號事件,消息事件,定時器事件,補償事件等觸發

4.3.4 事務子流程

該子流程擁有事務性,ACID,回滾

4.4 邊界與中間事件

邊界事件是綁定在活動上的」捕獲型」事件,一旦觸發邊界事件,當前活動會被中斷而後按照邊界事件以後的輸出流執行
一個活動只能綁定一個邊界事件
部分邊界事件中能夠設置cancelActivity屬性值,以控制是否取消執行輸出流指定的活動

4.4.1 定時器邊界事件

定時啓動事件:用於在指定的時間啓動一個新的流程 定時器邊界事件:附屬在一個非自動任務,調用活動,子流程上,在上游任務執行完成以後開始倒計時準備觸發事件

4.4.2 異常邊界事件

用來捕獲嵌入子流程或調用活動拋出的異常 異常拋出以後被主流程的異常邊界事件捕獲,同時嵌入子流程或調用活動中的活動也被中斷執行 異常邊界事件能夠直接在流程定義圖

<sequenceFlow id="flow-treasurerAudit" name="財務不一樣意" sourceRef="exclusivegateway-treasurerAudit" targetRef="errorendevent2">
複製代碼

也能夠直接拋出異常

異常邊界事件

4.4.3 信號邊界事件

信號邊界事件能夠捕獲流程執行中拋出的信號,能夠附加在各類活動和子流程上
信號拋出事件是全局的:信號邊界事件不只能夠捕獲本流程的信號,還能夠捕獲到其餘流程的信號事件,若是定義了多個信號邊界事件並監聽同一個信號,則會同時觸發多個邊界事件

4.4.4 取消邊界事件

專門針對事務子流程所設計的,用來捕獲子流程中拋出的取消事件,不能附加到其餘活動上

  1. 一個事務主流程只容許附加一個取消邊界事件
  2. 若是事務子流程中嵌套了子流程,僅僅觸發已經完成了的子流程補償事件?
  3. 對於多實例的事務子流程,若其中一個實例觸發取消事件,則所有實例都會被觸發取消邊界事件

4.4.5 補償邊界事件

用於事務子流程中針對事務失敗後的業務邏輯進行補償 若補償邊界事件附加的活動室多實例的,當拋出補償事件時,每個實例都會觸發補償邊界事件

4.4.6 中間捕獲事件

根據事件不一樣的類型須要使用不一樣的方式才能繼續執行後續的輸出流的活動 中間捕獲事件必須鏈接一個輸入流和輸出流

  1. 定時器中間捕獲事件
    定時器中間捕獲事件
  2. 信號中間捕獲事件 用來捕獲拋出的信號事件,信號id一致便可捕獲
    廣播式傳播
  3. 消息中間捕獲事件
    定向一對一傳播,一次只能把一個消息發給一個指定的流程實例

4.4.7 中間拋出事件

中間拋出事件須要有對應的捕獲事件接收纔有意義
中間拋出事件通常用在一個任務完成後須要發送通知或執行其餘系統任務的場景,工做流引擎會對拋出的事件進行傳播

  1. 空中間拋出事件 不執行流程功能,能夠藉助activiti對大多數活動/事件添加的擴展功能使其更有意義,能夠做爲中間狀態/結果的處理器
  2. 信號中間拋出事件 能夠同步也能夠異步
    同步時信號發出後等待信號被捕獲處理完成後才能繼續往下執行流程,中間出錯則回滾 異步時發出信號後當即執行下一流程, 不會回滾

4.5 監聽器

4.5.1 執行監聽器

容許在執行流程中執行java代碼
監聽類型:start,end,take
能夠捕獲的事件:

  1. 流程實例啓動,結束
  2. 輸出流捕獲
  3. 活動啓動,結束
  4. 路由開始,結束
  5. 中間事件開始,結束
  6. 觸發開始事件,觸發結束事件

3種監聽器執行類型

  1. Class:實現接口
  2. Expression:表達式,相似EL
  3. DelegateExpression:能夠以參數形式設置實現的的接口類

4.5.2 任務監聽器

只能應用於用戶任務
監聽類型

  1. Assignment:在任務被分配給某個辦理人以後觸發,在create以前
  2. Create:須要逐一處理任務的辦理人,候選人,候選組屬性
  3. complete:任務完成,運行時運行數據被刪除以前 順序: assignment-> create->complete

4.6 任務表單

表單屬性

表單屬性
流程變量是整個流程實例公用的,即便是表單上要求必填的屬性,在流程中已有值時就能夠不填

5、 定時做業

引擎在部署流程以後,引擎對部署的流程定義作一些初始化的工做,其中就包含對定時做業的註冊和對消息事件的註冊
ACT_RU_JOB表的主要字段說明

ACT_RU_JOB表
定時啓動事件能夠按照預設時間啓動是由於引擎不斷刷新數據庫表ACT_RU_JOB的記錄,根據時間匹配做業,命中以後就執行做業.

6、 消息啓動事件

部署流程以後引擎會在初始化中處理消息事件,把消息的類型註冊到數據act_ru_event_subscr中
在流程執行過程當中遇到了消息類型事件或經過API觸發消息事件觸發該表讀取數據,而且根據消息的屬性調用消息處理器

消息啓動事件
在調用代碼 processInstance = runtimeService.startProcessInstanceByMessage("啓動XXX流程"); 流程會找到act_ru_event_subscr表中的EVENT_NAME匹配消息名稱,找到就啓動

7、 結束事件

終止結束事件:終止整個流程
空結束事件:只結束一條輸出流的執行
在歷史任務實例中HistoricActivityInstance,有個HistoricActivityInstance.getDeleteReason(),對應act_hi_taskinst表的DELETE_REASON_字段
若是一個任務正常完成(經過complete方法),則DELETE_REASON_值爲completed,若是任務是被刪除的,則刪除緣由爲deleted
好比在空結束事件沒有complete,而主流程就completed了,則子流程的記錄就爲deleted

8、 消息邊界事件

消息邊界事件,信號邊界事件與異常邊界事件會多出一個cancelActivity屬性,可取值爲:
True:在邊界事件觸發後取消已註冊的消息事件
False:在邊界事件觸發後仍然保留已註冊的事件,能夠再次觸發

消息邊界事件
消息邊界事件配置

runtimeService.messageEventReceived(messageName, executionId);	//觸發消息邊界事件
複製代碼

同理,觸發信號事件runtimeService.signalEventReceived(signalName, executionId);
若是一個任務有附加的消息邊界事件,當任務執行完成且邊界事件沒有被觸發時,那麼已經註冊的事件將在任務完成時被刪除

9、 任務

9.1 任務委託人與任務辦理人

委託人:owner_
辦理人:assignee_

//參與人:
taskService.addUserIdentityLink(taskId, userId, identityLinkType);
taskService.getIdentityLinksForTask(taskId);
//簽收
processEngine.getTaskService().claim(task.getId(), " user "); // 數據庫字段owner_爲user
//委派
processEngine.getTaskService().delegateTask(task.getId(), "henryyan"); // //數據庫字段assignee _爲henryyan
//被委派人完成任務
taskService.resolveTask(task.getId());
複製代碼

最終Assignee:user1,owen:user1
owner是任務全部者只能是一個,assignee是任務肯定的接收者,也只能是一個,candidate是可領取任務的人,那麼就會有不少,因此candidate單獨放在identitylink表中關聯task,而前兩個就直接在task表中標明便可
當調用taskService.getIdentityLinksForTask("task102");時,這三種狀況(兩個表)都要統計進去。

任務委派原理

9.2 簽收與反簽收

簽收: taskService.claim(taskId, userId);
反簽收: taskService.claim(taskId, null); // 把已簽收的任務辦理人置空

9.3 候選人與候選人組

taskService.addUserIdentityLink(taskId, userId, identityLinkType)
identityLinkType有分紅幾類人

角色分類

設置認證用戶有什麼用?

9.4 子任務

一個任務能夠拆分出多個任務交給不一樣的人處理
當主任務complete時,子任務也會默認完成,從ru表刪除進入hi表

Task task2 = taskService.newTask();
    task2.setParentTaskId(task.getId());
    task2.setAssignee("sub task");
    taskService.saveTask(task2); //記錄到數據庫中
複製代碼

雜記

  1. 經過父流程查看子流程
List<Execution> processInstances = processEngine.getRuntimeService().createExecutionQuery().processInstanceId("13201").list();
複製代碼
相關文章
相關標籤/搜索