17.flowable 流程实例撤回

项目地址:https://gitee.com/lwj/flowable.git 分支flowable-base
视频讲解地址
https://www.bilibili.com/video/av78129693/

1、演示在这里插入图片描述

2、代码

public ReturnVo<String> revokeProcess(RevokeVo revokeVo) {
        ReturnVo<String> returnVo = new ReturnVo<>(ReturnCode.FAIL, "撤回失败!");
        if (StringUtils.isNotBlank(revokeVo.getProcessInstanceId())) {
            ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
                    .processInstanceId(revokeVo.getProcessInstanceId()).singleResult();
            if (processInstance != null) {
                //1.添加撤回意见
                this.addComment(revokeVo.getUserCode(), revokeVo.getProcessInstanceId(), CommentTypeEnum.CH.toString(), revokeVo.getMessage());
                //2.设置提交人
                runtimeService.setVariable(revokeVo.getProcessInstanceId(), FlowConstant.FLOW_SUBMITTER_VAR, processInstance.getStartUserId());
                //3.执行撤回
                Activity disActivity = flowableBpmnModelService.findActivityByName(processInstance.getProcessDefinitionId(), FlowConstant.FLOW_SUBMITTER);
                //4.删除运行和历史的节点信息
                this.deleteActivity(disActivity.getId(), revokeVo.getProcessInstanceId());
                //5.执行跳转
                List<Execution> executions = runtimeService.createExecutionQuery().parentId(revokeVo.getProcessInstanceId()).list();
                List<String> executionIds = new ArrayList<>();
                executions.forEach(execution -> executionIds.add(execution.getId()));
                this.moveExecutionsToSingleActivityId(executionIds, disActivity.getId());
                returnVo = new ReturnVo<>(ReturnCode.SUCCESS, "撤回成功!");
            }
        } else {
            returnVo = new ReturnVo<>(ReturnCode.FAIL, "流程实例id不能为空!");
        }
        return returnVo;
    }
### 实现驳回后重新发起流程功能 在 Flowable 工作流引擎中,处理驳回并允许用户重新提交申请的需求可以通过多种方式来实现。一种常见的方式是在业务逻辑层面上设计特定的任务监听器或者服务任务,在这些组件内部编写自定义代码以支持此操作。 当某个节点被拒绝时,可以将当前实例的状态保存下来,并记录下必要的上下文信息以便后续恢复使用[^1]。此时并不真正结束整个流程实例而是将其挂起或标记为待修改状态。对于前端应用而言,则需提供界面让用户能够查看到哪些地方存在问题以及如何修正它们;一旦用户完成了所需更改之后再次触发启动新版本的工作流请求时,应该携带上一次失败的相关数据作为参数传递给新的流程实例创建过程之中[^2]。 另外还可以考虑利用 Flowable 的事件机制捕获审批不通过的消息,进而执行相应的动作比如更新数据库表单字段表示该条目处于重审阶段等。值得注意的是如果涉及到历史记录保留的话还需要额外注意确保每次重启都不会覆盖之前的信息[^3]。 ```java // Java Code Example for handling rejection and restarting a process instance. public class RejectionHandler { private RuntimeService runtimeService; public void handleRejection(String processInstanceId, Map<String, Object> variables){ ProcessInstance pi = runtimeService.createProcessInstanceQuery() .processInstanceId(processInstanceId).singleResult(); // Save the state of current process before setting it to suspended status or marking as pending modification. saveState(pi); // Optionally update database fields indicating this entry is under review again. markForReview(processInstanceId); // Suspend the existing process instance instead of terminating it directly. runtimeService.suspendProcessInstanceById(processInstanceId); // Start new process with previous data included in start form parameters. String businessKey = getBusinessKeyFromPi(pi); runtimeService.startProcessInstanceByKeyAndTenantId( "your-process-definition-key", businessKey, variables); } } ```
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小学生05101

flowable

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

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

打赏作者

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

抵扣说明:

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

余额充值