activity任意节点跳转

8人阅读 评论(0) 收藏 举报
分类:
/**
     * 
     * @Description (跳转任意目标节点)
     * @author feizhou
     * @Date 2018年3月28日上午10:23:00
     * @version 1.0.0
     * @param map
     *            taskId,destTaskKey,rejectMessage,outcome
     */
    public void skipStipulationTask(Map<String, Object> map) {
        String taskId = (String) map.get("taskId");
        // 目标任务key
        String destTaskKey = (String) map.get("destTaskKey");
        //审批消息
        String rejectMessage = (String) map.get("rejectMessage");
        //流程线
        String outcome = (String) map.get("outcome");
        //业务的用户ID
        String uid = (String) map.get("uid");
        //审批消息
        String message = (String) map.get("message");
        // 使用任务ID,获取任务信息
        Task taskEntity = getTask(taskId);
        // 获得当前任务的流程实例ID
        String processInstanceId = taskEntity.getProcessInstanceId();

        // 获得当前任务的流程定义ID
        String processDefinitionId = taskEntity.getProcessDefinitionId();
        // 当前任务key
        String currtaskDefKey = taskEntity.getTaskDefinitionKey();

        // 获得当前活动节点和驳回的目标节点"draft"
        ActivityImpl currActiviti = null;// 当前活动节点
        ActivityImpl destActiviti = null;// 驳回目标节点

        currActiviti = getActivityImpl(currtaskDefKey, processDefinitionId);
        destActiviti = getActivityImpl(destTaskKey, processDefinitionId);

        // 保存当前活动节点的流程流出参数

        List<PvmTransition> hisPvmTransitionList = new ArrayList<PvmTransition>(0);

        for (PvmTransition pvmTransition : currActiviti.getOutgoingTransitions()) {
            hisPvmTransitionList.add(pvmTransition);
        }
        // 清空当前活动节点的所有流出项

        currActiviti.getOutgoingTransitions().clear();
        // 为当前节点动态创建新的流出项

        TransitionImpl newTransitionImpl = currActiviti.createOutgoingTransition();
        // 为当前活动节点新的流出项指定为目标流程节点
        newTransitionImpl.setDestination(destActiviti);
        // 保存驳回意见
        taskEntity.setDescription(rejectMessage);// 设置驳回意见
        taskService.saveTask(taskEntity);

        /**
         * 注意:添加批注的时候,由于Activiti底层代码是使用: String userId =
         * Authentication.getAuthenticatedUserId(); CommentEntity comment = new
         * CommentEntity(); comment.setUserId(userId);
         * 所有需要从Session中获取当前登录人,作为该任务的办理人(审核人),对应act_hi_comment表中的User_ID的字段,
         * 不添加审核人,该字段为null
         * 所以要求,添加配置执行使用Authentication.setAuthenticatedUserId();添加当前任务的审核人
         */
        Authentication.setAuthenticatedUserId(uid);
        taskService.addComment(taskId, processInstanceId, message);

        // 设定驳回标志
        Map<String, Object> variables = new HashMap<String, Object>(0);
        variables.put("outcome", outcome);
        // 执行当前任务驳回到目标任务draft
        taskService.complete(taskEntity.getId(), variables);
        // 清除目标节点的新流入项
        destActiviti.getIncomingTransitions().remove(newTransitionImpl);
        // 清除原活动节点的临时流程项
        currActiviti.getOutgoingTransitions().clear();
        // 还原原活动节点流出项参数
        currActiviti.getOutgoingTransitions().addAll(hisPvmTransitionList);
    }
