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

前言: 

        工欲善其事,必先利其器. 工作流开发,在日常开发中很常见. 但如何从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))
          }

  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
flowable是一个开源的工作流引擎,可以用于流程管理、任务调度和业务流程自动化等领域。它提供了一个功能强大且灵活的平台,可以轻松创建、执行和监控工作流。 要进行flowable工作流开发,首先需要了解其基本概念和组件。flowable的核心组件包括流程引擎、流程定义、流程实例、任务和执行等。流程引擎是整个工作流系统的核心,负责驱动工作流的执行。流程定义是工作流的描述文件,定义了工作流的各个节点和连接关系。流程实例是流程定义的具体执行实例,可以根据不同的输入数据生成不同的实例。任务是工作流中需要执行的具体步骤,可以分配给不同的参与者进行处理。执行是工作流中的执行单元,用于执行具体的节点逻辑。 在进行flowable工作流开发时,可以按照以下步骤进行: 1. 引入flowable依赖:在项目中引入flowable的相关依赖,可以通过Maven或Gradle进行管理。 2. 定义流程:使用flowable提供的BPMN 2.0规范进行流程定义,描述流程节点和连接关系。 3. 配置流程引擎:根据具体需求配置流程引擎,包括数据库连接、事务管理和任务分配等。 4. 部署流程定义:将流程定义部署到流程引擎中,可以通过API或流程设计器进行部署。 5. 启动流程实例:根据流程定义启动流程实例,可以传入业务数据作为流程变量。 6. 执行任务:根据任务分配逻辑,将任务分配给相应参与者进行处理。 7. 监控流程:通过flowable提供的API或界面监控流程的执行情况,包括流程实例状态、任务状态和执行日志等。 总的来说,flowable工作流开发需要熟悉BPMN 2.0规范和flowable提供的API,理解工作流的基本概念和原理。同时,也需要根据具体需求进行适当的配置和定制,以满足业务的需要。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值