Activiti实现流程自由跳转
2016-11-11 15:12
766 查看
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); } }
相关文章推荐
- 优雅的实现Activiti动态调整流程(自由跳转、前进、后退、分裂、前加签、后加签等),含范例代码!
- 优雅的实现Activiti动态调整流程(自由跳转、前进、后退、分裂、前加签、后加签等),含范例代码!
- 扩展Activiti-5.12轻松实现流程节点间自由跳转和任意驳回/撤回
- 扩展Activiti-5.12轻松实现流程节点间自由跳转和任意驳回/撤回
- 优雅的实现Activiti动态调整流程(自由跳转、前进、后退、分裂、前加签、后加签等),含范例代码!
- 优雅的实现Activiti动态调整流程(自由跳转、前进、后退、分裂、前加签、后加签等),含范例代码!
- Activiti 自由跳转两种实现方式-自我总结
- 使用ccflow的跳转规则实现流程的自由跳转功能。
- 多年一直想完善的自由行政审批流程组件【2002年PHP,2008年.NET,2010年完善数据设计、代码实现】
- 多年一直想完善的自由行政审批流程组件【2002年PHP,2008年.NET,2010年完善数据设计、代码实现】
- 多年一直想完善的自由行政审批流程组件【2002年PHP,2008年.NET,2010年完善数据设计、代码实现】
- Activiti工作流节点的自由跳转
- 多年一直想完善的自由行政审批流程组件【2002年PHP,2008年.NET,2010年完善数据设计、代码实现】
- 扩展Activiti流程定义文件,实现自定义节点属性
- Activiti工作流节点的自由跳转
- jbpm4.3自由流程(动态路由)的实现
- 安卓startActivityForResult实现多个Activity之间不同跳转流程
- Cocos2d-js02_实现UI流程和场景跳转
- 也谈一下Activiti工作流节点的自由跳转
- 多年一直想完善的自由行政审批流程组件【2002年PHP,2008年.NET,2010年完善数据设计、代码实现】