Activiti获取当前活动(任务)的出口(动态生成提交按钮)

  1、设置出口变量

    当一个任务有一个或多个出口时,可以在出口连线出设置判断条件如图:

 

    2、根据任务Id获取出口集合

    public List<String> getOutGoingTransNames(String taskId) {
        List<String> transNames = new ArrayList<>();
        // 1.获取流程定义
        Task task = this.taskService.createTaskQuery().taskId(taskId).singleResult();
        ProcessDefinitionEntity pd = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(task.getProcessDefinitionId());
        // 2.获取流程实例
        ProcessInstance pi =runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult(); 
        // 3.通过流程实例查找当前活动的ID
        String activitiId = pi.getActivityId();
        // 4.通过活动的ID在流程定义中找到对应的活动对象
        ActivityImpl activity = pd.findActivity(activitiId);
        // 5.通过活动对象找当前活动的所有出口
         List<PvmTransition> transitions =  activity.getOutgoingTransitions();
        // 6.提取所有出口的名称,封装成集合
         for (PvmTransition trans : transitions) {
             String transName = (String) trans.getProperty("name");
             if(StringUtils.isNotBlank(transName)){
                 transNames.add(transName);
             }
        }
         if(transNames.size()==0){
             transNames.add("提交");//默认
         }
        return transNames;
    }

  3、应用

    在页面展示的时候遍历节点出口,在提交的时候传入相应的提交出口名称

    提交代码:

     Map<String, Object> vars = new HashMap<>();
        vars.put("outcome", outcome);//outcome为提交按钮的名称
    // 完成任务
    taskService.complete(taskId,vars);

 

      

 

posted @ 2014-08-07 08:36  长夏已尽  阅读(9602)  评论(2编辑  收藏  举报