/**
     * 
     * @Description (通过任务key,获取对应的节点信息)
     * @author feizhou
     * @Date 2018年3月28日下午1:53:29
     * @version 1.0.0
     * @param taskKey
     * @return
     */
    public ActivityImpl getActivityImpl(String destTaskKey, String processDefinitionId) {
        // 获得当前流程的定义模型
        ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService)
                .getDeployedProcessDefinition(processDefinitionId);

        // 获得当前流程定义模型的所有任务节点

        List<ActivityImpl> activitilist = processDefinition.getActivities();
        // 获得当前活动节点和驳回的目标节点"draft"
        ActivityImpl descActiviti = null;// 当前活动节点

        for (ActivityImpl activityImpl : activitilist) {
            // 获取节点对应的key
            String taskKey = activityImpl.getId();
            // 确定当前活动activiti节点
            if (destTaskKey.equals(taskKey)) {
                descActiviti = activityImpl;
                break;
            }
        }
        return descActiviti;
    }
查看评论

Android四大组件教程——Activity

剔除繁杂的理论,注重实践,深入浅出且系统地讲解Android的相关知识
  • 2017年02月25日 21:42

activiti节点跳转

activiti节点跳转,任意节点的跳转,前提是节点必须在模板定义中。activiti节点跳转任意节点跳转。任意节点的跳转暂时不能跨流程跳转。任意节点的跳转不需要连线即可、任意节点的跳转可以实现回退、...
  • qq_30739519
  • qq_30739519
  • 2016-04-26 10:39:31
  • 18409

【Activiti】跳转到工作流的任意节点(本例用跳转到上一节点讲解即流程回退)

所有用到的service以及实现类都是工作流(Activiti)本身的。public String taskRollback(String taskId){ //根据当前任务ID获取当前任务 ...
  • tanglei6636
  • tanglei6636
  • 2017-01-03 10:19:17
  • 5587

activiti任意跳转

Java代码   public class JumpTaskCmd implements Command {          protected String executionI...
  • sarck3
  • sarck3
  • 2013-09-17 17:41:39
  • 2257

扩展Activiti-5.12轻松实现流程节点间自由跳转和任意驳回/撤回

由于项目需要,最近对开源工作流引擎Activiti-5.12的功能做了一下扩展,实现了以下功能:  1.自由流(流程节点间自由跳转和任意驳回/撤回)  2.流程会签任务串并行模式切换  一、...
  • sd4015700
  • sd4015700
  • 2015-10-29 11:42:05
  • 3103

Activiti 自由跳转两种实现方式-自我总结

package com.zdc.test; import java.util.List; import org.activiti.engine.HistoryService; import org...
  • qq_18735553
  • qq_18735553
  • 2017-01-20 16:43:16
  • 2565

也谈一下Activiti工作流节点的自由跳转

最近在搞openwebflow的工作流节点自由跳转功能,在网上看了一些资料,感觉不是很好,总结原因如下: 直接手动调用SqlSession的操作,感觉会漏掉一些重要的初始化操作(如:启动新节点之后...
  • bluejoe2000
  • bluejoe2000
  • 2014-12-06 21:42:05
  • 31248

关于activiti驳回到任意节点的实现

我也是从网上找的,然后进行了简化和研究,固定驳回到draft节点,直接上代码,带注解的: @Override public void rejectTask(String procInstId, St...
  • sarck3
  • sarck3
  • 2013-09-17 17:17:04
  • 4215

Activiti工作流节点的自由跳转

最近在搞openwebflow的工作流节点自由跳转功能,在网上看了一些资料,感觉不是很好,总结原因如下: 直接手动调用SqlSession的操作,感觉会漏掉一些重要的初始化操作(如:启动...
  • junlong750
  • junlong750
  • 2016-03-16 15:32:00
  • 1123

卡卡片视图的形式管理你的 Activity,让你的 app 可以自由的切换、跳转、关闭 Activity 以及结束 app 程序

卡卡片视图的形式管理你的 Activity,让你的 app 可以自由的切换、跳转、关闭 Activity 以及结束 app 程序...
  • u014608640
  • u014608640
  • 2016-11-09 11:30:59
  • 642
    activiti
    activiti学习
    个人资料
    持之以恒
    等级:
    访问量: 20万+
    积分: 6720
    排名: 4402
    博客专栏
    最新评论