public void addActivity(String taskId, String newActivityId){
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
ProcessInstance instance = runtimeService
.createProcessInstanceQuery()
.processInstanceId(task.getProcessInstanceId())
.singleResult();
ProcessDefinitionEntity definition = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService)
.getDeployedProcessDefinition(task.getProcessDefinitionId());
List activities = ((ProcessDefinitionImpl) definition).getActivities();
// 取得当前活动节点
ActivityImpl currActivity = ((ProcessDefinitionImpl) definition).findActivity(task.getTaskDefinitionKey());
//创建新活动
ActivityImpl clone = definition.createActivity(newActivityId);
List<ActivityImpl> list = getNextActivity(taskId);
//清除原先的路径
List<PvmTransition> cacheTran = currActivity.getOutgoingTransitions();
currActivity.getOutgoingTransitions().clear();
//创建新路径
TransitionImpl tran = currActivity.createOutgoingTransition();
tran.setDestination(clone);
for(ActivityImpl ActivityImpl :list){
TransitionImpl tran1 = clone.createOutgoingTransition();
tran1.setDestination(ActivityImpl);
}
runtimeService.startProcessInstanceById(definition.getId());
final ExecutionEntity execution = (ExecutionEntity) runtimeService.createExecutionQuery()
.executionId(task.getExecutionId()).singleResult();
//包装一个Command对象
((RuntimeServiceImpl)runtimeService).getCommandExecutor().execute(
new Command<java.lang.Void>()
{
@Override
public Void execute(CommandContext commandContext)
{
//创建新任务
execution.setActivity(clone);
// execution.executeActivity(clone);
//删除当前的任务
//不能删除当前正在执行的任务,所以要先清除掉关联
// currentTaskEntity.setExecutionId(null);
// taskService.saveTask(currentTaskEntity);
// taskService.deleteTask(currentTaskEntity.getId(), true);
return null;
}
});
}
就是按照顺序创建的,看下创建。