鹿城NO1 2016-08-23 09:57 采纳率: 62.5%
浏览 3805

activiti 增加节点的逻辑能讲一下吗

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;  
                }  
            });  
}
  • 写回答

1条回答 默认 最新

  • devmiao 2016-08-23 15:32
    关注

    就是按照顺序创建的,看下创建。

    评论

报告相同问题?

悬赏问题

  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料