java開發(fā)Activiti進(jìn)階篇流程實(shí)例詳解
1.流程實(shí)例
1.1 什么是流程實(shí)例
流程實(shí)例(ProcessInstance)代表流程定義的執(zhí)行實(shí)例
一個(gè)流程實(shí)例包括了所有的運(yùn)行節(jié)點(diǎn),我們可以利用這個(gè)對(duì)象來了解當(dāng)前流程實(shí)例的進(jìn)度等信息
例如:用戶或者程序安裝流程定義的內(nèi)容發(fā)起了一個(gè)流程,這個(gè)就是一個(gè)流程實(shí)例
1.2 業(yè)務(wù)管理
?流程定義部署在Activiti后,我們就可以在系統(tǒng)中通過Activiti去管理流程的執(zhí)行,但是如果我們要將我們的流程實(shí)例和業(yè)務(wù)數(shù)據(jù)關(guān)聯(lián),這時(shí)我們需要使用到Activiti中預(yù)留的BusinessKey(業(yè)務(wù)標(biāo)識(shí))來關(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ù)庫中查看到狀態(tài)的更新
以上就是java開發(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快速開發(fā)腳手架
這篇文章主要為大家介紹了從零搭建SpringBoot+MyBatisPlus快速開發(fā)腳手架示例教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06淺談s:select 標(biāo)簽中l(wèi)ist存放map對(duì)象的使用
下面小編就為大家?guī)硪黄獪\談s:select 標(biāo)簽中l(wèi)ist存放map對(duì)象的使用。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-11-11