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

news2025/1/11 10:04:14

一、启动流程      

        流程定义与实例的关系类似于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) 等等。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[论文阅读] (33)NDSS2024 Summer系统安全和恶意代码分析方向相关论文汇总

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座&#xff0c;并分享给大家&#xff0c;希望您喜欢。由于作者的英文水平和学术能力不高&#xff0c;需要不断提升&#xff0c;所以还请大家批评指正&#xff0c;非常欢迎大家给我留言评论&#xff0c;学术路上期…

盲盒小程序支付流程优化与风险防控策略

在盲盒小程序中&#xff0c;支付流程的优化和风险防控是提升用户体验和确保交易安全的关键环节。下面我们将深入探讨这两个方面的问题和应对策略。 一、支付流程优化 在支付流程优化方面&#xff0c;我们主要关注以下几点&#xff1a; 简化操作流程&#xff1a;通过减少不必…

男士内裤什么品牌质量好?盘点口碑最好的五款男士内裤

面对市场上琳琅满目的款式与品牌&#xff0c;如何挑选出最适合自己的那一款男士内裤一直是大家最大的疑问&#xff01;今天&#xff0c;我们为您带来实用的选购技巧&#xff0c;并推荐五款备受好评的男士内裤&#xff0c;信儿帮助大家避免选到一些质量不好的男士内裤&#xff0…

Mysql 查询数据量

Mysql 查询数据量 Mysql 查询数据库数据量Mysql查询指定数据表数据量 Mysql 查询数据库数据量 查询命令如下 SELECTTABLE_NAME AS 表名,TABLE_ROWS AS 记录数,TRUNCATE (data_length / 1024 / 1024, 2) AS 数据容量(MB),TRUNCATE (index_length / 1024 / 1024, 2) AS 索引容量…

DevExpress 控件和库

UI控件和组件 DevExpress WinForms包括以下Windows窗体库和控件&#xff1a; Grids and Editors Data Grid Tree List Vertical Grid Property Grid Gantt Control Data Editors and Simple Controls Office-inspired Ribbon, Bars and Menu Rich Text Editor Scheduler S…

短丝足视频:四川鑫悦里文化传媒有限公司

短丝足视频&#xff1a;文化审美的新趋势与道德边界的探讨 随着互联网技术的飞速发展&#xff0c;短视频平台已成为人们生活中不可或缺的一部分。四川鑫悦里文化传媒有限公司在众多短视频内容中&#xff0c;短丝足视频作为一种新兴的视觉艺术形式&#xff0c;逐渐引起了人们的…

硬盘危机:磁盘损坏无法打开的应对策略

在数字化时代&#xff0c;磁盘作为数据存储和传输的核心设备&#xff0c;其稳定性和安全性至关重要。然而&#xff0c;在日常使用过程中&#xff0c;我们时常会面临磁盘损坏无法打开的困境。这不仅会影响我们的工作效率&#xff0c;还可能造成重要数据的丢失。本文将深入探讨磁…

【设计模式】结构型-代理模式

在静谧的林间舞台上&#xff0c;代理轻舞着对象的梦想&#xff0c;掌控访问&#xff0c;引领旋律&#xff0c;真实与虚幻间&#xff0c;交织出灵动的诗篇。 文章目录 一、数据库操作的问题二、代理模式三、代理模式的核心组成四、运用代理模式五、代理模式的应用场景六、小结推…

基尼系数计算过程

引言 在探讨经济公平性时&#xff0c;基尼系数是一个不可忽视的指标。它不仅反映了一个国家或地区内部的收入分配状况&#xff0c;还对政策制定和社会稳定有着深远的影响。 基尼系数的定义 基尼系数是由意大利统计学家科拉多基尼在1912年提出的&#xff0c;用来衡量一个国家…

轻量级分布式事务实现:掌握最大努力通知方案

本文作者:小米,一个热爱技术分享的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! Hey,大家好,我是小米,一个喜欢研究技术的29岁程序员!今天我想跟大家分享一个在分布式系统中非常重要的概念——分布式事务。而我们今天的重点…

