一篇文章教你看懂flowable工作流开发

本文介绍了如何在SpringBoot项目中集成Flowable库,包括添加依赖、配置文件设置、核心API组件如RepositoryService、RuntimeService等的使用方法,以及前端Vue如何与Flowable集成,展示了流程部署、启动、暂停、查询和用户管理的关键操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言: 

        工欲善其事,必先利其器. 工作流开发,在日常开发中很常见. 但如何从0-1开发一个工作流对于开发人员来说是很关键的.

项目地址: https://github.com/buhaizhuang123/cloud/tree/sl1/flowable-sping


话不多说,进入正题

  • 引入jar包
<dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-spring-boot-starter</artifactId>
            <version>6.3.0</version>
</dependency>
  • application.yml 文件添加配置信息
flowable:
#  是否主动更新创建flowable关联表
  database-schema-update: true
  idm:
    enabled: true
  async-executor-activate: false
  • 核心api组件介绍
    • RepositoryService 负责deploy部署 ACT_RE_DEPLOYMENT 存储部署信息
    • RuntimeService 工作流启动 ACT_RU_EXECUTION 存储流程实例
    • TaskService 流程节点管理 流程发起成功默认上传第一节点 ACT_RU_TASK(存储任务节点信息)
    • HistoryService 历史记录信息 获取操作对应删除操作 ACT_HI_* 历史信息
    • IdentityService 负责用户信息,组信息维护 ACT_ID_* 用户信息 用户组信息
  • 核心 api (repositoryService)
    • 创建流程部署 repositoryService.createDeployment
    • 部署流程 Deployment : repositoryService.deploy
      • 步骤同上,添加工作流文件信息后,调用deploy 就会生成流程(类似于请假审批,财务审批这种,具体的流程类型,当前还没有发起审批流程)
    • 删除部署 repositoryService.deleteDeployment
      • repositoryService.deleteDeployment(deployId);// 删除流程 无需多言
    • 暂停部署 suspendProcessDefinitionById
      • repositoryService.suspendProcessDefinitionById(id); // 中断流程,后续工作流无法重新发起
    • 唤醒部署 activateProcessDefinitionById
      • repositoryService.activateProcessDefinitionById(id); // 唤醒操作,与中断对应
    • 查询部署 createDeploymentQuery、
      ListIterator<Deployment> list = repositoryService.createDeploymentQuery().orderByDeploymenTime().desc().listPage(pageNum, pageSize).listIterator(); // 查询部署信息,可添加一系列查询条件

  • 核心 api (RuntimeService)
    • 启动流程 runtimeService.createProcessInstanceBuilder .start()
      •         HashMap<String, Object> param = new HashMap<>();
                param.put("variable", param01);
                ProcessInstance start = runtimeService.createProcessInstanceBuilder()
                        .processDefinitionId(deployId)
                        .variables(param)
                        // 节点执行人
                        .tenantId("bhz")
                        .name("启动了")
                        .start();
    • 暂停流程 suspendProcessInstanceById()
      •         runtimeService.suspendProcessInstanceById(processId);
    • 唤醒流程 activateProcessInstanceById
      •         runtimeService.activateProcessInstanceById(processId);
        
    • 流程查询 createExecutionQuery
      • // 查询条件众多 不一一举例 
        Execution execution = runtimeService.createExecutionQuery().executionId(processId).singleResult();
        
    • 删除流程 deleteProcessInstance
      • runtimeService.deleteProcessInstance(processId, userId);
    • 获取流程参数 getVariables
      • Map<String, Object> variables = runtimeService.getVariables(task.getProcessInstanceId());
        
    • 流程信息查询 createProcessInstanceQuery
      • // 同理,查询条件不一一列举. api大多见名知意
        List<ProcessInstance> list = runtimeService.createProcessInstanceQuery()
        

  • 核心api (TaskService)
    • 领单 claim(taskId)
      • taskService.claim(taskId, userId); // 领单,当前流程指定执行人(可以直接在部署内容中,指定. 默认分发给部署文件中指定的操作人)
        
    • 添加节点参数 setVariable(taskId,key,value)
      • taskService.setVariable(taskId, "param", "ssxxx");
        
    • 获取节点参数 getVariable
      • Object param = runtimeService.getVariable(processId, "param");
        
    • 任务提交
      • taskService.complete(taskId); // 流程流转到下一节点
    • 节点信息查询 createTaskQuery
      • // 同理.查询节点见名知意. 
        Task task = taskService.createTaskQuery().taskCandidateOrAssigned(username).singleResult();
        

  • 核心api ( HistoryService ) 历史信息
    • 节点历史信息 createHistoricTaskInstanceQuery
      • historyService.createHistoricTaskInstanceQuery();
        
    • 流程历史信息 createHistoricProcessInstanceQuery
      • HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processId).singleResult();
        

  •  核心api (IdentityService) 用户管理
    • 新建组 newGroup saveGroup
      • Group group = identityService.newGroup(identityGroupFormReq.getGroupId());
        group.setId(identityGroupFormReq.getGroupId());
        group.setName(identityGroupFormReq.getGroupName());
        group.setType(identityGroupFormReq.getGroupType());
        // 保存
        identityService.saveGroup(group);
    • 新建用户 newUser saveUser
      • User user = identityService.newUser(identityAddUserReq.getUserId());
        user.setId(identityAddUserReq.getUserId());
        user.setFirstName(identityAddUserReq.getUserName());
        user.setPassword(identityAddUserReq.getPassword());
        identityService.saveUser(user);
    • 关联用户和组 createMembership
      • identityService.createMembership(user.getId(), identityAddUserReq.getGroupId());
        
    • 查询组信息 createGroupQuery
      • GroupQuery groupQuery = identityService.createGroupQuery().orderByGroupId();
        
    • 查询用户信息 createUserQuery
      • UserQuery userQuery = identityService.createUserQuery();
        

  • 前端 vue整合flowable
    • npm install  workflow-bpmn-modeler
    • <bpmnModeler @save="save" :groups="groups">
    • 方法
    • save(data) {
            this.$axios.post('flowable/deploy/upload', data)
                .then(res => {
                  console.log(res)
                }).catch(err => console.log(err))
            console.log(data)
          },
          doLoadGroup(){
            this.$axios.post('doc/dept/listDistinctDept', null).then(res => this.groups = res.data).catch(err => console.log(err))
          }

