1. 程式人生 > >5.activiti工作流-流程例項、任務的執行

5.activiti工作流-流程例項、任務的執行

1.流程圖

這裡寫圖片描述

2.部署流程定義

這裡寫圖片描述

3.啟動流程例項

這裡寫圖片描述
說明:
1)操作資料庫的act_ru_execution表,如果是使用者任務節點,同時也會在act_ru_task新增一條記錄

查詢我的個人任務

這裡寫圖片描述

說明:
1)因為是任務查詢,所以從processEngine中應該得到TaskService
2)使用TaskService獲取到任務查詢物件TaskQuery
3)為查詢物件新增查詢過濾條件,使用taskAssignee指定任務的辦理者(即查詢指定使用者的代辦任務),同時可以新增分頁排序等過濾條件
4)呼叫list方法執行查詢,返回辦理者為指定使用者的任務列表
5)任務ID、名稱、辦理人、建立時間可以從act_ru_task表中查到。
6)Execution與ProcessInstance見5.6和5.7章節的介紹。在這種情況下,ProcessInstance相當於Execution
7)如果assignee屬性為部門經理,結果為空。因為現在流程只到了”填寫請假申請”階段,後面的任務還沒有執行,即在資料庫中沒有部門經理可以辦理的任務,所以查詢不到。
8)一個Task節點和Execution節點是1對1的情況,在task物件中使用Execution_來表示他們之間的關係
9)任務ID在資料庫表act_ru_task中對應“ID_”列

附加:
在activiti任務中,主要分為兩大類查詢任務(個人任務和組任務):
1.確切指定了辦理者的任務,這個任務將成為指定者的私有任務,即個人任務。
2.無法指定具體的某一個人來辦理的任務,可以把任務分配給幾個人或者一到 多個小組,讓這個範圍內的使用者可以選擇性(如有空餘時間時)來辦理這類任務,即組任務。
先知道個人任務的查詢和辦理,組任務的操作後面講

辦理任務

這裡寫圖片描述
說明:
1)是辦理任務,所以從ProcessEngine得到的是TaskService。
2)當執行完這段程式碼,再以員工的身份去執行查詢的時候,會發現這個時候已經沒有資料了,因為正在執行的任務中沒有資料。
3)對於執行完的任務,activiti將從act_ru_task表中刪除該任務,下一個任務會被插入進來。
4)以”部門經理”的身份進行查詢,可以查到結果。因為流程執行到部門經理審批這個節點了。
5)再執行辦理任務程式碼,執行完以後以”部門經理”身份進行查詢,沒有結果。
重複第3和4步直到流程執行完。

查詢流程狀態(判斷流程正在執行,還是結束)

這裡寫圖片描述
在流程執行的過程中,建立的流程例項ID在整個過程中都不會變,當流程結束後,流程例項將會在正在執行的執行物件表中(act_ru_execution)被刪除
說明:
1)因為是查詢流程例項,所以先獲取runtimeService
2)建立流程例項查詢物件,設定例項ID過濾引數
3)由於一個流程例項ID只對應一個例項,使用singleResult執行查詢返回一個唯一的結果,如果結果數量大於1,則丟擲異常
4)判斷指定ID的例項是否存在,如果結果為空,則代表流程結束,例項在正在執行的執行物件表中已被刪除,轉換成歷史資料。

附加功能:查詢歷史任務(後面講)

這裡寫圖片描述

附加功能:查詢歷史流程例項(後面講)

這裡寫圖片描述

總結

Execution 執行物件
按流程定義的規則執行一次的過程.
對應的表:
act_ru_execution: 正在執行的資訊
act_hi_procinst:已經執行完的歷史流程例項資訊
act_hi_actinst:存放歷史所有完成的活動
ProcessInstance 流程例項
特指流程從開始到結束的那個最大的執行分支,一個執行的流程中,流程例項只有1個。

注意
(1)如果是單例流程,執行物件ID就是流程例項ID
(2)如果一個流程有分支和聚合,那麼執行物件ID和流程例項ID就不相同
(3)一個流程中,流程例項只有1個,執行物件可以存在多個。
這裡寫圖片描述
Task 任務
執行到某任務環節時生成的任務資訊。
對應的表:
act_ru_task:正在執行的任務資訊
act_hi_taskinst:已經執行完的歷史任務資訊