• Activiti实现流程自由跳转


    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);
        }
    }
  • 相关阅读:
    js实现大文件上传分片上传断点续传
    php实现大文件上传分片上传断点续传
    jsp实现大文件上传分片上传断点续传
    W5500EVB TCP Server演示
    Sublime Text2-Control Package---ShinePans
    HDU 4786 Fibonacci Tree
    Vim经常使用技巧总结2
    atitit.窗口静听esc退出本窗口java swing c# .net php
    CAS原子操作实现无锁及性能分析
    架构师速成6.15-开发框架-单点登录
  • 原文地址:https://www.cnblogs.com/mymelody/p/6054372.html
Copyright © 2020-2023  润新知