Camunda流程引擎查询接口API介绍

news2024/9/26 3:29:22

Camunda流程引擎底层采用了mybatis作为ORM框架,并封装了一套自己的数据查询接口,以下是几种可以Camunda流程引擎中查询数据的方式。

  1. Java 查询API 。使用 Fluent Java API 来查询流程引擎实体,比如流程实例、任务等。
  2. REST 查询API 。通过 REST API 来查询流程引擎实体,比如流程实例、任务等。
  3. 原生查询。如果缺乏需要的查询能力(比如 OR 条件查询),可以提供自定义的 SQL 查询语句来查询流程引擎实体,比如流程实例、任务等。
  4. 定制化查询。使用完全定制的查询和自己的 MyBatis 映射来查询对象,或者使用领域数据来连接到流程引擎。
  5. SQL 查询。使用数据库的 SQL 语句查询功能。

 

根据项目需求,可以使用其中的任意一种查询 API ,优先推荐Camunda自己封装的Fluent API进行数据查询。

1. Java 查询API

可以使用 Fluent API 来编写类型安全的查询。可以在查询中添加各种条件(所有这些条件一起通过逻辑与( AND )使用),并且按照明确的顺序进行排序。

【例1】查询 API 的示例,代码如下:

 List <Task> tasks = taskService.createTaskQuery().taskAssignee ("zhangs").processVariablevalueEquals ("orderId ","1001").orderByDueDate(). asc ().list();

在默认情况下,查询 API 把所有的过滤条件通过逻辑与连接起来。此外,逻辑或(OR )查询使得所有过滤条件可以通过逻辑或连接起来。

注意:逻辑或查询只适用于任务查询。不适用于逻辑或查询的有 orderBy...0、 initializeFormKeys()、withCandidateGroups()、withoutCandidateGroups()、 withCandidateUsers ()、withoutCandidateUsers ()。

在调用or方法后,后面可以跟着一系列的过滤条件,每一个过滤条件都是通过 OR 表达式连接起来的。调用 endOr ()方法标志着结束 OR 查询。调用这两个方法相当于把过滤条件放在了括号中。

【例2】 OR 查询示例。

List <Task> tasks = takService.createTaskQuery().taskAssignee ("zhangs"). or().taskName ("Approve Invoice ").taskPriority (5).endOr ().list ();

上述查询获取的是所有分配给 zhangs的任务,并且需要同时满足任务名是 Approve Invoice 或者任务优先级为5的情况。在流程引擎内部,上述查询会转化为如下简化的 SQL 查询,代码如下:

 SELECT DISTINCT * FROM act_ru_task RES WHERE  RES.assignee _=' zhangs'  AND ( Upper ( RES.name )= Upper (' Approve Invoice ') OR RES.priority _=5);

在查询内部可以嵌入任意数量的 OR 查询。当构建的查询不仅包含单个 OR 查询,而且包含与 AND 表达式链接在一起的过滤条件时, AND 表达式将被放在前面,后面跟着 OR 查询。

与变量相关的过滤条件可以在 OR 查询中应用多次,代码如下:

List <Task> tasks = taskService.createTaskQuery ()·or()·processvariablevalueEquals ("orderId","9897").processvariableValueEquals("orderId","9898").processvariableValueEquals ("orderId ","9899").endOr().list();

除了与变量相关的过滤条件外,其他的行为是不同的。当在查询中使用非变量相关的过滤条件时,只有最后一个值会被真正使用到。非变量相关的查询示例,代码如下,

 List <Task> tasks = taskService.createTaskQuery().or(). taskCandidateGroup ("sales").taskCandidateGroup ("controlling").end0r().list();

注意,上述例子中,过滤条件 taskCandidateGroup 中的 sales 被 controlling 替换掉了。为了避免这种情况,可以使用带 In 后缀的过滤条件,比如: taskCandidateGroupln(); tenantidin(); processDefinitionKeyln()。

2. REST 查询 API

 Java 查询 API 也提供了 REST 服务接口。关于 REST 服务接口的详细信息,请参阅官网:https://docs.camunda.org/manual/7.15/reference/rest/。

3.原生数据库查询

在数据查询时可能需要更加强大的查询功能,比如使用 OR 运算符,或者是使用查询 API 没法表达的限制条件。在这种情况下,可以使用 Camunda 提供的原生数据库查询语言,也就是说,用户可以自己写 SQL 查询语句。返回类型由使用的查询对象定义,数据会被映射到正确的对象上去,比如任务、流程对象、执行等。由于查询要直接使用数据库,因此需要自己候要多加小心。数据库表名可以通过 API 获取。

