Flowable 中文文档

Flowable 中文文档

  • 指南
  • Java文档
  • 博客
  • Flowable UI
  • 加入交流群
  • 英文文档

›BPMN 用户指南

Flowable 开源

  • 开源详情

BPMN 用户指南

  • 入门指南
  • 配置
  • Flowable API
  • Spring 集成
  • Spring Boot
  • 部署
  • BPMN 2.0 简介
  • BPMN 2.0 构件
  • 流程实例迁移
  • JPA
  • 历史
  • 身份管理
  • REST API
  • LDAP 集成
  • 工具

CMMN 用户指南

  • 配置
  • Flowable CMMN API
  • Spring 集成
  • 部署
  • CMMN 1.1
  • 架构
  • REST API

事件注册表用户指南

  • 配置
  • Flowable 事件注册表 API
  • Spring 集成
  • 部署
  • 事件注册表介绍
  • REST API

DMN 用户指南

  • 配置
  • Flowable DMN API
  • Spring 集成
  • 部署
  • DMN 1.1 介绍
  • REST API

应用指南

  • Flowable应用程序
  • Flowable 设计器

免责声明

  • 免责声明

部署

业务文档包

要部署流程,需要将它们打包到业务文档包(BAR)中。业务文档包是部署到 Flowable 引擎的单位。业务文档包相当于一个 ZIP 文件。它可以包含 BPMN 2.0 流程、表单定义、DMN 规则和任何其他类型的文件。通常,业务文档包包含一组命名资源。

当部署业务文档包时,会扫描带有 .bpmn20.xml 或 .bpmn 扩展名的 BPMN 文件。每个文件都会被处理,可能包含多个流程定义。 当 DMN 引擎激活时,也会解析 .dmn 文件,当表单引擎激活时,会处理 .form 文件。

注意

业务文档包中的 Java 类不会被添加到类路径中。业务文档包中流程定义使用的所有自定义类(例如,Java service tasks 或事件监听器实现)必须在 Flowable 引擎的类路径上可用,以便运行这些流程。

以编程方式部署

从 ZIP 文件部署业务文档包可以这样做:

String barFileName = "path/to/process-one.bar";
ZipInputStream inputStream = new ZipInputStream(new FileInputStream(barFileName));

repositoryService.createDeployment()
    .name("process-one.bar")
    .addZipInputStream(inputStream)
    .deploy();

也可以从单个资源构建部署。更多详细信息请参见 javadocs。

外部资源

流程定义存储在 Flowable 数据库中。这些流程定义在使用 Service Tasks 或执行监听器或 Flowable 配置文件中的 Spring beans 时可以引用委托类。这些类和 Spring 配置文件必须对可能执行流程定义的所有流程引擎可用。

Java 类

在启动流程实例时,流程中使用的所有自定义类(例如,在 Service Tasks 中使用的 JavaDelegates 或事件监听器、TaskListeners 等)都应该在引擎的类路径上。

但是,在部署业务文档包时,这些类不必存在于类路径中。这意味着在使用 Ant 部署新的业务文档包时,您的委托类不必在类路径上。

当您使用演示设置并想要添加自定义类时,您应该将包含类的 JAR 添加到 flowable-task 或 flowable-rest webapp lib 中。不要忘记也包含自定义类的依赖项(如果有的话)。或者,您可以将依赖项包含在 Tomcat 安装的库目录中,${tomcat.home}/lib。

在流程中使用 Spring beans

当表达式或脚本使用 Spring beans 时,在执行流程定义时,这些 beans 必须对引擎可用。如果您正在构建自己的 webapp 并按照spring 集成部分中所述在上下文中配置流程引擎,这很简单。但请记住,如果使用它,您还应该使用该上下文更新 Flowable task 和 rest webapps。

创建单个应用程序

与其确保所有流程引擎在其类路径上都有所有委托类并使用正确的 Spring 配置,不如考虑将 Flowable REST webapp 包含在您自己的 webapp 中,这样就只有一个 ProcessEngine。

流程定义的版本控制

BPMN 没有版本控制的概念。这实际上是好事,因为可执行的 BPMN 流程文件可能作为开发项目的一部分存在于版本控制系统存储库(如 Subversion、Git 或 Mercurial)中。但是,流程定义的版本是在部署过程中在引擎中创建的。在部署期间,Flowable 会在将 ProcessDefinition 存储到 Flowable DB 之前为其分配一个版本。

