【工作流引擎】Flowable快速入门(一) 基础API使用

本Demo在搭建好环境的基础上,可参考【工作流引擎】Flowable Spring Boot集成

一、获取ProcessEngine

1.1 原生构建

在不使用Spring 注入的情况下,可直接通过ProcessEngineConfiguration 配置构建ProcessEngine

//1、创建ProcessEngineConfiguration实例,该实例可以配置与调整流程引擎的设置
ProcessEngineConfiguration cfg=new StandaloneProcessEngineConfiguration()
        //2、通常采用xml配置文件创建ProcessEngineConfiguration,这里直接采用代码的方式
        //3、配置数据库相关参数
        .setJdbcUrl("jdbc:mysql://localhost:3306/flowable_demo?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2b8&nullCatalogMeansCurrent=true")
        .setJdbcUsername("root")
        .setJdbcPassword("root")
        .setJdbcDriver("com.mysql.jdbc.Driver")
        // 初始化基础表,不需要的可以改为 DB_SCHEMA_UPDATE_FALSE
        .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
//4、初始化ProcessEngine流程引擎实例
ProcessEngine processEngine=cfg.buildProcessEngine();

1.2 ProcessEngine API

public interface ProcessEngine extends Engine {
   

    /** the version of the flowable library */
    String VERSION = FlowableVersions.CURRENT_VERSION;

    /**
     * Starts the execuctors (async and async history), if they are configured to be auto-activated.
     */
    void startExecutors();

    RepositoryService getRepositoryService();

    RuntimeService getRuntimeService();

    FormService getFormService();

    TaskService getTaskService();

    HistoryService getHistoryService();

    IdentityService getIdentityService();

    ManagementService getManagementService();

    DynamicBpmnService getDynamicBpmnService();

    ProcessMigrationService getProcessMigrationService();

    ProcessEngineConfiguration getProcessEngineConfiguration();
}

1.3 服务说明

RepositoryService 流程存储服务

管理流程定义文件xml及静态资源的服务

对特定流程的暂停和激活

流程定义启动权限管理

类内部重要的成员有:

deploymentBuilder 部署文件构造器

deploymentQuery 部署文件查询器

ProcessDefinitionQuery 流程定义文件查询对象

Deployment 流程部署文件对象

ProcessDefinition 流程定义文件对象

BpmnModel 流程定义的java格式

RuntimeService 流程运行控制服务

启动流程及对流程数据的控制

流程实例(ProcessInstance)与执行流(Execution)的查询

触发流程操作,接收消息和信号

RuntimeService启动流程及变量管理

启动流程的常用方法(id,key,message)

启动流程可选参数(businessKey,variables,tenantId)

变量(variables)的设置和获取

TaskService

对用户任务UserTask的管理和流程的控制

设置用户任务的权限信息(设置候选人等)

针对用户任务添加任务附件,任务评论和事件记录

TaskService对Task的管理和控制

Task对象的创建和删除

查询Task,驱动Task节点完成执行

Task相关参数变量variable设置

1.4 Spring 依赖注入

通过ProcessEngine 获取RepositoryService 对象

@Autowired
 private ProcessEngine processEngine;

 @Test
 public void testProcessEngine(){
   
     RepositoryService repository = processEngine.getRepositoryService();
     System.out.println(repository.toString());
 }

在Spring 中可以直接将ProcessEngine可以获取的服务对象直接注入,例如:RepositoryService 注入

@Autowired
private RepositoryService repositoryService;

二、流程部署

2.1 部署流程定义

BPMN2.0介绍

我们要构建的流程是一个非常简单的请假流程。Flowable引擎需要流程定义为BPMN 2.0格式,这是一个业界广泛接受的XML标准。 在Flowable术语中,我们将其称为一个流程定义(process definition)。一个流程定义可以启动多个流程实例(process instance)。流程定义可以看做是重复执行流程的蓝图。 在这个例子中,流程定义定义了请假的各个步骤,而一个流程实例对应某个雇员提出的一个请假申请。

