java点击按钮撤回_Activiti6.0版本流程撤回、跳转、回退等操作

本文介绍了如何在Java中使用Activiti6.0版本实现点击按钮撤回流程操作,包括获取当前任务节点、创建新方向、完成任务及还原原有流向等步骤。
摘要由CSDN通过智能技术生成

如题,实现思路:

1、获取当前任务所在的节点

2、获取所在节点的流出方向

3、记录所在节点的流出方向,并将所在节点的流出方向清空

4、获取目标节点

5、创建新的方向

6、将新的方向set到所在节点的流出方向

7、完成当前任务

8、还原所在节点的流出方向

public void revoke(String objId) throws Exception {

Task task = taskService.createTaskQuery().processInstanceBusinessKey(objId).singleResult();

if(task==null) {

throw new ServiceException("流程未启动或已执行完成,无法撤回");

}

LoginUser loginUser = SessionContext.getLoginUser();

List htiList = historyService.createHistoricTaskInstanceQuery()

.processInstanceBusinessKey(objId)

.orderByTaskCreateTime()

.asc()

.list();

String myTaskId = null;

HistoricTaskInstance myTask = null;

for(HistoricTaskInstance hti : htiList) {

if(loginUser.getUsername().equals(hti.getAssignee())) {

myTaskId = hti.getId();

myTask = hti;

break;

}

}

if(null==myTaskId) {

throw new ServiceException("该任务非当前用户提交,无法撤回");

}

String processDefinitionId = myTask.getProcessDefinitionId();

ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();

BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);

//变量

//Map variables = runtimeService.getVariableInstances(currentTask.getExecutionId());

String myActivityId = null;

List haiList = historyService.createHistoricActivityInstanceQuery()

.executionId(myTask.getExecutionId()).finished().list();

for(HistoricActivityInstance hai : haiList) {

if(myTaskId.equals(hai.getTaskId())) {

myActivityId = hai.getActivityId();

break;

}

}

FlowNode myFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(myActivityId);

Execution execution = runtimeService.createExecutionQuery().executionId(task.getExecutionId()).singleResult();

String activityId = execution.getActivityId();

logger.warn("------->> activityId:" + activityId);

FlowNode flowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(activityId);

//记录原活动方向

List oriSequenceFlows = new ArrayList();

oriSequenceFlows.addAll(flowNode.getOutgoingFlows());

//清理活动方向

flowNode.getOutgoingFlows().clear();

//建立新方向

List newSequenceFlowList = new ArrayList();

SequenceFlow newSequenceFlow = new SequenceFlow();

newSequenceFlow.setId("newSequenceFlowId");

newSequenceFlow.setSourceFlowElement(flowNode);

newSequenceFlow.setTargetFlowElement(myFlowNode);

newSequenceFlowList.add(newSequenceFlow);

flowNode.setOutgoingFlows(newSequenceFlowList);

Authentication.setAuthenticatedUserId(loginUser.getUsername());

taskService.addComment(task.getId(), task.getProcessInstanceId(), "撤回");

Map currentVariables = new HashMap();

currentVariables.put("applier", loginUser.getUsername());

//完成任务

taskService.complete(task.getId(),currentVariables);

//恢复原方向

flowNode.setOutgoingFlows(oriSequenceFlows);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值