bubleslucky 2020-04-14 14:46 采纳率: 0%
浏览 1163

activiti多人审批驳回到上一环节问题。

上一环节A是多人审批通过到了多人审批的环节B,多人用的多实例并行,现在在环节B多人驳回到上一步,环节A多人代办接受到,请问这个驳回如何实现。activiti小白,求大佬指教。

  • 写回答

1条回答 默认 最新

  • li.siyuan 2023-07-06 18:19
    关注

    节点跳转代码示例:

    /**
     * 跳转至指定活动节点
     * @param processId  流程Id
     * @param targetTaskDefinitionKey  目标节点任务的id
     */
    public void jump(String processId,String targetTaskDefinitionKey){
        //获取当前节点任务
        TaskEntity currentTask = (TaskEntity) taskService.createTaskQuery()
                .processInstanceId(processId).singleResult();
        jump(processId,currentTask,targetTaskDefinitionKey);
    }
        
        
    /**
     * @param currentTaskEntity 当前任务节点
     * @param targetTaskDefinitionKey  目标任务节点(在模型定义里面的节点任务Id)
     */
    private void jump(String processInstanceId,final TaskEntity currentTaskEntity, String targetTaskDefinitionKey){
        ProcessInstance processInstance=runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
        TaskEntity taskEntity=(TaskEntity) taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();  
       
        //获取流程定义
        ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(processInstance.getProcessDefinitionId());  
        //当前正在执行任务的节点  
    ActivityImpl currentActivity = (ActivityImpl)processDefinitionEntity.findActivity(processInstance.getActivityId());
    //跳转的目标节点  
    ActivityImpl targetActivity = (ActivityImpl) processDefinitionEntity.findActivity(targetTaskDefinitionKey); 
              
    ((RuntimeServiceImpl)runtimeService).getCommandExecutor()
            .execute(new Command<java.lang.Void>() {
                public Void execute(CommandContext commandContext) {
                    ExecutionEntity executionEntity = (ExecutionEntity) runtimeService
                             .createExecutionQuery().executionId(currentTaskEntity.getExecutionId()).singleResult();
                    executionEntity.setActivity(currentActivity);
                    executionEntity.setEventSource(currentActivity);
                    //根据executionId 获取Task
                    Iterator<TaskEntity> localIterator = Context.getCommandContext().getTaskEntityManager().findTasksByExecutionId(taskEntity.getExecutionId()).iterator();
                    while (localIterator.hasNext()) {
                        TaskEntity taskEntity = (TaskEntity) localIterator.next();
                        //删除任务
                        Context.getCommandContext().getTaskEntityManager().deleteTask(taskEntity, "跳转节点", true);
                    }
                    executionEntity.executeActivity(targetActivity);  //设置任务 执行对象
                    return null;
                }
            });
    }
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器