使用数据库中定义的表名和列名。这就需要对内部数据结构有一定的了解。

原生数据库查询示例,代码如下:

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

4.自定义查询

为什么需要自定义查询?我们知道流程引擎提供了一个非常简单易用的Java Query API, 但对于复杂的业务查询还是不能满足,有时出于查询性能考虑,有时不需要查询引擎对象,而是需要查询自己的数据,或者关联业务表和流程引擎表查询数据,这时需要使用自定义查询。

比如: 业务系统里有一个自己的实体表“客户信息”,流程引擎里记录了customerId的流程变量“customer”,如果想做流程引擎实例数据和业务表数据的关联查询,就需要自定义查询。

 详细见:https://camunda.com/blog/2017/12/custom-queries/

5.SQL查询

如果是仅仅要获取流程实例的数据,也可以直接查询Camunda表。比如:实现报表功能、流程数据同步等,可以直接使用 SQL 查询。

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

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

相关文章

SpringMVC启动流程方式分析-三种方式

SpringMVC的启动方式 本文所叙述的是springmvc放入Tomcat servlet容器的启动方式 第一种Web.xml文件配置 使用传统的web.xml配置文件&#xff0c; 指定DispatchServlet &#xff0c;当然如果想要父子容器的效果指定一个ContextLoaderListener 上下文加载监听器就行&#xff…

少儿编程 电子学会图形化编程等级考试Scratch三级真题解析(选择题)2022年12月

2022年12月Scratch等级考试一级真题解析 选择题(共25题,每题2分,共50分) 1、默认小猫角色和气球角色都是显示状态,小猫程序如下图所示,气球没有程序,点击绿旗,舞台上最终显示的效果是 A、可能出现6个不同位置的小猫和6个小球 B、可能出现6个不同位置的小猫和1个气球…

【嵌入式Linux】Jetson nano GPIO应用 | 驱动开发 | 官方gpiolib、设备树与chip_driver

GPIO子系统 0.暴露给应用层 应用 $ echo 79 > /sys/class/gpio/export //导出79号gpio 引脚&#xff0c;使得可在应用层访问 $ echo out > /sys/class/gpio/gpio79/direction //设置 为输出 $ echo 1 > /sys/class/gpio/gpio79/value //输出高电平 开灯 $ echo 0…

win10系统部署-zabbix客户端

一、下载win10系统 zabbix客户端 下载地址&#xff1a; 根据自己需求下载 https://www.zabbix.com/cn/download二、win系统安装客户端 1、解压安装包 c:\zabbix 2、编辑zabbix\conf\zabbix_agentd.conf文件 Server127.0.0.1,IP IP是你的zabbix服务器端地址 ServerActive127…

C++的GUI库

1. Qt Qt是一个跨平台的C应用程序开发框架。广泛用于开发GUI程序&#xff0c;这种情况下又被称为部件工具箱。也可用于开发非GUI程序&#xff0c;例如控制台工具和服务器。 2. MFC 微软基础类库&#xff08;英语&#xff1a;Microsoft Foundation Classes&#xff0c;简称MFC&a…

罗丹明-聚乙二醇-生物素RB-PEG-Biotin;Biotin-PEG-Rhodamine,PEG2000

RB-PEG-Biotin 罗丹明-聚乙二醇-生物素 中文名称&#xff1a;罗丹明-聚乙二醇-生物素 英文名称&#xff1a;RB-PEG-Biotin 分子量&#xff08;PEG &#xff09;&#xff1a;2000、3400、5000&#xff0c;其他分子量可以定制。 用 途&#xff1a;仅供科研实验使用。 性状&…

TiDB 6.1/6.5 在 Rocky Linux 8 中的部署升级与 PITR 初体验

作者&#xff1a; 沈阳盛京征信有限公司 原文来源&#xff1a; https://tidb.net/blog/5fa1612a 本文档的主要内容为&#xff1a; TiDB v6.1.0 在 Rocky Linux 8.7 中的离线部署 TiDB v6.1.0 -> TiDB v6.5.1 升级 TiFlash 扩缩容 Haproxy 部署 br 物理备份与恢复 基…

递归算法(JS实现代码)

&#x1f4dd;个人主页&#xff1a;爱吃炫迈 &#x1f48c;系列专栏&#xff1a;数据结构与算法 &#x1f9d1;‍&#x1f4bb;座右铭&#xff1a;道阻且长&#xff0c;行则将至&#x1f497; 文章目录递归算法递归的思想递归三要素递归的编程模型递归一般应用场景递归经典案例…

