Skip to content

Instantly share code, notes, and snippets.

@henryyan
Created February 21, 2013 03:54
Show Gist options
  • Save henryyan/5001893 to your computer and use it in GitHub Desktop.
Save henryyan/5001893 to your computer and use it in GitHub Desktop.
Activiti:动态调整运行中流程的流程定义版本
/**
* 更改流程实例的流程定义ID
* @param processInstanceId
* @param processDefinitionId
*/
@Transactional
public void changeProcessDefinitionId(String processInstanceId, String processDefinitionId) {
long count = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).count();
if (count == 0) {
throw new ServiceException("指定的流程定义不存在!");
}
Session session = processInstanceDao.getSession();
session.createSQLQuery("update ACT_RU_EXECUTION set PROC_DEF_ID_ = ? where PROC_INST_ID_ = ?").setParameter(0, processDefinitionId).setParameter(1, processInstanceId).executeUpdate();
session.createSQLQuery("update ACT_RU_TASK set PROC_DEF_ID_ = ? where PROC_INST_ID_ = ?").setParameter(0, processDefinitionId).setParameter(1, processInstanceId).executeUpdate();
session.createSQLQuery("update ACT_HI_PROCINST set PROC_DEF_ID_ = ? where PROC_INST_ID_ = ?").setParameter(0, processDefinitionId).setParameter(1, processInstanceId).executeUpdate();
session.createSQLQuery("update ACT_HI_TASKINST set PROC_DEF_ID_ = ? where PROC_INST_ID_ = ?").setParameter(0, processDefinitionId).setParameter(1, processInstanceId).executeUpdate();
session.createSQLQuery("update ACT_HI_ACTINST set PROC_DEF_ID_ = ? where PROC_INST_ID_ = ?").setParameter(0, processDefinitionId).setParameter(1, processInstanceId).executeUpdate();
}
@henryyan
Copy link
Author

适用于:

  1. 流程未结束(录入了很多业务数据),中间环节因为流程设计有问题导致不能继续;此时马上修复并发布一个新版本,调用这个方法更改运行中流程实例的流程定义ID

@ElvisWen
Copy link

nice

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment