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 快速开发平台
相关推荐
Estar.Lee2 分钟前
查手机号归属地免费API接口教程
android·网络·后端·网络协议·tcp/ip·oneapi
2401_857610032 小时前
SpringBoot社团管理:安全与维护
spring boot·后端·安全
凌冰_2 小时前
IDEA2023 SpringBoot整合MyBatis(三)
spring boot·后端·mybatis
码农飞飞2 小时前
深入理解Rust的模式匹配
开发语言·后端·rust·模式匹配·解构·结构体和枚举
一个小坑货2 小时前
Rust 的简介
开发语言·后端·rust
monkey_meng3 小时前
【遵守孤儿规则的External trait pattern】
开发语言·后端·rust
Estar.Lee3 小时前
时间操作[计算时间差]免费API接口教程
android·网络·后端·网络协议·tcp/ip
新知图书4 小时前
Rust编程与项目实战-模块std::thread(之一)
开发语言·后端·rust
盛夏绽放4 小时前
Node.js 和 Socket.IO 实现实时通信
前端·后端·websocket·node.js
Ares-Wang4 小时前
Asp.net Core Hosted Service(托管服务) Timer (定时任务)
后端·asp.net