Flowable 是一款开源的简化业务流程的设计和执行的工作流框架。它提供了一套功能强大且灵活的工具,帮助开发人员实现工作流程的定义、执行和监控,从而提高组织的效率和灵活性。
Flowable 是一个用 Java 编写的轻量级业务流程引擎,允许部署 BPMN 2.0 流程定义(用于定义流程的行业 XML 标准)、创建这些流程定义的流程实例、查询、访问活动或历史流程实例及相关数据等等。
特性
- 可视化建模:Flowable 提供了一个直观易用的图形化建模工具,使开发人员能够以可视化的方式设计和定义业务流程。通过拖放和连接各种任务和决策节点,你可以轻松创建复杂的工作流程,并指定每个步骤的执行逻辑和条件。
- 强大的执行引擎:Flowable 的执行引擎是其核心组件之一,它负责实际执行定义好的业务流程。引擎支持并行和顺序执行,能够自动处理任务分配、决策路由、事件触发等操作。
- 灵活的扩展性:Flowable 的架构设计非常灵活,可以方便地扩展和集成到现有的系统中。我们可以通过自定义任务和事件监听器、添加自定义的表单和表达式等方式,根据特定的业务需求进行定制化开发。
- 实时监控和报告:Flowable 提供了丰富的监控和报告功能,使我们能够实时跟踪业务流程的执行情况和性能指标。我们可以查看流程实例的状态、任务的进度、执行时间等信息,并生成可视化的报表和图表进行分析和决策。
应用场景
Flowable 在许多领域都具有广泛的应用场景,特别是那些需要复杂业务流程管理的领域:
- 工作流自动化:Flowable 可用于自动化各种业务流程,如订单处理、审批流程、合同管理等。它可以减少人工干预和错误,提高流程的效率和一致性。
- 企业资源规划(ERP):Flowable 可以与 ERP 系统集成,帮助企业管理和优化复杂的供应链、采购和生产流程。
- 客户关系管理(CRM):Flowable 能够协调和跟踪销售流程、客户服务请求等 CRM 活动,提供更好的客户体验和管理。
- 跨部门协作:Flowable 可以帮助不同部门之间协调和协作,确保工作流程的顺畅和及时执行。
Flowable 架构
Flowable 采用了分层架构,将其功能划分为不同的模块和组件。下面是 Flowable 的架构概述:
- 核心引擎(Core Engine):核心引擎是 Flowable 的核心组件,负责解析、执行和管理工作流程。它包含了流程定义的解析器、执行引擎、事务管理器和持久化层。核心引擎处理工作流程的执行状态、任务分配和流程控制逻辑。
- 引擎抽象层(Engine Abstraction):引擎抽象层提供了对核心引擎的抽象和封装,以便于与其他组件进行交互。它定义了流程定义、流程实例、任务和执行等概念,并提供了相应的 API 和服务接口。
- 命令层(Command Layer):命令层是 Flowable 的上层接口,用于封装和执行各种操作命令。它提供了一组高级命令,用于启动流程实例、处理任务、查询流程状态等操作。命令层隐藏了底层引擎的复杂性,简化了与 Flowable 的交互。
- 服务层(Service Layer):服务层建立在命令层之上,提供了更高级别的服务接口。它封装了常见的业务场景和操作,例如流程部署、用户认证、任务管理和事件处理。服务层通过提供简化的 API,使开发人员能够更方便地使用 Flowable 进行工作流开发。
- 可视化和建模层(Visualization and Modeling Layer):Flowable 提供了可视化建模工具,用于设计和编辑 BPMN 2.0 流程定义。这个层次提供了一个图形界面,使用户能够直观地定义和编辑流程模型,而无需手动编写XML文件。
- 扩展模块(Extension Modules):Flowable 还提供了一系列的扩展模块,用于增强和扩展其功能。这些模块包括与外部系统的集成模块、表单引擎、规则引擎、REST API 等。用户可以根据需要选择并集成这些模块,以满足特定的业务需求。
Flowable 的架构设计具有模块化和可扩展的特点,允许用户根据具体需求选择所需的功能组件,并进行定制和扩展。这使得 Flowable 能够适应不同规模和复杂度的工作流程应用场景。
核心组件
Flowable 的核心组件是基于工作流引擎的一套模块化构架。以下是 Flowable 的核心组件:
- Engine(引擎):Flowable 引擎是 Flowable 的核心组件,负责解析、执行和管理工作流程。它提供了一组 API 和服务,用于启动和控制工作流实例,处理任务分配和执行,管理事件和条件,以及监控和报告工作流的状态和性能。
- Process Definition(流程定义):流程定义是 Flowable 工作流的基本元素,描述了工作流程的结构、步骤和关系。它是基于 BPMN 2.0 标准定义的,可以使用 Flowable 提供的可视化建模工具或手动编写 XML 文件进行定义。流程定义包括各种任务、网关、事件和条件等元素,以及它们之间的连线和流程控制逻辑。
- Process Instance(流程实例):流程实例是基于流程定义创建的实体,代表了具体的工作流程执行过程。每个流程实例都有独立的执行状态和数据上下文,根据定义的流程控制逻辑进行执行。引擎负责创建、启动、暂停、恢复和终止流程实例,并处理其生命周期中的各个阶段。
- Task(任务):任务是工作流中的工作单元,代表需要执行的具体工作或待办事项。每个任务都与特定的流程实例相关联,并分配给相应的参与者或角色。Flowable 引擎负责任务的分配、执行和跟踪,可以处理任务状态、指派、完成以及任务间的依赖关系。
- Event(事件):事件是 Flowable 中的重要组件,用于触发和处理工作流程中的动作和决策。事件可以是内部的,由工作流引擎触发,也可以是外部的,通过监听外部系统的事件进行触发。Flowable 提供了事件监听器和触发器,以便对事件进行响应和处理。
- Monitoring and Reporting(监控和报告):Flowable 提供了丰富的监控和报告功能,帮助用户实时跟踪工作流程的执行情况和性能指标。用户可以查看流程实例的状态、任务的进度、已完成的步骤等信息,并生成报告和图表进行分析和决策。
执行流程
- 流程定义:首先,需要定义工作流程的流程定义。这可以通过 Flowable 提供的可视化建模工具或手动编写 BPMN 2.0 的 XML 文件来完成。流程定义描述了工作流程的结构、步骤和控制逻辑。
- 流程部署:将定义好的流程定义部署到 Flowable 引擎中。这会将流程定义持久化到引擎的数据库中,并使其可供引擎使用。
- 流程实例化:当需要启动一个具体的工作流程实例时,可以通过 Flowable 引擎创建流程实例。创建流程实例时,引擎会根据流程定义的结构和初始条件实例化流程,并将其纳入执行状态。
- 任务执行:引擎会根据流程定义中的控制逻辑,将任务分配给相应的参与者或角色。任务的分配可以基于角色、组织结构或其他条件进行自动路由。被分配的任务将出现在参与者的待办事项列表中。
- 任务处理:参与者执行被分配的任务,并根据任务要求进行相应的操作。这可能涉及与其他系统的交互、填写表单、上传文件等。在任务执行过程中,可以通过 Flowable 引擎的 API 和服务与引擎进行交互,更新任务状态和数据。
- 任务完成:当任务的执行完成时,参与者将任务标记为完成。完成任务后,引擎会根据流程定义中的控制逻辑决定下一个要执行的任务。
- 分支和合并:在工作流程中,可能存在条件分支和并行执行的情况。Flowable 引擎能够根据流程定义中的条件和网关节点,自动选择适当的分支和合并执行。
- 事件触发:Flowable 引擎支持事件驱动的工作流程。它可以监听外部事件或内部信号,并根据触发的事件执行相应的操作。这使得工作流程能够与其他系统进行集成和交互。
- 监控和报告:Flowable 提供了监控和报告功能,以便用户实时跟踪工作流程的执行情况和性能指标。用户可以查看流程实例的状态、任务的进展、已完成的步骤等信息,并生成报告和图表进行分析和决策。
服务
Flowable 提供了一系列的服务来支持工作流程的管理和执行。以下是 Flowable 提供的一些主要服务:
- 流程引擎服务(Process Engine Service):Flowable 提供了流程引擎服务,用于创建和管理流程引擎实例。流程引擎是 Flowable 的核心组件,负责解析、执行和管理工作流程。
- 流程定义服务(Process Definition Service):该服务提供了操作流程定义的功能,包括流程定义的部署、查询、暂停和激活等。通过该服务,可以管理流程定义的生命周期。
- 流程实例服务(Process Instance Service):流程实例服务允许创建、查询和管理流程实例。通过该服务,可以启动新的流程实例,查询已经运行的实例,并对实例进行暂停、激活和终止等操作。
- 任务服务(Task Service):任务服务提供了与任务相关的功能。通过该服务,可以查询和管理任务,包括任务的创建、分配、完成、委派和转办等操作。
- 历史数据服务(Historic Data Service):Flowable 还提供了历史数据服务,用于查询和分析已完成的流程实例和任务的历史数据。通过该服务,可以获取流程实例的执行轨迹、任务的处理时间和执行者等信息。
- 表单服务(Form Service):Flowable 提供了表单服务,用于创建和管理与任务相关的表单。该服务允许定义表单字段、表单验证规则,并与任务的处理过程进行交互。
- 身份认证和授权服务(Identity and Authorization Service):Flowable 提供了身份认证和授权服务,用于管理用户、角色和权限。通过该服务,可以定义和管理用户的访问权限,以及角色和用户之间的关联关系。
- 定时任务服务(Timer Job Service):Flowable 支持定时任务的执行和管理。通过该服务,可以创建和管理定时任务,定义任务的触发条件和执行逻辑。
- 事件监听服务(Event Listener Service):Flowable 提供了事件监听服务,用于监听和处理与流程相关的事件。通过该服务,可以注册事件监听器,对流程引擎的事件进行处理和响应。
这些服务为开发人员提供了丰富的功能和 API,用于构建、管理和扩展工作流程应用。通过使用这些服务,可以实现工作流程的灵活控制、任务分配和监控等功能。
表结构
Flowable 使用关系型数据库存储其流程定义、流程实例、任务和历史数据等信息。Flowable 的表结构由一系列的数据库表组成,它们都以 ACT_ 开头,第二部分标识表的用途。以下是 Flowable 的常见表及其简要描述:
- ACT_GE_:GE 代表 General(全局),全局数据。
- ACT_RE_:RE 表示 Repository。带有这个前缀的表包含“静态”信息,例如流程定义与流程资源(图片)。
- ACT_RU_:RU 表示 Runtime。这些表存储运行时信息,例如流程实例(process instance)、用户任务(user task)、变量(variable)、作业(job)等。Flowable 只在流程实例运行中保存运行时数据,并在流程实例结束时删除记录。这样保证运行时表小和快。
- ACT_HI_:HI 表示 History。这些表存储历史数据,例如已完成的流程实例、变量、任务等。
- ACT_ID_:ID 表示 Identity。这些表存储用户相关信息。
类型 | 表名 | 说明 |
---|---|---|
General | ACT_GE_BYTEARRAY | 存储流程定义的字节码数据,包括 BPMN 文件和其他相关资源。 |
ACT_GE_PROPERTY | 存储全局属性,用于存储引擎的配置和运行时状态。 | |
Repository | ACT_RE_DEPLOYMENT | 存储流程定义的部署信息,每次部署都会生成一条记录。 |
ACT_RE_PROCDEF | 存储流程定义的元数据信息,包括流程定义的ID、名称、版本等。 | |
ACT_RE_MODEL | 存储流程模板相关描述信息。 | |
Runtime | ACT_RU_TASK | 存储任务的运行时数据,包括任务的ID、负责人、创建时间等。 |
ACT_RU_EXECUTION | 存储流程实例的运行时数据,包括当前活动节点、流程变量等。 | |
ACT_RU_IDENTITYLINK | 存储运行时流程人员信息,常用于查询人员或部门的待办任务。 | |
ACT_RU_JOB | 存储作业(Job)的数据,用于异步执行定时任务等。 | |
ACT_RU_VARIABLE | 存储流程实例和任务的变量数据。 | |
ACT_RU_EVENT_SUBSCR | 监听信息表。 | |
History | ACT_HI_ACTINST | 存储已完成的流程活动(节点)的历史数据,包括活动的类型、开始时间、结束时间等。 |
ACT_HI_PROCINST | 存储已完成的流程实例的历史数据,包括流程实例的开始时间、结束时间等。 | |
ACT_HI_TASKINST | 存储已完成的任务的历史数据,包括任务的完成时间、处理人等。 | |
ACT_HI_VARINST | 存储已完成的变量的历史数据。 | |
ACT_HI_DETAIL | 存储已完成的流程实例和任务的详细变量数据。 | |
ACT_HI_COMMENT | 存储已完成的审批意见的历史数据。 | |
ACT_HI_ATTACHMENT | 存储已完成的历史附件。 | |
ACT_HI_IDENTITYLINK | 存储已完成的参与者历史数据,包括各节点候选、办理人员信息,常用于查询某人或部门的已办任务。 | |
Identity | ACT_ID_GROUP | 存储用户组信息,包括用户组的ID、名称等。 |
ACT_ID_INFO | 存储用户扩展信息。 | |
ACT_ID_MEMBERSHIP | 存储用户与用户组之间的关联关系。 | |
ACT_ID_USER | 存储用户信息,包括用户的ID、用户名、密码等。 |
总结
Flowable 是一款功能强大且灵活的开源工作流框架,通过可视化建模、强大的执行引擎和灵活的扩展性,帮助企业简化和优化业务流程的设计和执行。它的实时监控和报告功能使你能够实时了解流程的状态和性能,进一步提高业务决策的准确性和效率。
项目实战
基于 Spring Boot 2.7.12、MyBatis-Plus、Spring Security、Flowable 等主流技术栈构建的后台管理系统:
Gitee | GitHub | |
---|---|---|
后端 | https://gitee.com/linjiabin100/pi-admin.git | https://github.com/zengpi/pi-admin.git |
前端 | https://gitee.com/linjiabin100/pi-admin-web.git | https://github.com/zengpi/pi-admin-web.git |