import org.activiti.engine.ProcessEngine;
import org.activiti.engine.TaskService;
import org.activiti.engine.impl.RepositoryServiceImpl;
import org.activiti.engine.impl.RuntimeServiceImpl;
import org.activiti.engine.impl.interceptor.Command;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.impl.persistence.entity.TaskEntity;
import org.activiti.engine.impl.pvm.process.ActivityImpl; /**
* Created by Administrator on 2016/11/11.
*/
public class TaskFlowControlService {
ProcessEngine _processEngine;
private String _processId; public TaskFlowControlService(ProcessEngine processEngine, String processId)
{
this._processEngine = processEngine;
this._processId = processId;
} /**
* 跳转至指定活动节点
* @param targetTaskDefinitionKey
*/
public void jump(String targetTaskDefinitionKey){
TaskEntity currentTask = (TaskEntity)_processEngine.getTaskService()
.createTaskQuery()
.processInstanceId(_processId).singleResult();
jump(currentTask,targetTaskDefinitionKey);
} /**
* @param currentTaskEntity 当前任务节点
* @param targetTaskDefinitionKey 目标任务节点(在模型定义里面的节点名称)
*/
private void jump(final TaskEntity currentTaskEntity, String targetTaskDefinitionKey){
final ActivityImpl activity = getActivity(_processEngine,
currentTaskEntity.getProcessDefinitionId(),targetTaskDefinitionKey);
final ExecutionEntity execution = (ExecutionEntity)_processEngine.getRuntimeService()
.createExecutionQuery().executionId(currentTaskEntity.getExecutionId()).singleResult();
final TaskService taskService = _processEngine.getTaskService();
((RuntimeServiceImpl)_processEngine.getRuntimeService()).getCommandExecutor()
.execute(new Command<java.lang.Void>() {
public Void execute(CommandContext commandContext) { //创建新任务
execution.setActivity(activity);
execution.executeActivity(activity); //删除当前的任务
//不能删除当前正在执行的任务,所以要先清除掉关联
currentTaskEntity.setExecutionId(null);
taskService.saveTask(currentTaskEntity);
taskService.deleteTask(currentTaskEntity.getId(),true);
return null;
}
});
} private ActivityImpl getActivity(ProcessEngine processEngine, String processDefId, String activityId)
{
ProcessDefinitionEntity pde = getProcessDefinition(processEngine, processDefId);
return pde.findActivity(activityId);
} private ProcessDefinitionEntity getProcessDefinition(ProcessEngine processEngine, String processDefId)
{
return (ProcessDefinitionEntity) ((RepositoryServiceImpl) processEngine.getRepositoryService())
.getDeployedProcessDefinition(processDefId);
}
}

最新文章

  1. [Linux基础]Linux基础知识入门及常见命令.
  2. web server &amp;&amp; web framework角色区分
  3. UISegmentedControl的详细使用
  4. weave
  5. web打印
  6. boa配置文件详解
  7. 2016 Multi-University Training Contest 1 Necklace 环排+二分匹配
  8. python request模块学习
  9. ibatis新手入门
  10. 异步编程Async/await关键字
  11. Android圆形头像,拍照后“无法加载此图片”的问题解决(适配Android7.0)
  12. 常用JSON接口
  13. Java8时间的简单时间
  14. Idea+maven+testNG+Selenium+ReportNG自动化框架搭建
  15. 与TIME_WAIT相关的几个内核参数修改测试讨论结论
  16. 专题8:javascript函数详解
  17. jQuery事件处理(四)
  18. dedecms建的网站如何去掉/index.html
  19. 关于Redis-存Long取Integer类型转换错误的问题;String对象被转义的问题
  20. Atitit.故障排除系列---php 程序网站数据库错误排除流程

热门文章

  1. springboot打jar包,调用webservice出错
  2. 和我一起熟悉caffe2
  3. 安卓ListView行详细内容展示页编写和下拉刷新实现
  4. IntelliJ IDEA如何设置新建类时,自动注释作者信息和日期时间
  5. Centos7静默安装Weblogic12C
  6. DotNetCore深入了解之一Startup类
  7. Linux centos 7/ubantu下: 用 C 语言连接 MySQL数据库
  8. ④品茶看&lt;Servlet&amp;JSP&gt;-EL表达式
  9. ES6 系列之私有变量的实现
  10. DRF之项目搭建