一、简介
Flowable是一个开源的业务流程管理工具,它集成了多个业务流程相关的组件,如工作流引擎、表单处理等。Flowable提供了一套流程定义、部署和执行的能力,可以强大地支持复杂的流程及其模型的管理和运行。Flowable提供了简单、轻量级的API通过Java代码管理流程,还提供了REST API以及Web服务。 Flowable 的文档分为多个部分:
用户指南,对如何使用Flowable进行介绍。 开发人员指南,对如何为Flowable贡献代码进行介绍。 流程引擎 API,介绍流程引擎 API的概念与使用。 DMN引擎 API,介绍 DMN 引擎 API 的概念与使用。 表单引擎 API,介绍表单引擎 API 的概念与使用。 已知问题,会列出已知的一些问题和解决方案。对于第一次使用Flowable的开发人员,可以从用户指南中了解 Flowable 的基础概念和使用方法,随后在查阅引擎 API 等文档来深入处理。
二、工作流引擎
Flowable 的工作流引擎是Flowable的核心部分,提供了以下一些核心功能:
流程定义:描述业务流程以及流程中的活动(用户任务、服务任务、网关、边界事件等)。 流程部署:将流程定义模板部署到引擎中以便后续的流程实例化。 流程实例:一次业务流程的运行,包含执行过的任务实例信息和执行顺序等相关信息。 任务:引擎中的一个任务实例,一个任务实例包含相关的信息诸如名称、描述、截止时间等信息。 执行:引擎中执行流程的最小单元,一个执行实例包含相关的信息诸如父子级别、是否被中断等信息,并可以包含一个或多个任务或子执行实例。以下是一个基本的工作流定义的代码示例:
public static BpmnModel createProcessModel() {
BpmnModel model = new BpmnModel();
Process process = new Process();
model.addProcess(process);
process.setId("vacationRequest");
process.addFlowElement(createStartEvent());
process.addFlowElement(createUserTask("userTask1", "Approve or reject request", "assignee == null"));
process.addFlowElement(createExclusiveGateway("ExclusiveGateway1"));
process.addFlowElement(createUserTask("userTask2", "Provide additional details", "assignee == null"));
process.addFlowElement(createEndEvent());
process.addFlowElement(createSequenceFlow("start", "userTask1"));
process.addFlowElement(createSequenceFlow("userTask1", "ExclusiveGateway1"));
process.addFlowElement(createSequenceFlow("ExclusiveGateway1", "userTask2", "${approved == 'false'}"));
process.addFlowElement(createSequenceFlow("ExclusiveGateway1", "end", "${approved == 'true'}"));
process.addFlowElement(createSequenceFlow("userTask2", "ExclusiveGateway1"));
return model;
三、表单引擎
Flowable的表单引擎提供了创建表单和调用表单服务的能力,支持多种表单类型(例如JavaScriptAPI和Freemarker模板)。表单可以嵌入到流程中,以便流程中的用户可以通过填写表单等方式来参与流程。
以下是一个基本的表单创建定义的代码示例:
四、Java API
Flowable Java API提供了开箱即用的工作流实现,包括业务流程以及每个正在运行的业务案例中的其他信息。在引擎实例上使用 Java API 可以查询流程定义,创建和启动新的流程实例等。
以下是一个使用Java API查询并启动流程的代码示例:
// 创建引擎实例
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 获取流程存储服务实例
RepositoryService repositoryService = processEngine.getRepositoryService();
// 获取运行时服务实例
RuntimeService runtimeService = processEngine.getRuntimeService();
// 部署流程定义
Deployment deployment = repositoryService.createDeployment().addClasspathResource("diagrams/test.bpmn20.xml").deploy();
// 查询流程定义
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.deploymentId(deployment.getId()).singleResult();
// 开始流程实例
ProcessInstance pi = runtimeService.startProcessInstanceById(processDefinition.getId());
五、结语
Flowable的中文文档提供了一个全面的工作流引擎解决方案的实现,其中包括核心功能模块、表单处理、Java API等。Flowable还提供了一个轻量的API,以及java和REST服务的访问,方便用户集成到现存的应用程序中。本文所涵盖的主题不超过了Flowable文档的主题范围,但我们相信,文档已经向您提供了一个良好的起点,以便解决您遇到的任何问题并开始使用Flowable。