As matts said, you can use org.activiti.engine.impl.cmd.SetProcessDefinitionVersionCmd
.
Following code is to update latest process definition id.
String PROCESS_DEFINITION_NAME = processdefID;
DesEncrypter de = new DesEncrypter();
String password = "yourpwd";
ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration()
.setJdbcUrl("database.url")
.setJdbcUsername("database.username").setJdbcPassword("database.password")
.setJdbcDriver("database.driver")
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE);
ProcessEngine processEngine = cfg.buildProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().latestVersion()
.processDefinitionKey(PROCESS_DEFINITION_NAME).singleResult();
if (processDefinition == null) {
System.out.println("Cannot find Process Def ID " + PROCESS_DEFINITION_NAME);
} else {
System.out.println("Latest Process Definition Version: " + processDefinition.getVersion());
long counter = runtimeService.createProcessInstanceQuery().active()
.processDefinitionKey(PROCESS_DEFINITION_NAME).count();
List < ProcessInstance > processInstanceList = runtimeService.createProcessInstanceQuery().active()
.processDefinitionKey(PROCESS_DEFINITION_NAME).list();
System.out.println(counter);
System.out.println("Total process instances: " + counter);
System.out.println("Total process instances retrieved: " + processInstanceList.size());
int index = 1;
for (ProcessInstance oneInstance: processInstanceList) {
try {
CommandConfig commandConfig = new CommandConfig();
// Execute the command asynchronously to prevent that
// one error updating a process instance stops the
// entire batch
cfg.getAsyncExecutor().getProcessEngineConfiguration().getCommandExecutor()
.execute(commandConfig.transactionNotSupported(), new SetProcessDefinitionVersionCmd(
oneInstance.getId(), processDefinition.getVersion()));
System.out.println(index++ + " - Process instance UPDATED: " + oneInstance.getId() +
", previous definition ID: " + oneInstance.getProcessDefinitionVersion());
} catch (Exception e) {
System.out.println(index++ + " - Process instance FAILED: " + oneInstance.getId() +
", previous definition ID: " + oneInstance.getProcessDefinitionVersion() +
", Cause: " + e.getMessage());
}
}
System.out.println("********* Completed Successfully. *********");
System.in.read();
}