springboot与flowable(3):启动、审批、各个Service服务

一、启动流程      

        流程定义与实例的关系类似于Java的类与对象,通过定义的id创建流程实例,编写测试代码:

package org.example.flowabledemo2;

import org.flowable.engine.RuntimeService;
import org.flowable.engine.runtime.ProcessInstance;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class ProcessTest {
    @Autowired
    private RuntimeService runtimeService;

    /**
     * 发起流程
     */
    @Test
    public void startProcess() {
        String id = "FirstFlow:1:95cad374-2702-11ef-8d5d-644ed7087863";
        // 根据流程定义ID启动流程 
        ProcessInstance processInstance = runtimeService.startProcessInstanceById(id);
    }
}

        运行测试后,在act_ru_task中可以查看到正在执行的流程信息。

        每启动一个流程会在act_hi_procinst表中多一条启动记录,然后会在act_ru_execution表中记录流程的分支。

二、流程审批

        查询待办信息并根据id审批任务:

package org.example.flowabledemo2;

import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.task.api.Task;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
public class ProcessTest {

    @Autowired
    private TaskService taskService;

    /**
     * 根据用户查询待办信息
     */
    @Test
    public void findFlow() {
        // 获取到 act_ru_task 中 assignee 字段是 zhangsan 的信息
        List<Task> list = taskService.createTaskQuery().taskAssignee("zhangsan").list();
        // 获取该用户待办事项
        System.out.println(list);
        // 根据id进行审批
        for (Task task : list) {
            // 根据Id审批任务
            taskService.complete(taskId);
        }
    }
}

        运行后查看act_ru_task表,任务进度到达了经理审批。

        在通过lisi用户查询任务进行审批,查看act_ru_task表已空,说明已经没有待办任务了。

三、各个Service服务

        Service是工作流引擎提供用于进行工作流部署、执行、管理的服务接口,我们使用这些接口可以操作服务对应的数据库。所有Service都可以通过ProcessEngine获取,springboot中也可以通过自动注入获取。

1、RepositoryService

        Flowable资源管理类。很可能是使用 Flowable 引擎要用的第一个服务。这个服务提供了管理与控制部署(deployments) 与流程定义 (process definitions) 的操作。

2、RuntimeService

        Flowable流程运行管理类。与提供静态信息(也就是不会改变,至少不会经常改变的信息)RepositoryService 相反, 用于启动流程定义的新流程实例。

3、TaskService

        Flowable任务管理类。 对于像 Flowable 这样的 BPM 引擎来说,核心是需要人类用户操作的任务。所有任务相关的东西都组织在 TaskService 中,例如:查询分派给用户或组的任务创建独立运行 (standalone) 任务。这是一种没有关联到流程实例的任务。决定任务的执行用户 (assignee) ,或者将用户通过某种方式与任务关联。认领 (claim) 与完成 (complete) 任务。认领是指某人决定成为任务的执行用户,也即他将会完成这个任务。完成任务是指 “ 做这个任务要求的工作 ” ,通常是填写某个表单。

4、IdentityService

        它用于管理(创建,更新,删除,查询 …… )组与用户。请注意, Flowable 实际上在运行时并不做任何用户检查。例如任务可以分派给任何用户,而引擎并不会验证系统中是否存在该用户。这是因为 Flowable 有时要与 LDAP 、 Active Directory 等服务结合使用。

5、FormService 

        是可选服务。也就是说 Flowable 没有它也能很好地运行,而不必牺牲任何功能。这个服务引入了开始表单(start form)与任务表单 (task form) 的概念。 开始表单是在流程实例启动前显示的表单,而任务表单是用户完成任务时显示的表单。 Flowable 可以在 BPMN 2.0 流程定义中定义这些表单。表单服务通过简单的方式暴露这些数据。再次重申,表单不一定要嵌入流程定义,因此这个服务是可选的。

6、HistoryService

        暴露 Flowable 引擎收集的所有历史数据。当执行流程时,引擎会保存许多数据(可配置),例如流程实例启动时间、谁在执行哪个任务、完成任务花费的事件、每个流程实例的执行路径,等等。这个服务主要提供查询这些数据的能力。

7、ManagementService

        通常在用 Flowable 编写用户应用时不需要使用。它可以读取数据库表与表原始数据的信息,也提供了对作业 (job) 的查询与管理操作。 Flowable 中很多地方都使用作业,例如定时器 (timer) ,异步操作 (asynchronouscontinuation) ,延时暂停 / 激活 (delayed suspension/activation) 等等。

相关推荐

  1. Docker启动各种服务

    2024-06-18 06:48:06       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-18 06:48:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-18 06:48:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-18 06:48:06       82 阅读
  4. Python语言-面向对象

    2024-06-18 06:48:06       91 阅读

热门阅读

  1. 机器学习中的神经网络重难点!纯干货(上篇)

    2024-06-18 06:48:06       34 阅读
  2. LeetCode 619, 58, 24

    2024-06-18 06:48:06       43 阅读
  3. 随机梯度下降(SGD)

    2024-06-18 06:48:06       32 阅读
  4. 【shell脚本个人随笔记录】

    2024-06-18 06:48:06       34 阅读