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 小时前
roLabelImg 详细安装教程
开发语言·人工智能·后端·云原生
陈随易4 小时前
moon,apt和yum之外linux系统命令安装新选择
前端·后端·程序员
码事漫谈5 小时前
当单库日增 4.5TB,异构实时同步还能稳得住吗?
后端
IT_陈寒7 小时前
SpringBoot自动配置的坑,这次真踩疼我了
前端·人工智能·后端
shengjk17 小时前
AI Engineering 五代演进史:Prompt、RAG、Agent 到 Graph 的架构革命
后端
子兮曰8 小时前
AI 浏览器 Agent 的安全困局:当自动化工具可以偷走你的登录态
前端·人工智能·后端
妙码生花8 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(四十八):菜单规则管理实现
前端·后端·ai编程
XuCoder8 小时前
Redis 持久化:RDB 与 AOF
后端
Conan在掘金8 小时前
鸿蒙 7.0 智能体框架 2.0:意图即服务根因——从 InsightIntentExecutor 到 HMAF 2.0 Skill 演进
后端
掘金者阿豪8 小时前
折腾电科金仓 Docker 部署的一晚上:角色登录失败、远程连接失败,这几个坑终于踩完了
后端