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) 等等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/700633.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【渗透测试】|dvwa命令注入乱码问题

法一&#xff1a; 解决方法如下&#xff1a; 1、按住winr&#xff0c;在运行框中输入cmd弹出命令行&#xff0c;在命令行中输入“control intl.cpl” 2、这个命令是使用control命令行工具来打开"区域和语言设置"对话框 3、选中对话框中的管理选项卡 4、可以看到这里…

智能照明雷达传感器成品,办公室、学校人体传感器开启空间感知新篇章,灯光、空调联动

在科技飞速发展的今天&#xff0c;智能化已成为我们生活中不可或缺的一部分。从智能手机到智能家居&#xff0c;智能技术正逐渐渗透到我们生活的每一个角落。 雷达传感器成品正以其独特的技术优势和广泛的应用场景&#xff0c;创新着智能化生活的新潮流。 飞睿智能雷达传感器…

7.数据集处理库Hugging Face Datasets

数据集处理库Hugging Face Datasets Datasets 首先解决数据来源问题 使用 Datasets 下载开源数据集 Datasets.load_dataset 实现原理简介 构造 DatasetBuilder 类的主要配置 BuilderConfig 如果您想向数据集添加额外的属性,例如类别标签。有两种方法来填充BuilderConfig类或其…

idea自定义注释模板

1、打开配置 setting -> Editor -> Live Template 2、添加TemplateGroup&#xff0c;并在添加的group下加LiveTemplate 3、配置Live Template 内容&#xff1a; **** Description: * $param$* return $return$ * author $user$* date $date$ $time$**/变量&#xf…

IDEA:配置Golang的开发环境及异常

1、下载&安装 进入GO的官网下载对应的GO 我们可以下载安装版&#xff0c;不过本人习惯下载解压版&#xff0c;这个因个人而异 2、配置环境变量 GOBIN : %GOROOT%\bin GOPATH : D:\MyGo 工作区间 GOROOT : D:\Program Files\Go GOJDK地址PATH: %GOBIN% ; %GOROOT%\bin ; …

C++ | Leetcode C++题解之第145题二叉树的后序遍历

题目&#xff1a; 题解&#xff1a; class Solution { public:void addPath(vector<int> &vec, TreeNode *node) {int count 0;while (node ! nullptr) {count;vec.emplace_back(node->val);node node->right;}reverse(vec.end() - count, vec.end());}vect…

TCP三次握手和四次挥手过程简介

接上篇 传输层部分 链路层、网络层、传输层和应用层协议详解分析-CSDN博客文章浏览阅读689次&#xff0c;点赞10次&#xff0c;收藏15次。wireshark抓包分析-CSDN博客wireshark是网络包分析工具网络包分析工具的主要作用是尝试捕获网络包&#xff0c;并尝试显示包的尽可能详细…

JVM 根可达算法

Java中的垃圾 Java中"垃圾"通常指的是不再被程序使用和引用的对象&#xff0c;具体表现在没有被栈、JNI指针和永久代对象所引用的对象。Java作为一种面向对象的编程语言&#xff0c;它使用自动内存管理机制&#xff0c;其中垃圾收集器负责检测和回收不再被程序引用的…

Golang | Leetcode Golang题解之第145题二叉树的后序遍历

题目&#xff1a; 题解&#xff1a; func reverse(a []int) {for i, n : 0, len(a); i < n/2; i {a[i], a[n-1-i] a[n-1-i], a[i]} }func postorderTraversal(root *TreeNode) (res []int) {addPath : func(node *TreeNode) {resSize : len(res)for ; node ! nil; node n…

通过文本指令生成3D模型纹理贴图

在3D建模的广阔领域中,我们总是追求更高效、更直观的方法来创建和编辑模型。今天,我要向大家介绍一种革新性的技术,它能够通过文本指令来精确地控制3D模型的细节,包括纹理贴图的生成。 1. 技术定位 这项技术主要定位于交互式3D建模领域,它为用户提供了一种全新的方式来创…

