Camunda 流程引擎API介绍

2024-02-02 17:44
文章标签 流程 介绍 引擎 api camunda

本文主要是介绍Camunda 流程引擎API介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

💖专栏简介

✔️本专栏将从Camunda(卡蒙达) 7中的关键概念到实现中国式工作流相关功能。

✔️文章中只包含演示核心代码及测试数据,完整代码可查看作者的开源项目snail-camunda

✔️请给snail-camunda 点颗星吧😘

💖Services API

🧡RepositoryService

RepositoryService 可能是使用 Camunda 引擎时需要的第一个服务。此服务提供用于管理和部署流程定义的操作。此外,此服务允许

  • 查询引擎已知的部署和进程定义。
  • 暂停和激活流程定义。挂起意味着无法对它们进行进一步的操作,而激活则相反。
  • 检索各种资源,例如部署中包含的文件或引擎自动生成的流程图。

🧡RuntimeService

RuntimeService 可以用来启动流程实例,也是用于检索和存储流程变量的服务。RuntimeService 还允许查询流程实例和执行。执行是 BPMN 2.0 的“令牌”概念的表示,这个“令牌”概念在之前的篇章《认识BPMN2.0》中也有提及,实质上执行是指向流程实例当前位置的指针。而流程实例等待外部触发器并且流程需要继续时,也会使用 RuntimeService。

🧡TaskService

TaskService 是围绕任务的所有操作,任务才是流程引擎的核心。例如

  • 查询分配给用户或组的任务。
  • 创建新的独立任务。这些任务与流程实例无关。
  • 操作将任务分配给哪个用户或哪些用户以某种方式参与该任务。
  • 认领并完成任务。

🧡IdentityService

IdentityService 允许管理(创建、更新、删除、查询等)组和用户。重要的是要了解核心引擎实际上不会在运行时对用户进行任何检查。例如,可以将任务分配给任何用户,但引擎不会验证系统是否知道该用户。

🧡FormService

FormService 是一项可选服务。这意味着 Camunda 引擎可以在没有它的情况下完美使用,而不会牺牲任何功能。此服务引入了开始表单和任务表单的概念。开始表单是在启动流程实例之前向用户显示的表单,而任务表单是在用户想要完成任务时显示的表单。

🧡HistoryService

HistoryService 公开引擎收集的所有历史数据。在执行流程时,引擎可以保留大量数据(这是可配置的),例如流程实例的开始时间、谁执行了哪些任务、完成任务需要多长时间、每个任务遵循的路径流程实例等。此服务主要公开用于访问此数据的查询功能。

🧡ManagementService

ManagementService允许检索有关数据库表和表元数据的信息。此外,它还公开了作业的查询功能和管理操作。作业在引擎中用于各种操作,例如计时器、异步延续、延迟挂起/激活等。

🧡FilterService

FilterService 允许创建和管理过滤器。筛选器是存储查询,如任务查询。例如,Tasklist 使用筛选器来筛选用户任务。

🧡ExternalTaskService

ExternalTaskService 提供对外部任务实例的访问。外部任务表示在外部独立于流程引擎处理的工作项。

💖Query API

要从引擎查询数据有多种方式:

🧡Java Queries

List<Task> tasks = taskService.createTaskQuery().taskAssignee("userOne").processVariableValueEquals("orderId", "8888").orderByDueDate().asc().list();

在不限制最大结果数或查询大量结果的情况下可能会导致高内存消耗,甚至导致内存不足异常。而查询的最大结果集可以通过配置queryMaxResultsLimit参数,默认值是231-1。

🧡Native Queries

如果查询 API 缺少您需要的可能性(例如,OR 条件),则提供自己的 SQL 查询来检索引擎实体(如 ProcessInstances、Tasks 等),返回类型由您使用的 Query 对象定义,数据映射到正确的对象,例如 Task、ProcessInstance、Execution 等。由于查询将在数据库上触发,因此必须使用表名和列名。

List<Task> tasks = taskService.createNativeTaskQuery().sql("SELECT * FROM " + managementService.getTableName(Task.class) + " T WHERE T.NAME_ = #{taskName}").parameter("taskName", "aOpenTask").list();long count = taskService.createNativeTaskQuery().sql("SELECT count(*) FROM " + managementService.getTableName(Task.class) + " T1, "+ managementService.getTableName(VariableInstanceEntity.class) + " V1 WHERE V1.TASK_ID_ = T1.ID_").count();

🧡Custom Queries

虽然java queries非常简单,但是我们只能使用它提供的查询,也不能对域对象添加约束。

例如下图我们希望返回的查询结果是Customer,此时就需要自定义查询,具体如何实现将在后续的文章中详细讲解。

这篇关于Camunda 流程引擎API介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/671481

相关文章

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

redis过期key的删除策略介绍

《redis过期key的删除策略介绍》:本文主要介绍redis过期key的删除策略,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录第一种策略:被动删除第二种策略:定期删除第三种策略:强制删除关于big key的清理UNLINK命令FLUSHALL/FLUSHDB命

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir