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 快速开发平台
相关推荐
苏三说技术1 小时前
Claude Code从失控到起飞,只用了这些技巧
后端
长栎2 小时前
写 for 循环写了十年,你却从没用过迭代器模式最狠的那一面
后端
LiaCode2 小时前
Redis 在生产项目的使用
前端·后端
用户559822481222 小时前
Docker Compose Down 导致容器数据误删——ext4 日志恢复全记录
后端
LiaCode2 小时前
一天学完 redis 的爽翻版核心知识总结
前端·后端
大刚测试开发实战2 小时前
如何内网穿透访问本地私有化部署的TestHub
前端·后端·github
xiaodaoluanzha3 小时前
迄今為止,最簡單的編程語言 Nolang
前端·后端
Csvn3 小时前
Docker 容器管理入门 — 从镜像到容器编排
后端
用户762352425913 小时前
ShardingJDBC
后端
行者全栈架构师3 小时前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端