BPMN 2.0存储为XML,并包含可视化的部分:使用标准方式定义了每个步骤类型(人工任务,自动服务调用,等等)如何呈现,以及如何互相连接。这样BPMN 2.0标准使技术人员与业务人员能用双方都能理解的方式交流业务流程。

在这里插入图片描述

这个流程应该已经十分自我解释了。但为了明确起见,说明一下几个要点:

  • 我们假定启动流程需要提供一些信息,例如雇员名字、请假时长以及说明。当然,这些可以单独建模为流程中的第一步。 但是如果将它们作为流程的“输入信息”,就能保证只有在实际请求时才会建立一个流程实例。否则(将提交作为流程的第一步),用户可能在提交之前改变主意并取消,但流程实例已经创建了。 在某些场景中,就可能影响重要的指标(例如启动了多少申请,但还未完成),取决于业务目标。

  • 左侧的圆圈叫做启动事件(start event)。这是一个流程实例的起点。

  • 第一个矩形是一个用户任务(user task)。这是流程中人类用户操作的步骤。在这个例子中,经理需要批准或驳回申请。

  • 取决于经理的决定,排他网关(exclusive gateway) (带叉的菱形)会将流程实例路由至批准或驳回路径。

  • 如果批准,则需要将申请注册至某个外部系统,并跟着另一个用户任务,将经理的决定通知给申请人。当然也可以改为发送邮件。

  • 如果驳回,则为雇员发送一封邮件通知他。

一般来说,这样的流程定义使用可视化建模工具建立,如Flowable Designer(Eclipse)或Flowable Web Modeler(Web应用)。

此部分介绍来自: Flowable BPMN 用户手册

2.2 流程部署

2.2.1 xml文件和String 部署

holiday-request.bpmn20.xml (存放在项目资源目录下)

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
  xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"
  xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
  xmlns:flowable="http://flowable.org/bpmn"
  typeLanguage="http://www.w3.org/2001/XMLSchema"
  expressionLanguage="http://www.w3.org/1999/XPath"
  targetNamespace="http://www.flowable.org/processdef">

  <process id="oa_leave_1" name="OA 请假1" isExecutable="true">

    <startEvent id="startEvent"/>
    <sequenceFlow sourceRef="startEvent" targetRef="approveTask"/>

    <userTask id="approveTask" name="Approve or reject request"/>
    <sequenceFlow sourceRef="approveTask" targetRef="decision"/>

    <exclusiveGateway id="decision"/>
    <sequenceFlow sourceRef="decision" targetRef="externalSystemCall">
      <conditionExpression xsi:type="tFormalExpression">
        <![CDATA[
          ${approved}
        ]]>
      </conditionExpression>
    </sequenceFlow>
    <sequenceFlow  sourceRef="decision" targetRef="sendRejectionMail">
      <conditionExpression xsi:type="tFormalExpression">
        <![CDATA[
          ${!approved}
        ]]>
      </conditionExpression>
    </sequenceFlow>

    <serviceTask id="externalSystemCall" name="Enter holidays in external system"
        flowable:class="org.flowable.CallExternalSystemDelegate"/>
    <sequenceFlow sourceRef="externalSystemCall" targetRef="holidayApprovedTask"/>

    <userTask id="holidayApprovedTask" name="Holiday approved"/>
    <sequenceFlow sourceRef="holidayApprovedTask" targetRef="approveEnd"/>

    <serviceTask id="sendRejectionMail" name="Send out rejection email"
        flowable:class="org.flowable.SendRejectionMail"/>
    <sequenceFlow sourceRef="sendRejectionMail" targetRef="rejectEnd"/>

    <endEvent id="approveEnd"/>

    <endEvent id="rejectEnd"/>

  </process>

</definitions>

文件标红问题可以通过安装Flowable BPMN visualizer插件解决
Flowable BPMN visualizer 可以进行绘制
本文件无非被插件正确打开是缺少<bpmndi:BPMNDiagram id=“xxx”> 标签及数据

第2至11行看起来挺吓人,但其实在大多数的流程定义中都是一样的。这是一种样板文件,需要与BPMN 2.0标准规范完全一致。