可变参数以及不可变集合

可变参数&#xff1a; 格式&#xff1a; public class ArgsDemo {public static void main(String[] args) {System.out.println(getSum(1,2,3,4,5));}//可变参数public static int getSum(int...args){int sum 0;for (int arg : args) {sum arg;}return sum;} }可变参数的…

极致深耕,打造核心竞争壁垒——探寻蓝思科技穿越周期的密码

作者 | 曾响铃 文 | 响铃说 一家企业&#xff0c;如何才能在时代变幻的风云中不计较一时得失&#xff0c;长期稳健发展&#xff0c;穿越周期&#xff1f;本期主题就来探寻一家在湖南的国际化企业的发展密码。 穿越周期的企业&#xff0c;都在坚持一个驱动发展的“原点” 细…

✔️Vue基础++

✔️Vue基础 组件通信 什么是组件通信&#xff1f; 组件通信就是指 组件与组件 之间的 数据传递 组件的数据是独立的&#xff0c;无法直接访问其他组件的数据想使用其他组件的数据&#xff0c;就需要组件通信 组件之间如何通信&#xff1f; 组件关系 父子关系非父子关系 …

苹果WWDC 2024 带来的 AI 风暴:从生产力工具到个人助理,AI 将如何融入我们的生活?

2024年6月5日&#xff0c;苹果WWDC 2024全球开发者大会如约而至&#xff0c;带来了众多令人兴奋的新功能和新产品。其中&#xff0c;AI 技术的全面融入无疑是最引人注目的亮点。从 iOS、iPadOS 到 macOS&#xff0c;再到 Siri 和开发者工具&#xff0c;苹果正在将 AI 融入到其生…

HTML静态网页成品作业(HTML+CSS)—— 兰蔻化妆品网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

微软在Windows上做了个安卓子系统…

前言 曾经小白想着如果Windows在不安装模拟器的情况下&#xff0c;可以安装并运行安卓软件&#xff0c;那这个功能一定很香。 在2021年&#xff0c;微软面向开发者推出WSA支持。在第二年的时候&#xff0c;用户就可以在Windows上使用安卓软件。 这个功能可把我乐坏了&#x…

mysql中 什么是锁

大家好。上篇文章我们讲了事务并发执行时可能带来的各种问题&#xff0c;今天我们来聊一聊mysql面试必问的问题–锁。 一、解决并发事务带来问题的两种基本方式 1. 并发事务访问相同记录的情况 并发事务访问相同记录的情况大致可以划分为3种&#xff1a; 读-读情况&#xf…

23种设计模式之桥接模式

桥接模式 1、定义 桥接模式&#xff1a;将抽象部分与它的实现部分解耦&#xff0c;使得两者都能独立变化 2、桥接模式结构 Abstraction&#xff08;抽象类&#xff09;&#xff1a;它是用于定义抽象类的&#xff0c;通常是抽象类而不是接口&#xff0c;其中定义了一个Imple…

网络安全扫盲篇名词解释之“挖矿“

1. 什么是挖矿&#xff1f; 在数字世界的深处&#xff0c;有着一项神秘而引人入胜的活动&#xff0c;那就是——挖矿&#xff01;说到挖矿&#xff0c;就不得不提到比特币&#xff0c;即使你不懂的计算机相关术语&#xff0c;但是这个名词在生活中你肯定听到过。 比特币&…

【源码】16国语言交易所源码/币币交易+期权交易+秒合约交易+永续合约+交割合约+新币申购+投资理财/手机端uniapp纯源码+PC纯源码+后端PHP

测试环境&#xff1a;Linux系统CentOS7.6、宝塔面板、Nginx、PHP7.3、MySQL5.6&#xff0c;根目录public&#xff0c;伪静态laravel5&#xff0c;开启ssl证书 语言&#xff1a;16种&#xff0c;看图 这套带前端uniapp纯源码&#xff0c;手机端和pc端都有纯源码&#xff0c;后…