java開發(fā)Activiti進(jìn)階篇流程實例詳解
1.流程實例
1.1 什么是流程實例
流程實例(ProcessInstance)代表流程定義的執(zhí)行實例
一個流程實例包括了所有的運行節(jié)點,我們可以利用這個對象來了解當(dāng)前流程實例的進(jìn)度等信息
例如:用戶或者程序安裝流程定義的內(nèi)容發(fā)起了一個流程,這個就是一個流程實例
1.2 業(yè)務(wù)管理
?流程定義部署在Activiti后,我們就可以在系統(tǒng)中通過Activiti去管理流程的執(zhí)行,但是如果我們要將我們的流程實例和業(yè)務(wù)數(shù)據(jù)關(guān)聯(lián),這時我們需要使用到Activiti中預(yù)留的BusinessKey(業(yè)務(wù)標(biāo)識)來關(guān)聯(lián)
實現(xiàn)代碼:
/** * 啟動流程實例,添加businessKey */ @Test public void test01(){ // 1.獲取ProcessEngine對象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); // 2.獲取RuntimeService對象 RuntimeService runtimeService = processEngine.getRuntimeService(); // 3.啟動流程實例 ProcessInstance instance = runtimeService .startProcessInstanceByKey("evection", "1001"); // 4.輸出processInstance相關(guān)屬性 System.out.println("businessKey = "+instance.getBusinessKey()); }
1.3 流程實例的掛起和激活
? 在實際場景中可能由于流程變更需要將當(dāng)前運行的流程暫停而不是刪除,流程暫停后將不能繼續(xù)執(zhí)行。
1.3.1 全部流程掛起
? 操作流程的定義為掛起狀態(tài),該流程定義下邊所有的流程實例全部暫停。
流程定義為掛起狀態(tài),該流程定義將不允許啟動新的流程實例,同時該流程定義下的所有的流程實例都將全部掛起暫停執(zhí)行。
/** * 全部流程掛起實例與激活 */ @Test public void test02(){ // 1.獲取ProcessEngine對象 ProcessEngine engine = ProcessEngines.getDefaultProcessEngine(); // 2.獲取RepositoryService對象 RepositoryService repositoryService = engine.getRepositoryService(); // 3.查詢流程定義的對象 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 // 激活時間 ); System.out.println("流程定義:" + id + ",已激活"); }else{ // 非掛起狀態(tài),激活狀態(tài) 那么需要掛起流程定義 repositoryService.suspendProcessDefinitionById( id // 流程id ,true // 是否掛起 ,null // 掛起時間 ); System.out.println("流程定義:" + id + ",已掛起"); } }
掛起流程定義后,對于的實例對象中的狀態(tài)會修改為2
然后再去操作對于的流程實例會拋異常信息
我們再將掛起的流程轉(zhuǎn)變?yōu)榧せ顮顟B(tài),對于的狀態(tài)值會從2更新為1
然后就是業(yè)務(wù)流程可以正常處理了
1.3.2 單個實例掛起
操作流程實例對象,針對單個流程執(zhí)行掛起操作,某個流程實例掛起則此流程不再繼續(xù)執(zhí)行,當(dāng)前流程定義的其他流程實例是不受干擾的。完成該流程實例的當(dāng)前任務(wù)會拋異常
/** * 單個流程實例掛起與激活 */ @Test public void test03(){ // 1.獲取ProcessEngine對象 ProcessEngine engine = ProcessEngines.getDefaultProcessEngine(); // 2.獲取RuntimeService RuntimeService runtimeService = engine.getRuntimeService(); // 3.獲取流程實例對象 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)階篇流程實例詳解的詳細(xì)內(nèi)容,更多關(guān)于java Activiti流程實例的資料請關(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對象的使用
下面小編就為大家?guī)硪黄獪\談s:select 標(biāo)簽中l(wèi)ist存放map對象的使用。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11