Flowable框架的入门与使用【一】

Flowable框架的入门与使用【一】

一、什么是Flowable框架?

Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable框架是由Activiti团队发起和开发的。在2013年,Activiti项目从Alfresco分离出来,成为一个独立的开源项目,并更名为Flowable,Flowable保留了Activiti的大部分核心功能,包括流程定义、流程执行引擎、任务管理等。Flowable致力于简化流程管理,并提供了各种功能来支持流程的自动化。

二、Flowable都有那些表?

主要有以下表信息,如果没用到flowable自带的用户体系的话,则ACT_ID_*表表都为空

  1. ACT_RE_*表:这些表存储着流程引擎的静态信息,包括流程定义、流程资源等。例如:

    • ACT_RE_PROCDEF: 存储流程定义信息,包括流程模型的ID、KEY、版本号等。
    • ACT_RE_DEPLOYMENT: 存储流程部署信息,包括部署时间、部署名称等。
  2. ACT_RU_*表:这些表用于存储流程运行时的实例和相关的数据。例如:

    • ACT_RU_EXECUTION: 存储流程实例的执行信息,包括当前活动、父子流程关系等。
    • ACT_RU_TASK: 存储任务实例的信息,包括任务名称、负责人、状态等。
    • ACT_RU_VARIABLE 运行时变量表
  3. ACT_HI_*表:这些表记录了历史数据,包括已完成的流程实例、任务等。例如:

    • ACT_HI_PROCINST: 存储已完成的流程实例的信息,包括开始时间、结束时间等。
    • ACT_HI_TASKINST: 存储已完成的任务实例的信息,包括任务名称、负责人、完成时间等。
    • ACT_HI_VARINST 历史的流程运行中的变量信息
    • ACT_HI_COMMENT 历史的说明性信息,审批意见
  4. ACT_ID_*表:这些表用于存储身份和权限相关的信息,例如用户、组和权限等。例如:

    • ACT_ID_USER: 存储用户信息,包括用户名、密码等。
    • ACT_ID_GROUP: 存储用户组信息,用于进行用户与用户组的关联。

三、常用的API

集成springboot之后,runtimeService,taskService都可以直接注入进来

  1. 部署流程,可以通过以下方式部署,也可以通过web流程设计器直接点部署,也可以在springboot中将流程定义文件放到resource目录执行目录下,在配置文件中开启启动项目时自动部署。

    scss 复制代码
    // 创建流程引擎
    ProcessEngine processEngine = Configuration.createProcessEngineConfigurationFromResourceDefault().buildProcessEngine();
            
    // 部署流程定义
    Deployment deployment = processEngine.getRepositoryService()
       .createDeployment()
       .addClasspathResource("leave.bpmn20.xml")
       .deploy();
  2. 启动流程实例

    ini 复制代码
    // 启动流程实例
    RuntimeService runtimeService = processEngine.getRuntimeService();
    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leaveProcess");
  3. 设置流程变量,可以在流程启动时设置,也可以在流程启动之后再设置

    javascript 复制代码
    //设置流程变量
    Map<String, Object> variables = new HashMap<>();
    variables.put("candidate0", "zhangsan");
    variables.put("candidate1", "lisi");
    ​
    ProcessInstance processInstance = runtimeService.startProcessInstanceById("leaveProcess", variables);
  4. 查询流程实例的当前任务,可以查询某个候选用户或者候选组

    scss 复制代码
    // 查询当前任务
    List<Task> tasks = taskService.createTaskQuery()
         .processInstanceId(processInstance.getId())
         .taskCandidateUser("zhangsan")
         .taskCandidateGroup("用户组")
         .list();
  1. 拾取任务,如果当前任务已经分配了候选人或候选组,需要先拾取任务

    scss 复制代码
    taskService.claim(task.getId(),"zhangsan");
    ​
    // 拾取完成之后,zhagnsan就变成了当前任务的持有者
    Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId())
         .taskAssignee("zhangsan")
         .singleResult();
    ​
  2. 归还任务,如果拾取后不想处理了,可以归还任务

    ini 复制代码
    taskService.unclaim(task.getId());
  3. 转办任务,拾取任务之后,如果不想归还,也不想自己处理,可以直接将任务转给别人

    less 复制代码
    taskService.setAssignee(task.getId(), "lisi");
  4. 委派任务,拾取任务之后,如果不想归还,也不想自己处理,可以直接将任务委派给别人,这里和转办的不同之点在于,被委派人完成之后任务所属人仍然是委派人,参考链接:www.cnblogs.com/laoxia/p/97...

    scss 复制代码
    // 委派任务
    taskService.delegateTask(taskId, userId);
    ​
    // 被委派人处理任务,注意这里不是完成
    taskService.resolveTask(taskId,variables);
  5. 完成当前任务

    less 复制代码
    // 完成请假申请任务
    for (Task task : tasks) {
         System.out.println("Current Task: " + task.getName());
         taskService.complete(task.getId());
    }

四、网上的开源框架

  1. 若依:RuoYi-flowable: 基RuoYi-vue + flowable 6.5 的工作流管理 ~
  2. jeesite:JeeSite 4.3: JeeSite 快速开发平台
相关推荐
知其然亦知其所以然2 分钟前
JVM社招面试题:队列和栈是什么?有什么区别?我在面试现场讲了个故事…
java·后端·面试
武子康5 分钟前
大数据-30 ZooKeeper Java-API 监听节点 创建、删除节点
大数据·后端·zookeeper
知了一笑6 分钟前
SpringBoot3集成多款主流大模型
spring boot·后端·openai
wmze7 分钟前
InnoDB存储引擎--索引与锁
后端
星辰大海的精灵11 分钟前
如何确保全球数据管道中的跨时区数据完整性和一致性
java·后端·架构
调试人生的显微镜12 分钟前
iOS App首次启动请求异常调试:一次冷启动链路抓包与初始化流程修复
后端
AI小智16 分钟前
Context Engineering:AI 工程的下一个前沿阵地?
后端
paopaokaka_luck16 分钟前
基于SpringBoot+Vue的酒类仓储管理系统
数据库·vue.js·spring boot·后端·小程序
梦兮林夕17 分钟前
02 gRPC 语法及类型介绍
后端·go·grpc
error_cn30 分钟前
unxz命令与版本控制集成
后端