2015-06-26 10:15 34242人閱讀 評論(6) 收藏 舉報mysql
分類:sql
java學習(46) 數據庫
上一篇文章中咱們將Activiti流程定義管理的知識進行了介紹,這篇文章咱們繼續Activiti流程實例和任務管理的學習。學習
流程實例(ProcessInstance)和上一篇文章中流程定義(ProcessDefinition)的關係,與類和實例對象的關係有點像,ProcessDefinition是整個流程步驟的說明而ProcessInstance就是指流程定義從開始到結束的那個最大的執行路線。 spa
提到ProcessInstance同時又會出現另外一個名詞,那就是執行對象(Execution),Execution是按照ProcessDefinition的規則執行的當前的路線,.net
若是ProcessDefinition只有一個執行路線的話,那麼Execution和ProcessInstance就是徹底同樣了若是ProcessDefinition中有多個執行路線的話,Execution和ProcessInstance多是同一個也可能不是同一個。因此得出結論:一個流程中ProcessInstance有且只能有一個,而Execution能夠存在多個。對象
任務(Task)應該比較好理解,就是當流程執行到某步驟或某環節時生產的任務信息。blog
在上篇文章中咱們將如何畫流程圖、如何部署流程定義已經介紹,流程定義和流程實例的關係剛纔已經介紹了,全部如今咱們就該開始啓動流程實例了:
啓動流程實例
[java] view plain copy
運行結果:
流程實例ID:501
流程定義ID:HelloWorld:2:404
說明:
1)在數據庫的act_ru_execution正在執行的執行對象表中插入一條記錄
2)在數據庫的act_hi_procinst程實例的歷史表中插入一條記錄
3)在數據庫的act_hi_actinst活動節點的歷史表中插入一條記錄
4)咱們圖中節點都是任務節點,因此同時也會在act_ru_task流程實例的歷史表添加一條記錄
5)在數據庫的act_hi_taskinst任務歷史表中也插入一條記錄。
查詢歷史流程實例
流程實例啓動之後,咱們也能夠對某個流程實例一共一共執行了多少次流程進行查詢,由於咱們本例中如今剛進行了一個流程,因此目前只能查出一個流程:
[java] view plain copy
運行結果:
501 HelloWorld:2:404 Fri Jun 26 09:34:51 CST 2015 null
查詢當前的我的任務
在上面講流程啓動後,由於該節點是任務節點因此在任務表中插入了任務的記錄,如今咱們就經過辦理人將任務進行下查詢:
[java] view plain copy
運行結果:
任務ID:504
任務名稱:提交申請
任務的建立時間:Fri Jun 2609:34:51 CST 2015
任務的辦理人:張三
流程實例ID:501
執行對象ID:501
流程定義ID:HelloWorld:2:404
##################################################
說明:
1)由於是任務查詢,因此從processEngine中應該獲得TaskService
2)使用TaskService獲取到任務查詢對象TaskQuery
3)爲查詢對象添加查詢過濾條件,使用taskAssignee指定任務的辦理者(即查詢指定用戶的代辦任務),同時能夠添加分頁排序等過濾條件
4)調用list方法執行查詢,返回辦理者爲指定用戶的任務列表
5)任務ID、名稱、辦理人、建立時間能夠從act_ru_task表中查到。
6)在如今這種狀況下,ProcessInstance至關於Execution
7) 一個Task節點和Execution節點是1對1的狀況,在task對象中使用Execution_來表示他們之間的關係
8)任務ID在數據庫表act_ru_task中對應「ID_」列
完成任務
查詢完任務後,咱們接下來將這個任務id爲504的任務進行完成:
[java] view plain copy
運行結果:
完成任務:任務ID:504
說明:
1)是完成任務,因此從ProcessEngine獲得的是TaskService。
2)當執行完這段代碼,再以員工的身份去執行查詢的時候,會發現這個時候已經沒有數據了,由於正在執行的任務中沒有數據。
3)對於執行完的任務,activiti將從act_ru_task表中刪除該任務,下一個任務會被插入進來。
4)以」部門經理」的身份進行查詢,能夠查到結果。由於流程執行到部門經理審批這個節點了。
5)再執行辦理任務代碼,執行完之後以」部門經理」身份進行查詢,沒有結果。
6)重複第3和4步直到流程執行完。
查詢歷史任務
員工張三的任務已經完成,如今任務到部門經理李四了,若是咱們如今仍然查詢張三的任務的話,天然是查詢不到了,只有查詢李四才能夠查到,不過咱們能夠經過流程實例id查詢歷史任務,查詢歷史任務能夠將已經辦理過的任務和如今正在執行的任務都查詢出來:
[java] view plain copy
運行結果:
504 提交申請 501 Fri Jun 26 09:34:51 CST2015 Fri Jun 26 09:50:50 CST 2015 959867
################################
602 審批【部門經理】 501 Fri Jun 26 09:50:51 CST2015 null null
################################
查詢流程是否結束
咱們還能夠經過流程實例id查詢某個流程如今的狀態,是仍然在執行過程當中呢,仍是流程執行已經結束:
[java] view plain copy
運行結果:
流程沒有結束
咱們這篇文章主要是流程實例、執行對象、任務以及他們之間的關係進行了學習,同時咱們還將啓動和查詢流程實例、判斷流程實例是否執行結束、查看和辦理任務以及查詢歷史任務都進行了介紹。
頂
11
踩
7