Activiti如何啟動(dòng)流程并使流程前進(jìn)
一、流程和任務(wù)的關(guān)系
以下是一個(gè)簡(jiǎn)單的請(qǐng)假流程圖,其中有一個(gè)開始事件,兩個(gè)用戶任務(wù),一個(gè)結(jié)束事件。

啟動(dòng)流程后,activiti會(huì)自動(dòng)創(chuàng)建第一個(gè)流程節(jié)點(diǎn)的用戶任務(wù),然后我們完成第一個(gè)用戶任務(wù)流程就會(huì)前進(jìn)到下一個(gè)流程節(jié)點(diǎn),創(chuàng)建第二個(gè)節(jié)點(diǎn)的流程任務(wù)并刪除第一個(gè)流程任務(wù)。
二、開啟流程
activiti提供了一個(gè)RuntimeService服務(wù)組件來在流程運(yùn)行時(shí)對(duì)流程實(shí)例進(jìn)行管理與控制。開啟流程就需要使用其中的api
2.1根據(jù)流程定義key開啟流程
上一篇博客中說道了一個(gè)流程部署成功后,會(huì)在部署信息表act_re_deployment和流程定義表act_re_procdef中插入記錄。流程定義key就是act_re_procdef表中的KEY_字段的值。

當(dāng)表中存在KEY_字段相同的記錄時(shí),activiti會(huì)選擇版本號(hào) VERSION_最新的一條流程定義記錄來開啟流程
/**
* 開啟流程,根據(jù)流程定義key開啟流程,
* 如果流程定義表中有多個(gè)相同的流程定義key,activiti會(huì)根據(jù)版本號(hào)字段VERSION_選擇最新的版本來開啟流程
*/
@Test
public void test1() {
String processDefinitionKey="process";
//開啟流程,得到流程實(shí)例對(duì)象
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);
System.out.println(processInstance);
}
activiti用ProcessInstance這個(gè)接口來描述開啟流程后得到的流程實(shí)例。
三、查詢用戶任務(wù)
開頭說到了開啟流程后會(huì)創(chuàng)建第一個(gè)流程節(jié)點(diǎn)的用戶任務(wù),所以可以使用activiti提供的另一個(gè)服務(wù)組件TaskService來查詢用戶任務(wù),TaskService中提供了和任務(wù)處理相關(guān)的api
3.1 TaskQuery
activiti提供了這個(gè)接口來封裝任務(wù)查詢相關(guān)的api,可以通過TaskService來獲取它的實(shí)現(xiàn)類對(duì)象
TaskQuery taskQuery = taskService.createTaskQuery();
然后taskQuery這個(gè)查詢對(duì)象的使用和activiti的其他查詢對(duì)象類似,先指定查詢條件,再執(zhí)行查詢。這里我根據(jù)任務(wù)的代理人進(jìn)行查詢,一個(gè)任務(wù)只能有一個(gè)代理人
/**
* 查詢開啟流程后自動(dòng)創(chuàng)建的任務(wù)
*/
@Test
public void test2() {
//根據(jù)任務(wù)的代理人進(jìn)行查詢,一個(gè)任務(wù)的代理人是唯一的
Task task = taskService.createTaskQuery().taskAssignee("tom").singleResult();
System.out.println(task);
}
activiti用Task來封裝任務(wù)對(duì)象,對(duì)應(yīng)的是act_ru_task這張表的記錄。創(chuàng)建任務(wù)后會(huì)在這張表中插入一條記錄。
四、完成任務(wù)
可以使用taskService中的方法來完成當(dāng)前任務(wù),使流程向下一個(gè)節(jié)點(diǎn)移動(dòng)。完成任務(wù)時(shí)需要給定任務(wù)id即act_ru_task表的主鍵Id,所以完成任務(wù)時(shí)可以先通過查詢方法給定條件查詢出一個(gè)任務(wù)對(duì)象,再完成這個(gè)任務(wù)。
/**
* 完成任務(wù),使流程前進(jìn)到下一個(gè)流程節(jié)點(diǎn),并創(chuàng)建下一個(gè)節(jié)點(diǎn)的任務(wù)對(duì)象
*/
@Test
public void test3() {
String taskId="4502";
taskService.complete(taskId);
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- IDEA安裝Activiti插件并解決亂碼問題(推薦)
- Activiti如何動(dòng)態(tài)獲取流程圖過程詳解
- Activiti流程文件部署過程解析
- Activiti流程引擎對(duì)象及配置原理解析
- Activiti explorer.war示例工程使用過程圖解
- SpringBoot整合Activiti7的實(shí)現(xiàn)代碼
- SpringBoot2整合activiti6環(huán)境搭建過程解析
- spring boot activiti工作流的搭建與簡(jiǎn)單使用
- Spring Boot中使用Activiti的方法教程(二)
- Spring Boot中使用activiti的方法教程(一)
- Spring activiti如何實(shí)現(xiàn)指定任務(wù)處理者
相關(guān)文章
Spring Cloud Config 使用本地配置文件方式
這篇文章主要介紹了Spring Cloud Config 使用本地配置文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Mybatis CachingExecutor二級(jí)緩存使用示例詳解
這篇文章主要介紹了?Mybatis的CachingExecutor與二級(jí)緩存使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
Applet小應(yīng)用程序開發(fā)簡(jiǎn)介
Applet小應(yīng)用程序開發(fā)簡(jiǎn)介 ,用java開發(fā)的小程序,需要的朋友可以參考下2012-09-09
PowerJob的DesignateServer工作流程源碼解讀
這篇文章主要介紹了PowerJob的DesignateServer工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
JDK 7U15在 Windows x86平臺(tái)下的安裝方法
本文給大家分享的是如何在windows平臺(tái)下安裝JDK最新版的方法,十分的簡(jiǎn)單全面,有需要的小伙伴可以參考下2016-05-05