【面经总结】 Java基础 - 异常

异常 介绍一下 Java 的异常体系 Java 的异常体系是由 Throwable 类及其子类构成的。 Throwable 包含两个子类&#xff1a;Error&#xff08;错误&#xff09;和 Exception&#xff08;异常&#xff09; Error 表示错误&#xff0c;通常不需要程序员处理&#xff0c;如内存溢…

压缩视频大小的方法

在数字化时代&#xff0c;视频已经成为了我们生活中不可或缺的一部分。无论是工作、学习还是娱乐&#xff0c;视频都扮演着重要的角色。但是有时候视频容量会很大&#xff0c;压缩视频作为一种有效的解决方案&#xff0c;受到了越来越多人的关注。本文将介绍几种常见的压缩视频…

中国十大权威姓名学专家颜廷利:108个罗汉宝宝

在2008年5月12日&#xff0c;一场毁灭性的灾难降临在四川省的汶川县。强烈的地震波震撼动了大地&#xff0c;将什邡市妇幼保健院夷为平地&#xff0c;许多即将成为母亲的妇女被迫流落街头&#xff0c;处于无助和危险之中。然而&#xff0c;在这个混乱与绝望的时刻&#xff0c;一…

【备忘录】解决 .nuget 占用C盘大量空间问题

目录 背景修改目录查看命令小结 背景 最近C盘不够用了&#xff0c;一个个排除&#xff0c;发现 C:\Users\用户(比如:dell).nuget 这个文件夹与日俱增。这是平时我使用vs2022的nuget安装包的时候&#xff0c;很多包就会安装到这个默认的目录。大概占用C盘13个G&#xff0c;有没…

初阶 《函数》 5. 函数的嵌套调用和链式访问

5. 函数的嵌套调用和链式访问 函数和函数之间是可以根据实际的需求进行组合的&#xff0c;也就是互相调用 5.1 嵌套调用 #include <stdio.h> void new_line() {printf("hehe\n"); } void three_line() {int i 0;for (i 0; i < 3; i){new_line();} } int …

Unity 使用TextMeshPro实现图文混排

最后实现出的效果是这样的 开始实现 准备两张图 选中图片右键->Create->TextMeshPro->Sprite Asset 然后文件夹内就会出现一个同名的这个文件 新建一个Text Inspector面板 点击最底下的Extra Settings 然后把刚刚创建的SpriteAsset拖过来 放到对应的地方 然后…

AI助力密码安全:利用机器学习提升密码安全性

信息安全已经成为了当今数字世界的一个核心问题&#xff0c;随着互联网技术使用场景的不断增加&#xff0c;创建和管理安全的密码已经成为了保证在线账户安全的关键要求。本文将研究和探讨如何利用人工智能&#xff08;AI&#xff09;和机器学习技术来提升密码的安全性。 学习目…

2024年计算机相关专业是否还值得选择

目录 1.概述 1.1.就业前景 1.2.个人兴趣与能力 1.3.专业发展与趋势 1.4.市场饱和度与竞争 1.5.建议与展望 2.行业竞争现状 2.1.行业饱和度 2.2.新兴技术的影响 2.3.人才需求的变化 2.4.行业内的创新动态 2.5.保持从业者的竞争力 2.6.小结 3.专业与个人的匹配度判断…

六西格玛绿带培训:让数据说话,让职场更精彩!

在竞争激烈的职场环境中&#xff0c;我们都在寻找那些能让我们脱颖而出的独特技能和方法。六西格玛绿带培训就是这样一种机会&#xff0c;它不仅能够提升你的专业技能&#xff0c;还能帮助你培养一种全新的思维方式&#xff0c;使你在职场中更加游刃有余。 六西格玛绿带的独特…

一个功能强大的开源数据库

PostgreSQL作为一个功能强大、开源且高度可定制的关系型数据库&#xff0c;因其在GIS应用中的出色表现而备受推崇。 今天就来为你分享这个数据库软件&#xff0c;如果它对有用&#xff0c;请在文末查看自动获取下载地址的方法。 什么是 PostgreSQL&#xff1f; PostgreSQL从…