​力扣解法汇总1026. 节点与其祖先之间的最大差值

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣 描述&#xff1a; 给定二叉树的根节点 root&#xff0c;找出存在于 不同 节点 A 和 B 之间的最大值…

05、SpringBoot开发实用篇

一、热部署什么是热部署&#xff1f;简单说就是你程序改了&#xff0c;现在要重新启动服务器&#xff0c;嫌麻烦&#xff1f;不用重启&#xff0c;服务器会自己悄悄的把更新后的程序给重新加载一遍&#xff0c;这就是热部署。热部署的功能是如何实现的呢&#xff1f;这就要分两…

【技术】封装自己的 Maven Archetype Maven 原型

封装自己的 Maven Archetype Maven 原型 为什么要封装 Maven Archetype&#xff1f;如何封装 Maven Archetype&#xff1f;核心步骤具体步骤构建项目构建原型 archetypeIDEA 导入自定义原型 如何删除自定义的 Maven Archetype ? 为什么要封装 Maven Archetype&#xff1f; 用…

尚融宝19-Nuxt.js入门

目录 一、搜索引擎优化 1、什么是SEO 2、搜索引擎工作流程 二、服务端渲染和客户端渲染 1、什么是服务端渲染 2、什么是客户端渲染 3、两种方式各有什么优缺点&#xff1f; 三、Nuxt.js 1、Nuxt.js介绍 2、Nuxt.js服务器端渲染 四、安装和运行 五、页面、导航和路…

倒计时 1 天!IoTDB X EMQ 智能汽车主题 Meetup 明日不见不散!

期待已久的智能汽车主题 Meetup 活动明日即将举办&#xff01;天谋科技联手 EMQ、通过数据基础设施平台的实践经验分享&#xff0c;共同为行业用户带来可靠高效的智能制造、智慧车联数据解决方案&#xff0c;快来预约直播&#xff0c;不要错过这场干货满满的智能汽车主题 Meetu…

类中自定义函数并调用and使用钩子函数打印类中变量

在一个类中自定义一个函数A&#xff0c;并在前向传播函数forword中调用这个函数 假设您正在编写一个PyTorch模型&#xff0c;您可以按照以下方式在类中定义函数A&#xff0c;并在forward函数中调用它&#xff1a; import torch import torch.nn as nnclass MyModel(nn.Module)…

Android修行手册 - Android Studio提升性能效率

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断…

【Linux】NanoPi-NEO2外接spi-lcd

这是目录一、显示接口1.1、LCD接口1.2、核心板接口二、添加驱动2.1、确认驱动型号2.2、添加驱动三、测试四、附加4.1、交叉编译器安装4.2、内核和module编译4.3、扩展rootfs大小本文使用环境&#xff1a; 电脑&#xff1a;Ubuntu 18.04.5 LTS 开发板&#xff1a;NanoPi-NEO2 50…

这款知名开车软件,居然暗藏大量病毒

想必大家见多了网上有关 Windows 系统宝藏神级软件的种种推荐。 其中有这么一款软件一直占据推荐榜单前列&#xff0c;并且坐拥无数好评。 它就是在 Steam 上售价仅 19 元&#xff0c;表面看起来平平无奇的 Wallpaper Engine &#xff08;壁纸引擎&#xff09;。 别看它价格不…

常见分布式锁4:zookeeper 瞬时znode节点 + watcher监听机制,ChatGPT回复的解决死锁的方案

原文地址在这里 临时节点具备数据自动删除的功能。当client与ZooKeeper连接和session断掉时&#xff0c;相应的临时节点就会被删除。zk有瞬时和持久节点&#xff0c;瞬时节点不可以有子节点。会话结束之后瞬时节点就会消失&#xff0c;基于zk的瞬时有序节点实现分布式锁&#x…

windows 环境下安装ITOP

该文章修改自旧版本的教程&#xff0c;如有侵权或其他问题请及时联系 windows 环境下安装ITOP 1、安装环境的下载 安装的相关文件列表&#xff0c;自用的程序安装包是版本3.0.2-1&#xff0c;环境是3.2.6版本&#xff1b;也可以直接通过下面链接找到最新的版本进行下载 1.1…

GitLab与jekins结合构建持续集成(cl)环境(2)

目录 GItlab配置邮箱 绑定邮箱 创建群组 添加人员 创建一个项目 添加文件 新建分支 如何拉取代码 Git bash 演示 Git GUI演示 安装jenkins 更改插件镜像源 配置jenkins使用gitlab更新代码 安装jekins插件 配置jenkins免密拉取gatlab代码 jenkins创建项目 将代码…