Activiti7 流程回退、流程拒绝【二十】

Activiti 7系列文章目录

文章代码下载

Activiti7 工作流设计器【一】
Activiti7 创建表【二】
Activiti7 表结构介绍 【三】
Activiti7 设计器创建流程 【四】
Activiti7 部署流程【五】
Activiti7 查询流程【六】
Activiti7 删除流程【七】
Activiti7 生成SVG图片【八】
Activiti7 发起任务【九】
Activiti7 查询任务执行流程图【十】
Activiti7 完成任务【十一】
Activiti7 历史数据【十二】
Activiti7 任务办理人、委派、转办、持有人、候选人、候选人组、审批意见【十三】
Activiti7 监听器【十四】
Activiti7 流程变量【十五】
Activiti7 网关Gateway【十六】
Activiti7 整合SpringBoot【十七】
Activiti7 多种任务类型【十八】
Activiti7 子流程【十九】
Activiti7 流程回退、流程拒绝【二十】

定义流程

通过变量控制流程走向
image.png

【请假审批】完成

image.png

image.png
【请假申请】不需要配置变量

@Test
public void testApplyTask() throws IOException {
    Task task = taskService
            .createTaskQuery()
            .singleResult();
    taskService.complete(task.getId());
    generateImage();
}

【经理审批】拒绝

这里需要通过变量:result=0来控制

@Test
public void testApplyTask() throws IOException {
    Task task = taskService
            .createTaskQuery()
            .singleResult();
    Map<String,Object> variables = new HashMap<>();
    variables.put("result",0);
    taskService.complete(task.getId(),variables);
    generateImage();
}

image.png

流程文件

back.bpmn20.xml

驳回介绍

我们可以通过变量控制来控制流程走向,达到拒绝效果。
image.png
image.png
image.png

注意

不同节点的变量名不能一样,否则值可能会导致异常

  • 【经理审批】
    • pmresult=1同意
    • pmresult=0拒绝
  • 【人事审批】
    • hrresult=1同意
    • hrresult=0拒绝
  • 【CEO审批】
    • ceoresult=1同意
    • ceoresult=0拒绝

发起流程

image.png

【经理审批】同意

完成任务【经理审批】添加变量:result=1

@Test
public void testCompleteTask() throws IOException {
    Task task = taskService
            .createTaskQuery()
            .singleResult();
    Map<String,Object> variables = new HashMap<>();
    variables.put("pmresult",1);
    taskService.complete(task.getId(),variables);
}

image.png

【人事审批】拒绝

@Test
public void testCompleteTask() throws IOException {
    Task task = taskService
            .createTaskQuery()
            .singleResult();
    Map<String,Object> variables = new HashMap<>();
    variables.put("hrresult",0);
    taskService.complete(task.getId(),variables);
}

image.png

流程文件

refuse.bpmn20.xml

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
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中实现并行网关回退的几种方法,具体选择哪种方法应根据具体的业务需求和实际情况进行酌情选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员一灯

请给我打钱!!!谢谢,不客气!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值