流程定义和流程实例
流程定义和流程实例相当于Java中的类和对象的关系
BusinessKey
例如我们在流程执行的某一个节点业务中需要对其他业务进行处理,例如订单处理,就可以使用Businesskey进行传递参数
businessKey长度限制 255字符
@Test
void testBusinessKey() {
// 启动流程实例的过程中添加一个businessKey
// 例如出差申请的id
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance instance = runtimeService.startProcessInstanceByKey("Leave-1", "1001");
log.info("BusinessKey:{}",instance.getBusinessKey());
}
挂起/激活流程
例如日常办公中月底不接受报销审批,年底不接受贷款审批
或者一些流程需要进行修改时也可以将流程进行挂起,挂起后的流程不会再继续执行
挂起
1、将整个流程定义下的流程实例挂起
/**
* 挂起当前流程定义下的所有的流程实例
*/
@Test
void suspendAllProcessInstances() {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionKey(key)
.singleResult();
// 获取当前定义下的实例是否都是挂起状态
boolean suspended = processDefinition.isSuspended();
// 获取流程定义id
String definitionId = processDefinition.getId();
// 如果是挂起状态,修改为激活状态,反之亦然
if(suspended){
/**
* @param1 definitionId
* @param2 是否激活
* @param3 激活时间
*/
repositoryService.activateProcessDefinitionById(definitionId,true,null);
log.info("流程{}已激活",definitionId);
}else{
/**
* @param1 definitionId
* @param2 是否挂起
* @param3 挂起暂停时间
*/
repositoryService.suspendProcessDefinitionById(definitionId,true,null);
log.info("流程{}已暂停",definitionId);
}
}
挂起之后当前流程定义下的所有流程实例无法继续执行
2、挂起单个流程实例
/**
* 挂起单独的流程实例
*/
@Test
void suspendSingleProcessInstance(){
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance instance = runtimeService.createProcessInstanceQuery()
.processInstanceId("12501")
.singleResult();
boolean suspended = instance.isSuspended();
String instanceId = instance.getId();
if(suspended) {
runtimeService.activateProcessInstanceById(instanceId);
log.info("流程{}已激活",instanceId);
}else{
runtimeService.suspendProcessInstanceById(instanceId);
log.info("流程{}已暂停",instanceId);
}
}
只有当前的流程实例无法继续执行,其余流程实例不受影响