对于业务文档包中的每个流程定义,执行以下步骤来初始化属性 key、version、name 和 id:

  • XML 文件中的流程定义 id 属性用作流程定义 key 属性。

  • XML 文件中的流程定义 name 属性用作流程定义 name 属性。如果未指定 name 属性,则使用 id 属性作为名称。

  • 首次部署具有特定 key 的流程时,会分配版本 1。对于具有相同 key 的流程定义的所有后续部署,版本将设置为比当前部署的最高版本高 1。key 属性用于区分流程定义。

  • id 属性设置为 {processDefinitionKey}:{processDefinitionVersion}:{generated-id},其中 generated-id 是添加的唯一数字,以确保在集群环境中流程定义缓存的流程 ID 的唯一性。

例如,以下流程

<definitions id="myDefinitions" >
  <process id="myProcess" name="My important process" >
    ...

当部署此流程定义时,数据库中的流程定义将如下所示:

id key name version

myProcess:1:676

myProcess

My important process

1

假设我们现在部署同一流程的更新版本(例如,更改一些用户任务),但流程定义的 id 保持不变。流程定义表现在将包含以下条目:

id key name version

myProcess:1:676

myProcess

My important process

1

myProcess:2:870

myProcess

My important process

2

当调用 runtimeService.startProcessInstanceByKey("myProcess") 时,它将使用版本 2 的流程定义,因为这是流程定义的最新版本。

如果我们创建第二个流程,如下所示并将其部署到 Flowable,表中将添加第三行。

<definitions id="myNewDefinitions" >
  <process id="myNewProcess" name="My important process" >
    ...

表格将如下所示:

id key name version

myProcess:1:676

myProcess

My important process

1

myProcess:2:870

myProcess

My important process

2

myNewProcess:1:1033

myNewProcess

My important process

1

注意新流程的 key 与我们的第一个流程不同。尽管名称相同(我们可能也应该更改它),但 Flowable 在区分流程时只考虑 id 属性。因此,新流程部署时版本为 1。

提供流程图

可以将流程图图像添加到部署中。该图像将存储在 Flowable 存储库中,并可通过 API 访问。该图像也用于在 Flowable 应用程序中可视化流程。

假设我们在类路径上有一个流程 org/flowable/expenseProcess.bpmn20.xml,其流程 key 为'expense'。流程图图像适用以下命名约定(按此特定顺序):

  • 如果部署中存在图像资源,其名称为 BPMN 2.0 XML 文件名与流程 key 和图像后缀连接,则使用该图像。在我们的示例中,这将是 org/flowable/expenseProcess.expense.png(或 .jpg/gif)。如果在一个 BPMN 2.0 XML 文件中定义了多个图像,这种方法最有意义。然后每个图表图像的文件名中都会包含流程 key。

  • 如果不存在这样的图像,则搜索部署中与 BPMN 2.0 XML 文件名匹配的图像资源。在我们的示例中,这将是 org/flowable/expenseProcess.png。请注意,这意味着在同一个 BPMN 2.0 文件中定义的每个流程定义都具有相同的流程图图像。如果每个 BPMN 2.0 XML 文件中只有一个流程定义,这显然不是问题。

以编程方式部署的示例:

repositoryService.createDeployment()
  .name("expense-process.bar")
  .addClasspathResource("org/flowable/expenseProcess.bpmn20.xml")
  .addClasspathResource("org/flowable/expenseProcess.png")
  .deploy();

之后可以通过 API 检索图像资源:

ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
  .processDefinitionKey("expense")
  .singleResult();

String diagramResourceName = processDefinition.getDiagramResourceName();
InputStream imageStream = repositoryService.getResourceAsStream(
    processDefinition.getDeploymentId(), diagramResourceName);

生成流程图

如果在部署中没有提供图像,如上一节所述,如果流程定义包含必要的'diagram interchange'信息,Flowable 引擎将生成流程图图像。

可以以与在部署中提供图像完全相同的方式检索资源。

deployment.image.generation

如果由于某种原因不需要或不希望在部署期间生成图表,可以在流程引擎配置上设置 isCreateDiagramOnDeploy 属性:

<property name="createDiagramOnDeploy" value="false" />

现在将不会生成图表。

类别

部署和流程定义都有用户定义的类别。流程定义类别使用 BPMN XML 中的 targetNamespace 属性的值进行初始化: <definitions ... targetNamespace="yourCategory" ...

部署类别也可以在 API 中这样指定:

repositoryService
    .createDeployment()
    .category("yourCategory")
    ...
    .deploy();
← Spring BootBPMN 2.0 简介 →
  • 业务文档包
    • 以编程方式部署
  • 外部资源
    • Java 类
    • 在流程中使用 Spring beans
    • 创建单个应用程序
  • 流程定义的版本控制
  • 提供流程图
  • 生成流程图
  • 类别
Flowable 中文文档
文档
指南Java文档
法律
免责声明政策开源协议
联系方式
邮箱: [email protected]
版权 © 2025 Flowable AG. 中文文档基于 Apache License 2.0 协议翻译