参考:https://blog.csdn.net/u013292160/article/details/66973243
以及 https://blog.csdn.net/zhangpan_soft/article/details/78761937
上面第一个博客的驳回代码量比较少,开始是参考这个。但是不知道是不是版本的问题(我的activiti是5.18),实际运行会报空指针错误。debug后发现是outgoing transition的id为空导致。只需在初始化transitionImpl的时候传入id即可,id的值应为出口指向activity的id。
transitionImpl = currActivity.createOutgoingTransition(lastActivity.getId());
下面直接贴代码,思路上两个博客都有借鉴。代码量比第一个多比第二个少。
由于是驳回到上一个节点,将当前activity的outgoing出口清空,从历史中找到最后完成的activity,然后把当前出口指向最后完成的activity。complete task,任务就会回到上一个节点中。最后再把出口改回去即可。
@Test
public void reject() {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = processEngine.getTaskService();
HistoryService historyService = processEngine.getHistoryService();
RuntimeService runtimeService = processEngine.getRuntimeService();
RepositoryService repositoryService = processEngine.getRepositoryService();
String taskId = "120002";//这里根据你自己的taskid来写
Map variables = new HashMap<>();
//获取当前任务
HistoricTaskInstance currTask = historyService.createHistoricTaskInstanceQuery()
.taskId(taskId)
.singleResult();
//获取流程实例
ProcessInstance processInstance = runtimeService.createProcessInstan