天天看點

工作流實戰_10_flowable 流程執行個體的删除

項目位址 ​​https://gitee.com/lwj/flowable.git​​
代碼分支 flowable-base
視訊講解位址 ​​https://space.bilibili.com/485524575/channel/detail?cid=94579​​
使用者名 密碼
0000001 test
0000002 test
0000003 test
0000004

文章目錄

  • ​​1. 示範​​
  • ​​2. 代碼​​
  • ​​2.1. 删除執行個體指令​​
  • ​​2.2. 執行删除動作​​

1. 示範

2. 代碼

2.1. 删除執行個體指令

public class DeleteFlowableProcessInstanceCmd implements Command<Void>, Serializable {

    private static final long serialVersionUID = 1L;
    protected String processInstanceId;
    protected String deleteReason;
    protected boolean cascade = false;

    public DeleteFlowableProcessInstanceCmd(String processInstanceId, String deleteReason) {
        this.processInstanceId = processInstanceId;
        this.deleteReason = deleteReason;
    }

    public DeleteFlowableProcessInstanceCmd(String processInstanceId, String deleteReason,boolean cascade) {
        this.processInstanceId = processInstanceId;
        this.deleteReason = deleteReason;
        this.cascade = cascade;
    }

    @Override
    public Void execute(CommandContext commandContext) {
        if (processInstanceId == null) {
            throw new FlowableIllegalArgumentException("processInstanceId is null");
        }

        ExecutionEntity processInstanceEntity = CommandContextUtil.getExecutionEntityManager(commandContext).findById(processInstanceId);
        if (processInstanceEntity == null) {
            throw new FlowableObjectNotFoundException("No process instance found for id '" + processInstanceId + "'", ProcessInstance.class);
        }
        if (processInstanceEntity.isDeleted()) {
            return null;
        }

        if (Flowable5Util.isFlowable5ProcessDefinitionId(commandContext, processInstanceEntity.getProcessDefinitionId())) {
            Flowable5CompatibilityHandler compatibilityHandler = Flowable5Util.getFlowable5CompatibilityHandler();
            compatibilityHandler.deleteProcessInstance(processInstanceId, deleteReason);
        } else {
            CommandContextUtil.getExecutionEntityManager(commandContext).deleteProcessInstance(processInstanceEntity.getProcessInstanceId(), deleteReason, cascade);
        }

        return null;
    }

}
      

2.2. 執行删除動作

public ReturnVo<String> deleteProcessInstanceById(String processInstanceId) {
        ReturnVo<String> returnVo = null;
        long count = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).count();
        if (count > 0) {
            DeleteFlowableProcessInstanceCmd cmd = new DeleteFlowableProcessInstanceCmd(processInstanceId, "删除流程執行個體", true);
            managementService.executeCommand(cmd);
            returnVo = new ReturnVo<>(ReturnCode.SUCCESS, "删除成功");
        } else {
            historyService.deleteHistoricProcessInstance(processInstanceId);
            returnVo = new ReturnVo<>(ReturnCode.SUCCESS, "删除成功");
        }
        return returnVo;
    }