Activiti businessKey 及流程激活与挂起
Activiti businessKey 及流程激活与挂起
在 activiti 实际应用时,查询流程实例列表时可能要显示出业务系统的一些相关信息,比如:查询当前运行的出差流程列表需要将出差单名称、出差天数等信息显示出来,出差天数等信息在业务系统中存在,而并没有在 activiti 数据库中存在,所以是无法通过 activiti 的 api 查询到出差天数等信息
Businesskey:业务标识,通常为业务表的主键,业务标识和流程实例一一对应,业务标识来源于业务系统,存储业务标识就是根据业务标识来关联查询业务系统的数据
在查询流程实例时,通过 businessKey(业务标识 )关联查询业务系统的出差单表,就可以查询出差天数等信息,eg:
/**
* 启动流程实例并添加businessKey
*/
@Test
public void addBusinessKey(){
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RuntimeService runtimeService = processEngine.getRuntimeService();
// 启动流程实例同时指定业务标识businessKey
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("evection","1001");
System.out.println("业务id=="+processInstance.getBusinessKey());
}
流程激活与挂起
某些情况可能由于流程变更需要将当前运行的流程暂停而不是直接删除,流程暂停后将不会继续执行
/**
* 全部流程实例挂起与激活
*/
@Test
public void SuspendAllProcessInstance(){
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().
processDefinitionKey("evection").singleResult();
// 当前流程定义的实例是否都为暂停状态
boolean suspended = processDefinition.isSuspended();
// 流程定义id
String processDefinitionId = processDefinition.getId();
if(suspended){
// 如果是暂停状态,则激活(参数1:流程定义id,参数2:是否激活,参数3:激活时间)
repositoryService.activateProcessDefinitionById(processDefinitionId, true, null);
System.out.println("流程定义:"+processDefinitionId+",已激活");
}else{
// 如果是激活状态,则暂停(参数1:流程定义id,参数2:是否暂停,参数3:激活时间)
repositoryService.suspendProcessDefinitionById(processDefinitionId, true, null);
System.out.println("流程定义:"+processDefinitionId+",已挂起");
}
}
操作流程实例对象,针对单个流程执行挂起操作,某个流程实例挂起则此流程不再继续执行,完成流程实例的当前任务将报异常
/**
* 单个流程实例挂起与激活
*/
@Test
public void SuspendSingleProcessInstance(){
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().
processInstanceId("22501").singleResult();
// 当前流程实例是否为暂停状态
boolean suspended = processInstance.isSuspended();
// 流程定义id
String processDefinitionId = processInstance.getId();
if(suspended){
// 如果是暂停状态,则执行激活操作
runtimeService.activateProcessInstanceById(processDefinitionId);
System.out.println("流程定义:"+processDefinitionId+",已激活");
}else{
// 如果是激活状态则暂停
runtimeService.suspendProcessInstanceById( processDefinitionId);
System.out.println("流程定义:"+processDefinitionId+",已挂起");
}
}
记得快乐
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能