java開(kāi)發(fā)Activiti進(jìn)階篇流程實(shí)例詳解
1.流程實(shí)例
1.1 什么是流程實(shí)例
流程實(shí)例(ProcessInstance)代表流程定義的執(zhí)行實(shí)例
一個(gè)流程實(shí)例包括了所有的運(yùn)行節(jié)點(diǎn),我們可以利用這個(gè)對(duì)象來(lái)了解當(dāng)前流程實(shí)例的進(jìn)度等信息
例如:用戶或者程序安裝流程定義的內(nèi)容發(fā)起了一個(gè)流程,這個(gè)就是一個(gè)流程實(shí)例

1.2 業(yè)務(wù)管理
?流程定義部署在Activiti后,我們就可以在系統(tǒng)中通過(guò)Activiti去管理流程的執(zhí)行,但是如果我們要將我們的流程實(shí)例和業(yè)務(wù)數(shù)據(jù)關(guān)聯(lián),這時(shí)我們需要使用到Activiti中預(yù)留的BusinessKey(業(yè)務(wù)標(biāo)識(shí))來(lái)關(guān)聯(lián)

實(shí)現(xiàn)代碼:
/**
* 啟動(dòng)流程實(shí)例,添加businessKey
*/
@Test
public void test01(){
// 1.獲取ProcessEngine對(duì)象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 2.獲取RuntimeService對(duì)象
RuntimeService runtimeService = processEngine.getRuntimeService();
// 3.啟動(dòng)流程實(shí)例
ProcessInstance instance = runtimeService
.startProcessInstanceByKey("evection", "1001");
// 4.輸出processInstance相關(guān)屬性
System.out.println("businessKey = "+instance.getBusinessKey());
}

1.3 流程實(shí)例的掛起和激活
? 在實(shí)際場(chǎng)景中可能由于流程變更需要將當(dāng)前運(yùn)行的流程暫停而不是刪除,流程暫停后將不能繼續(xù)執(zhí)行。
1.3.1 全部流程掛起
? 操作流程的定義為掛起狀態(tài),該流程定義下邊所有的流程實(shí)例全部暫停。
流程定義為掛起狀態(tài),該流程定義將不允許啟動(dòng)新的流程實(shí)例,同時(shí)該流程定義下的所有的流程實(shí)例都將全部掛起暫停執(zhí)行。
/**
* 全部流程掛起實(shí)例與激活
*/
@Test
public void test02(){
// 1.獲取ProcessEngine對(duì)象
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 2.獲取RepositoryService對(duì)象
RepositoryService repositoryService = engine.getRepositoryService();
// 3.查詢流程定義的對(duì)象
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionKey("evection")
.singleResult();
// 4.獲取當(dāng)前流程定義的狀態(tài)
boolean suspended = processDefinition.isSuspended();
String id = processDefinition.getId();
// 5.如果掛起就激活,如果激活就掛起
if(suspended){
// 表示當(dāng)前定義的流程狀態(tài)是 掛起的
repositoryService.activateProcessDefinitionById(
id // 流程定義的id
,true // 是否激活
,null // 激活時(shí)間
);
System.out.println("流程定義:" + id + ",已激活");
}else{
// 非掛起狀態(tài),激活狀態(tài) 那么需要掛起流程定義
repositoryService.suspendProcessDefinitionById(
id // 流程id
,true // 是否掛起
,null // 掛起時(shí)間
);
System.out.println("流程定義:" + id + ",已掛起");
}
}
掛起流程定義后,對(duì)于的實(shí)例對(duì)象中的狀態(tài)會(huì)修改為2

然后再去操作對(duì)于的流程實(shí)例會(huì)拋異常信息

我們?cè)賹炱鸬牧鞒剔D(zhuǎn)變?yōu)榧せ顮顟B(tài),對(duì)于的狀態(tài)值會(huì)從2更新為1

然后就是業(yè)務(wù)流程可以正常處理了
1.3.2 單個(gè)實(shí)例掛起
操作流程實(shí)例對(duì)象,針對(duì)單個(gè)流程執(zhí)行掛起操作,某個(gè)流程實(shí)例掛起則此流程不再繼續(xù)執(zhí)行,當(dāng)前流程定義的其他流程實(shí)例是不受干擾的。完成該流程實(shí)例的當(dāng)前任務(wù)會(huì)拋異常
/**
* 單個(gè)流程實(shí)例掛起與激活
*/
@Test
public void test03(){
// 1.獲取ProcessEngine對(duì)象
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 2.獲取RuntimeService
RuntimeService runtimeService = engine.getRuntimeService();
// 3.獲取流程實(shí)例對(duì)象
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceId("25001")
.singleResult();
// 4.獲取相關(guān)的狀態(tài)操作
boolean suspended = processInstance.isSuspended();
String id = processInstance.getId();
if(suspended){
// 掛起--》激活
runtimeService.activateProcessInstanceById(id);
System.out.println("流程定義:" + id + ",已激活");
}else{
// 激活--》掛起
runtimeService.suspendProcessInstanceById(id);
System.out.println("流程定義:" + id + ",已掛起");
}
}
然后我們可以在數(shù)據(jù)庫(kù)中查看到狀態(tài)的更新

以上就是java開(kāi)發(fā)Activiti進(jìn)階篇流程實(shí)例詳解的詳細(xì)內(nèi)容,更多關(guān)于java Activiti流程實(shí)例的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Netty分布式pipeline管道Handler的添加代碼跟蹤解析
這篇文章主要介紹了Netty分布式pipeline管道Handler的添加代碼跟蹤解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03
從零搭建SpringBoot+MyBatisPlus快速開(kāi)發(fā)腳手架
這篇文章主要為大家介紹了從零搭建SpringBoot+MyBatisPlus快速開(kāi)發(fā)腳手架示例教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
淺談s:select 標(biāo)簽中l(wèi)ist存放map對(duì)象的使用
下面小編就為大家?guī)?lái)一篇淺談s:select 標(biāo)簽中l(wèi)ist存放map對(duì)象的使用。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11

