在上一節(jié)中扛禽,我們啟動了一個關(guān)聯(lián)業(yè)務(wù)主鍵的流程锋边,那么這一節(jié)里我就以這個流程來將流程的掛起與激活。
應(yīng)用場景介紹
流程的掛起有兩種方式编曼。
- 一個流程部署或流程定義下所有的流程全部掛起豆巨。
- 某一個指定的流程實例掛起。
比如說現(xiàn)在公司的請假流程需要有變動掐场。業(yè)務(wù)要求以前所有的流程都作廢往扔,或者都將不在繼續(xù)執(zhí)行,這個時候第一種方式就比較使用熊户。只要把這個流程定義下的所有流程掛起萍膛,就能達到這個目的。
如果只是企業(yè)中某一個員工因為特殊原因要終止或作廢一個流程嚷堡,那么第二種方式就比較適用蝗罗。
接下來我們就用代碼來分別實現(xiàn)兩種流程掛起的方式。
一個流程部署或流程定義下所有的流程全部掛起
repositoryService的suspendProcessDefinitionById方式是掛起流程蝌戒,activateProcessDefinitionById是激活流程串塑。在掛起或者激活前先檢查一下當(dāng)下該流程定義下的流程的掛起狀態(tài),processDefinition.isSuspended()北苟。
/**
* 掛起或激活一個流程定義下所有的流程實例
*/
@Override
public void suspendProcess1() {
ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
List<ProcessDefinition> list = processDefinitionQuery.processDefinitionId("myProcess_1:1:2504").list();
ProcessDefinition processDefinition = list.get(0);
boolean suspended = processDefinition.isSuspended();
String processDefinitionId = processDefinition.getId();
if (suspended) {
repositoryService.activateProcessDefinitionById(processDefinitionId,true, null);
System.out.println("流程定義ID為:" + processDefinitionId + "已激活");
}else {
repositoryService.suspendProcessDefinitionById(processDefinitionId,true,null);
System.out.println("流程定義ID為:" + processDefinitionId + "已掛起");
}
}
/**
* 掛起或激活一個流程定義下所有的流程實例
*/
@Test
public void suspendProcess1() {
activityService.suspendProcess1();
}
image.png
執(zhí)行代碼掛起流程桩匪。
image.png
image.png
某一個指定的流程實例掛起
我們在執(zhí)行一下上面的代碼吸祟,讓流程激活。
接下來代碼實現(xiàn)某一個指定的流程實例掛起
* 掛起或激活一個特定的流程實例
*/
@Override
public void suspendProcess2() {
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processDefinitionId("myProcess_1:1:2504").singleResult();
boolean suspended = processInstance.isSuspended();
String processInstanceId = processInstance.getProcessInstanceId();
if (suspended){
runtimeService.activateProcessInstanceById(processInstanceId);
System.out.println("流程實例ID為:" + processInstanceId + "已激活");
}else {
runtimeService.suspendProcessInstanceById(processInstanceId);
System.out.println("流程實例ID為:" + processInstanceId + "已掛起");
}
}
/**
* 掛起或激活一個特定的流程實例
*/
@Test
public void suspendProcess2() {
activityService.suspendProcess2();
}
查看運行時任務(wù)表image.png
調(diào)用完成任務(wù)方法
/**
* 完成一個用戶任務(wù)
*/
@Override
public void completeUserTask() {
taskService.complete("10002");
}
image.png
可以發(fā)現(xiàn)無法完成一個掛起狀態(tài)的任務(wù)桃移。
本節(jié)完屋匕。