### Flowable 工作流组件详解 #### 1. 流程定义 (Process Definition) 流程定义描述了一个业务过程的结构和行为。通过 BPMN 2.0 XML 文件来表示,这些文件包含了图形化模型以及执行逻辑。当部署一个新的流程定义到 Flowable 引擎时,会创建相应的数据库记录并分配唯一的版本号[^1]。 ```xml <process id="my-process" name="My Process"> <!-- 定义活动节点 --> </process> ``` #### 2. 部署管理器 (Deployment Manager) 负责处理流程资源的上传、解析及存储操作。每次成功完成部署后都会自动生成一个带有时间戳的新条目存入 `ACT_RE_DEPLOYMENT` 表中,并将关联的所有资源保存至文件系统或其他持久层位置。 #### 3. 运行实例 (Runtime Instance) 每当启动某个已发布的流程模板时就会生成对应的运行实例对象,在整个生命周期内跟踪其状态变化直至结束或取消为止。所有正在执行中的实例信息会被缓存在内存里同时也写回到 `ACT_RU_EXECUTION` 和其他相关联的数据表里面以便查询检索之用。 #### 4. 用户任务 (User Task) 代表由人工参与者承担的工作项,通常涉及填写表格、审批请求等交互动作。每个用户任务都对应着特定的角色权限设定,只有被授权的人才能领取并完成它;完成后则触发后续环节继续流转下去。 ```java Task task = taskService.createTaskQuery() .taskAssignee("john") .singleResult(); if(task != null){ taskService.complete(task.getId()); } ``` #### 5. 事件监听器 (Event Listener) 允许开发者针对不同类型的事件注册回调函数,从而实现更加灵活多变的行为定制能力。比如可以在某一流程节点到达之前发送通知邮件给相关人员知晓进展状况等等。 #### 6. 扩展组件支持 除了上述核心模块外,Flowable 还提供了一系列可选插件用于增强平台的功能特性,例如定时调度服务、历史数据审计追踪机制等。更重要的是,该框架本身具备良好的开放性和兼容性特点,便于第三方厂商基于此构建专属解决方案满足特殊需求场景下的应用开发要求[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值