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

原创 2017年01月03日 10:19:17

所有用到的service以及实现类都是工作流(Activiti)本身的。

public String taskRollback(String taskId){
    //根据要跳转的任务ID获取其任务
    HistoricTaskInstance hisTask = historyService
                .createHistoricTaskInstanceQuery().taskId(taskId)
                .singleResult();
    //进而获取流程实例
    ProcessInstance instance = runtimeService
                .createProcessInstanceQuery()
                .processInstanceId(hisTask.getProcessInstanceId())
                .singleResult();
    //取得流程定义
    ProcessDefinitionEntity definition = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(hisTask.getProcessDefinitionId());
    //获取历史任务的Activity
    ActivityImpl hisActivity = definition.findActivity(hisTask.getTaskDefinitionKey());
    //实现跳转
    managementService.executeCommand(new JumpCmd(instance.getId(), hisActivity.getId()));
}

public class JumpCmd implements Command<ExecutionEntity>{

    private String processInstanceId;
    private String activityId;
    public static final String REASION_DELETE = "deleted";

    public JumpCmd(String processInstanceId, String activityId) {
        this.processInstanceId = processInstanceId;
        this.activityId = activityId;
    }

    @Override
    public ExecutionEntity execute(CommandContext commandContext) {
        ExecutionEntity executionEntity = commandContext.getExecutionEntityManager().findExecutionById(processInstanceId);

        executionEntity.destroyScope(REASION_DELETE);
        ProcessDefinitionImpl processDefinition = executionEntity.getProcessDefinition();
        ActivityImpl activity = processDefinition.findActivity(activityId);
        executionEntity.executeActivity(activity);

        return executionEntity;
    }

}

用这个JumpCmd方法就可以实现所有流程节点的跳转。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Activiti工作流之获取流程定义中所有的节点

初步设想实现一个部署完工作流之后,为UserTask节点动态分配任务执行者,或者在分支节点上添加进入条件的功能。为了实现这个功能需要解析流程定义文件取出文件中定义的所有节点。这里有两个方法可以实现此功...

activiti根据当前节点获取下一个UseTask节点

以前写过一篇文章activiti根据当前节点获取下一个节点信息,当时的需求只是需要获取下一个节点而已,并没有要求获得什么类型的节点,所以下一个节点可能是任何节点,在最近的项目中的需求是根据当前的节点获...

activiti根据当前节点获取下一个节点信息

在流程中使用监听器判断当前节点是否需要经过,否则跳转到下一个节点,如下图 当提交申请之后,当前提交人为部门负责人,那么部门负责人节点就不需要走了,直接到下一个节点,但是下一个节点是什么并不知道,就可...

activiti 如何获取下一步节点

ACTIVITI相对于JBPM来说,比较年轻,用的人少,中文方面的资料更少,我根据网上到处找得资料以及看官方文档总结出来了代码,非常不容易啊。废话不多说,直接上代码吧: 首先是根据流程ID获...

activiti节点跳转

activiti节点跳转,任意节点的跳转,前提是节点必须在模板定义中。activiti节点跳转任意节点跳转。任意节点的跳转暂时不能跨流程跳转。任意节点的跳转不需要连线即可、任意节点的跳转可以实现回退、...

Activiti5.14 流程跳跃/退回/驳回/自定义流转(中国式退回)

package com.mf.component.workflow.activiti.cmd; import java.util.Map; import org.activiti.engine.A...

activiti灵活跳转驳回回退操作动态修改流程

import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExcept...

优雅的实现Activiti动态调整流程(自由跳转、前进、后退、分裂、前加签、后加签等),含范例代码!

最近对Activiti做了一些深入的研究,对Activiti的流程机制有了些理解,对动态调整流程也有了一些实践方法。 现在好好总结一下,一来是对这段时间自己辛苦探索的一个记录,二来也是为后来者指指路...

Activiti 指定节点跳转(适合退回、撤回)流程

//方法一,画退回的路线,设置退回的条件值 //方法二,退回到指定环节 @RequestMapping("/rollBackToAssgin.do") public void rollBackT...

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

最近在搞openwebflow的工作流节点自由跳转功能,在网上看了一些资料,感觉不是很好,总结原因如下: 直接手动调用SqlSession的操作,感觉会漏掉一些重要的初始化操作(如:启动新节点之后...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Activiti】跳转到工作流的任意节点(本例用跳转到上一节点讲解即流程回退)
举报原因:
原因补充:

(最多只允许输入30个字)