Flowable是一个轻量级的业务流程引擎,它提供了强大的流程定义、执行和管理功能。在实际应用中,我们经常需要设置流程的自动同意功能,以提高流程处理的效率。本文将详细介绍如何在Flowable中实现流程的自动同意设置。

一、需求背景

自动同意功能主要适用于以下几种场景:

  1. 发起人自动审核:当流程的发起人同时也是审核人时,可以实现自动审核同意。
  2. 相同审核人自动审核:如果上一节点的审核人与当前节点的审核人相同,也可以实现自动审核同意。
  3. 已审核节点自动审核:如果整个流程实例中存在已审核的节点,当前节点也可以自动审核同意。
二、实现步骤
  1. 配置流程定义
    在Flowable中,流程定义是通过BPMN文件来实现的。在BPMN文件中,可以通过设置自定义属性来实现自动同意功能。这些自定义属性需要在流程模板中定义好并赋值。
  2. 修改源码
    Flowable的源码是开源的,可以通过修改源码来实现自定义属性的识别和解析。具体步骤如下:
  • 下载源码:从Flowable官网或Gitee下载与项目当前使用的Flowable版本相匹配的源码。
  • 修改stencilset_bpmn.json文件:在Flowable源码中,找到stencilset_bpmn.json文件,并在其中添加自定义属性。这个文件保存了所有工作流模板中的节点信息,包括各个节点的属性。
  • 识别自定义属性:在UserTaskJsonConverter.java文件中,修改convertJsonToElement和convertElementToJson方法,让Flowable能够识别自定义属性。
  1. 实现自动同意逻辑
    在Flowable中,可以通过TaskListener来实现自定义逻辑。我们可以自定义一个TaskListener,并在其中实现自动同意的逻辑。
@Override
public void notify(DelegateTask delegateTask) {
    // 从自定义属性中获取自动同意的配置
    String autoApprovalEnabledStr = (String) delegateTask.getVariable("autoApprovalEnabled");
    String autoApprovalRuleStr = (String) delegateTask.getVariable("autoApprovalRule");

    // 判断是否启用自动同意
    if ("true".equals(autoApprovalEnabledStr)) {
        // 根据自动同意规则执行同意操作
        runtimeService.setVariable(delegateTask.getProcessInstanceId(), "approval", "pass");
        taskService.complete(delegateTask.getId(), null);
    }
}

在上面的代码中,我们通过获取流程变量中的自定义属性来判断是否启用自动同意功能。如果启用,则设置审批结果为“pass”,并调用taskService.complete方法来完成当前任务。

  1. 部署流程
    完成上述步骤后,需要将修改后的BPMN文件和源码重新打包并部署到Flowable服务器上。部署完成后,就可以启动并使用新的流程了。
三、注意事项
  1. 自定义属性的命名:在添加自定义属性时,需要注意属性的命名规范。Flowable不识别驼峰命名,因此建议使用全小写或使用下划线连接。
  2. 版本兼容性:在修改源码时,需要确保下载的源码版本与项目当前使用的Flowable版本相匹配,以避免版本不兼容的问题。
  3. 安全性:自动同意功能虽然提高了流程处理的效率,但也存在一定的安全风险。因此,在设置自动同意时,需要谨慎考虑并设置合理的规则。
四、总结

本文详细介绍了如何在Flowable中实现流程的自动同意设置。通过配置流程定义、修改源码和实现自动同意逻辑等步骤,我们可以轻松实现流程的自动同意功能。这不仅可以提高流程处理的效率,还可以减少人工操作的错误率。希望本文能够对您有所帮助!