每一个步骤(在BPMN 2.0术语中称作活动(activity))都有一个id属性,为其提供一个在XML文件中唯一的标识符。所有的活动都可以设置一个名字,以提高流程图的可读性。

活动之间通过顺序流(sequence flow) 连接,在流程图中是一个有向箭头。在执行流程实例时,执行(execution)会从启动事件沿着顺序流流向下一个活动。

离开排他网关(带有X的菱形)的顺序流很特别:都以表达式(expression)的形式定义了条件(condition) (见第25至32行)。当流程实例的执行到达这个网关时,会计算条件,并使用第一个计算为true的顺序流。这就是排他的含义:只选择一个。当然如果需要不同的路由策略,可以使用其他类型的网关。

这里用作条件的表达式为 a p p r o v e d , 这 是 {approved},这是 approved{approved == true}的简写。变量’approved’被称作流程变量(process variable)。流程变量是持久化的数据,与流程实例存储在一起,并可以在流程实例的生命周期中使用。在这个例子里,我们需要在特定的地方(当经理用户任务提交时,或者以Flowable的术语来说,完成(complete)时)设置这个流程变量,因为这不是流程实例启动时就能获取的数据。

现在我们已经有了流程BPMN 2.0 XML文件,下来需要将它部署(deploy) 到引擎中。部署一个流程定义意味着:

  • 流程引擎会将XML文件存储在数据库中,这样可以在需要的时候获取它。
  • 流程定义转换为内部的、可执行的对象模型,这样使用它就可以启动流程实例。

将流程定义部署至Flowable引擎,需要使用RepositoryService,其可以从ProcessEngine对象获取。使用RepositoryService,可以通过XML文件的路径创建一个新的部署(Deployment),并调用deploy()方法实际执行:

@SpringBootTest
public class DeploymentTest {
   


    @Autowired
    private RepositoryService repositoryService;

    /**
     * 通过文件部署
     */
    @Test
    public void deploymentByFile(){
   
        //部署流程
        Deployment deployment=repositoryService.createDeployment()
                .addClasspathResource("bpmn/holiday-request.bpmn20.xml")
                .name("请假流程")
                .deploy();

    }
    /**
     * 通过文件部署
     */
    @Test
    public void deploymentByXML(){
   
        //部署流程
        String xml = "holiday-request.bpmn20.xml 内容,此处略";
        Deployment deployment=repositoryService.createDeployment()
                .addString("holiday-request.bpmn20.xml",xml)
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flowable 是一个轻量级的工作引擎,用于在应用程序中实现复杂的业务程。它提供了一个简单而强大的方式来定义、执行和管理工作程。 要入门 Flowable,可以按照以下步骤进行: 1. 安装 Flowable:首先,你需要在你的项目中添加 Flowable 的依赖。你可以在 Maven 或 Gradle 中添加相应的依赖项。 2. 创建程定义:使用 Flowable Modeler 或者代码方式创建一个程定义。程定义是用于描述工作程的元数据,包括程图、节点和转移条件等信息。 3. 部署程定义:将创建的程定义部署到 Flowable 引擎中。部署可以通过代码方式或者使用 Flowable 的 REST API 进行。 4. 执行程实例:通过启动程实例来执行工作程。程实例是程定义的具体执行过程,会根据定义的节点和转移条件进行相应的操作。 5. 处理任务:在工作程中可能会有多个任务需要处理。可以使用 Flowable 提供的任务管理 API 来处理这些任务,例如完成、指派、委派等操作。 6. 监控和管理:Flowable 提供了丰富的监控和管理功能,可以帮助你跟踪和管理正在运行的工作程。你可以使用 Flowable 的管理控制台或者 API 来完成这些操作。 以上是一个基本的入门程,你可以根据具体的需求进一步学习和使用 Flowable 的高级功能,例如事件监听、表单定义、权限管理等。Flowable 官方文档提供了详细的教程和示例,推荐你参考官方文档以获取更详细的信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值