Activity并行网关驳回处理

需求描述:

流程发起时需要由A和B共同审批,两人审批都通过之后交由C审批,当C审批驳回后,进入流程修改环节,再次提交后重新由A和B共同审批。

在这里插入图片描述

第一版本的流程图画法:第一个并行网关分别对应了流出的两条分支A和B,加上一个修改的流入分支;这样的画法是错误的,流程发起后流程只会走到第一个并行网关处,不会走到A和B节点。

解决方式一

需要在并行网关前面加一个服务任务节点。
添加之后不管是首次发起流程还是修改之后重新提交,流程都会重新流转至A和B。
在这里插入图片描述

对于服务任务节点的配置我这里只配置了监听类就可满足业务需求,其他的相关配置可自行查找使用。
在这里插入图片描述
监听类的写法也比较简单,这块也记录一下:

public class MyServiceTask implements JavaDelegate {
    @Override
    public void execute(DelegateExecution execution) throws Exception {
        System.out.println("服务节点对应的类自动执行了!!!");
    }
}

解决方式二

在并行网关前面加一个手工任务节点。

手工任务主要用来表示工作需要某人完成,而引擎不需要知道,手工任务是直接通过的活动, 流程到达它之后会自动向下执行。
在这里插入图片描述

有关活动列表中各个任务的解释可参考:activity任务类型

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Activiti中,如果在并行网关处需要进行回退操作,可以采用以下方法: 1. 使用多实例任务:在并行网关处创建多个实例任务,每个任务都是独立运行的,如果需要回退操作,可以通过撤销或跳转到之前的任务来实现回退。 2. 使用Java API:通过使用Activiti的Java API,在并行网关处根据需要的情况,将正在执行的任务撤销或跳转到之前的任务。可以使用如下代码示例: ```java // 获取当前流程实例的任务列表 List<Task> tasks = taskService.createTaskQuery().processInstanceId(processInstanceId).list(); // 获取需要回退的任务,并将其设置为活动状态,将其他正在执行的任务设置为完结状态 for (Task task : tasks) { if (task.getTaskDefinitionKey().equals("parallelGatewayId")) { taskService.complete(task.getId()); } else { // 回退到之前的任务节点,例如:可以将其跳转到上一个用户任务节点 BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId()); FlowNode targetFlowNode = (FlowNode) bpmnModel.getFlowElement(previousTaskDefinitionKey); // 通过工作流的Java API实现任务的跳转 managementService.executeCommand(new JumpTaskCmd(task.getId(), targetFlowNode.getId())); } } ``` 3. 使用流程动态调整:通过在运行时动态调整流程,将并行网关后的任务回退,然后再重新启动回退的任务。可以使用如下代码示例: ```java // 创建一个HistoricActivityInstanceQuery对象,获取并行网关后的任务节点 HistoricActivityInstanceQuery historicQuery = historyService.createHistoricActivityInstanceQuery() .processInstanceId(processInstanceId).activityType("parallelGateway"); // 获取并行网关后的任务节点的历史实例列表 List<HistoricActivityInstance> historicInstances = historicQuery.list(); // 回退并行网关后的任务节点 for (HistoricActivityInstance activityInstance : historicInstances) { // 设置任务节点为撤销状态 runtimeService.createProcessInstanceModification(processInstanceId) .cancelActivityInstances(activityInstance.getId()) .execute(); } // 重新启动回退的任务节点 runtimeService.createProcessInstanceModification(processInstanceId) .startBeforeActivity(taskDefinitionKey) .execute(); ``` 以上是在Activiti中实现并行网关回退的几种方法,具体选择哪种方法应根据具体的业务需求和实际情况进行酌情选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值