Camunda历史记录和审核事件日志

💖专栏简介

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

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

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

💖历史记录

流程引擎维护数据库中正在运行的流程实例的状态。这包括(1)在流程实例达到等待状态时将其状态写入数据库,以及(2)在流程继续执行时读取该状态。我们称这个数据库为运行时数据库。

除了维护运行时状态之外,流程引擎还创建一个审核日志,提供关于已执行流程实例的审核信息。我们称这个事件流为历史事件流。组成此事件流的单个事件称为历史事件,包含有关已执行流程实例、活动实例、已更改流程变量等的数据。

在默认配置中,流程引擎只会把事件流中一些简单的数据写入历史数据库。可以通过HistoryService API查询这个数据库(5)。

历史数据库和历史服务是可选组件;如果历史事件流没有记录到历史数据库中,或者如果用户选择将事件记录到不同的数据库中,则流程引擎仍然能够工作,并且仍然能够填充历史事件流。因为BPMN 2.0核心引擎组件不从历史数据库读取状态。还可以使用流程引擎配置中的historyLevel设置来配置记录的数据量。

由于流程引擎不依赖于历史数据库的存在来生成历史事件流,因此可以提供不同的后端来存储历史事件流。默认后端是DbHistoryEventHandler,它将事件流记录到历史数据库中。可以交换后端并为历史事件日志提供自定义存储机制。

🧡历史记录的等级

历史记录的等级主要是控制流程引擎通过历史事件流时所需存储的数据量。

  • NONE:不触发历史事件
  • ACTIVITY: 触发以下事件:
    • 在流程实例【Process Instance】启动、更新、结束和迁移时触发
    • 在案例实例【Case Instance】创建、更新和关闭触发
    • 在活动实例【Activity Instance】被启动,更新,结束和迁移时触发
    • 在案例活动实例【Case Activity Instance】创建、更新和结束时触发
    • 在任务实例【Task Instance】被创建、更新(即重新分配、委托等)、完成、删除和迁移时触发。
  • AUDIT:除了级别为ACTIVITY时触发的事件之外还会触发以下事件:
    • 在流程变量被创建、更新、删除和迁移时触发。默认的历史后端(DbHistoryEventHandler)将变量实例事件写入历史变量实例数据库表。此表中的行随着变量实例的更新而更新,也就是只有流程变量的最后一个值可用。
  • FULL: 除了级别是AUDIT时触发的事件之外还会触发以下事件:
    • 在创建和/或更新表单属性时触发
    • 用户的操作日志更新:当用户执行操作时触发,如声明用户任务,委派用户任务等。
    • 在事件被创建、删除、解决和迁移时触发
    • 当作业正在创建、作业执行失败或成功、作业被删除时触发
    • 当一个决策被DMN引擎计算时触发。
    • 批量开启和结束
    • 当添加、删除身份信息、更改用户任务的受让人、更改用户任务的所有者时触发。
    • 外部任务创建、删除或外部任务执行失败或成功时触发
  • AUTO: 如果多个引擎使用同一个数据库,这种情况下所有引擎要使用相同的历史记录等级。使用AUTO级别,引擎将自动确定数据库中已配置的级别。如果未找到,则使用默认值。

🧡历史流程实例的状态值

对于流程实例,流程引擎将在历史记录数据库中创建对应的记录,并将在流程执行期间不断更新此记录。

  • ACTIVE - 运行中的流程实例
  • SUSPENDED - 挂起的流程实例
  • COMPLETED - 通过正常的结束事件完成
  • EXTERNALLY_TERMINATED - 从外部终止, 比如通过REST API
  • INTERNALLY_TERMINATED - 在内部终止,例如通过终止边界事件

🧡历史记录的查询

比如查询用户的已办任务

List<HistoricTaskInstance> historicTasks = historyService.createHistoricTaskInstanceQuery()
                .tenantIdIn(tenantId)
                .processInstanceBusinessKey(businessKey)
                .taskAssignee(userId)
                .finished()
                .taskDeleteReason("completed")
                .list();

查询某个业务关联的流程耗时最长的10条流程实例

historyService.createHistoricProcessInstanceQuery()
                .finished()
                .processInstanceBusinessKey("XXX")
                .orderByProcessInstanceDuration().desc()
                .listPage(0, 10);

🧡流程实例的持续时间报告

这些报告包括在指定时间段内启动的所有已完成流程实例的最长、最短和平均持续时间。

例如下图显示的是自引擎启动以来每个月的报告

historyService.createHistoricProcessInstanceReport()
                .duration(PeriodUnit.MONTH);

如果需要缩小查询报告的范围,可以使用以下方法:

  • startedBefore:只考虑在给定日期之前启动的历史流程实例。
  • startafter:只考虑在给定日期之后启动的历史流程实例。
  • processDefinitionIdIn:只考虑给定流程定义id的历史流程实例。
  • processDefinitionKeyIn:只考虑给定流程定义键的历史流程实例。

🧡任务报告

对于任务来说报告有两种类型:计数和持续时间

比如根据任务名计数:

historyService.createHistoricTaskInstanceReport()
                .countByTaskName();

也可以根据流程定义Key去统计 【countByProcessDefinitionKey()】

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

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

相关文章

分享springboot框架的一个开源的本地开发部署教程(若依开源项目开发部署过程分享持续更新二开宝藏项目MySQL数据库版)

1首先介绍下若依项目&#xff1a; 若依是一个基于Spring Boot和Spring Cloud技术栈开发的多租户权限管理系统。该开源项目提供了一套完整的权限管理解决方案&#xff0c;包括用户管理、角色管理、菜单管理、部门管理、岗位管理等功能。 若依项目采用前后端分离的架构&#xf…

基础面试题整理7之Redis

1.redis持久化RDB、AOF RDB(Redis database) 在当前redis目录下生成一个dump.rdb文件&#xff0c;对redis数据进行备份 常用save、bgsave命令进行数据备份&#xff1a; save命令会阻塞其他redis命令&#xff0c;不会消耗额外的内存&#xff0c;与IO线程同步&#xff1b;bgsav…

Linux系统中HTTP代理的常见问题及解决方案

亲爱的Linux用户们&#xff0c;是不是有时候觉得HTTP代理就像是一个魔法盒子&#xff0c;让你在数字世界中自由穿梭&#xff1f;但是&#xff0c;就像所有的魔法物品一样&#xff0c;它也会偶尔出点小状况。今天&#xff0c;我们就来一起探讨一下Linux系统中HTTP代理的常见问题…

C语言之字符逆序(牛客网)

个人主页&#xff08;找往期文章包括但不限于本期文章中不懂的知识点&#xff09;&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 字符逆序__牛客网 题目&#xff1a; 思路&#xff1a;既然有空格就不能用scanf函数来接收字符了。因为scanf函数遇到空格会停止读取。我们可以用get…

【Git教程】(一)基本概念 ——工作流、分布式版本控制、版本库 ~

Git教程 基本概念 1️⃣ 为什么要用 Git2️⃣ 为什么要用工作流3️⃣ 分布式版本控制4️⃣ 版本库5️⃣ 简单的分支创建与合并&#x1f33e; 总结 在本章中&#xff0c;将介绍一个分布式版本控制系统的设计思路&#xff0c;以及它与集中式版本控制系统的不同之处。除此之外&am…

Camunda排他网关与并行网关

&#x1f496;专栏简介 ✔️本专栏将从Camunda(卡蒙达) 7中的关键概念到实现中国式工作流相关功能。 ✔️文章中只包含演示核心代码及测试数据&#xff0c;完整代码可查看作者的开源项目snail-camunda ✔️请给snail-camunda 点颗星吧&#x1f618; &#x1f496;排他网关 …

【JAVA WEB】Web标签

目录 注释标签 标题标签 h1-h6 段落标签 换行标签 格式化标签 加粗&#xff1a;strong 标签和 b 标签 倾斜&#xff1a;em 标签和 i 标签 删除线&#xff1a; del 标签 和 s 标签 下划线&#xff1a;ins 标签 和 u 标签 图片标签&#xff1a;img 单标签 src属性&#…

在angular12中proxy.conf.json中配置详解

一、proxy.conf.json文件的目录 二、proxy.conf.json文件中的配置 "/xxx/api": {"target": "地址/api","secure": false,"logLevel": "debug","changeOrigin": true,"pathRewrite": {"…

蓝桥杯嵌入式学习记录——点亮第一个LED(含软件的使用)

目录 一、蓝桥杯概述 二、软件的使用 三、点亮LED 一、蓝桥杯概述 蓝桥杯是一个编程大赛、商赛&#xff0c;获奖率高达60%&#xff08;省赛中一等奖10%、二等奖20%、三等奖30%&#xff09;&#xff0c;但这并不影响它的含金量&#xff0c;多所高校将它列为A类赛事并实行保研…

[机器学习]K-means——聚类算法

一.K-means算法概念 二.代码实现 # 0. 引入依赖 import numpy as np import matplotlib.pyplot as plt # 画图依赖 from sklearn.datasets import make_blobs # 从sklearn中直接生成聚类数据# 1. 数据加载 # 生成&#xff08;n_samples&#xff1a;样本点&#xff0c;centers&…

QT安装与helloworld

文章目录 QT安装与helloworld1.概念&#xff1a;2.安装QT3.配置环境变量4.创建项目5.运行效果 QT安装与helloworld 1.概念&#xff1a; Qt Creator是一个用于Qt开发的轻量级跨平台集成开发环境。Qt Creator可带来两大关键益处&#xff1a;提供首个专为支持跨平台开发而设计的…

跟着小德学C++之启动监听

嗨&#xff0c;大家好&#xff0c;我是出生在达纳苏斯的一名德鲁伊&#xff0c;我是要立志成为海贼王&#xff0c;啊不&#xff0c;是立志成为科学家的德鲁伊。最近&#xff0c;我发现我们所处的世界是一个虚拟的世界&#xff0c;并由此开始&#xff0c;我展开了对我们这个世界…

Rust开发WASM,浏览器运行WASM

首先需要安装wasm-pack cargo install wasm-pack 使用cargo创建工程 cargo new --lib mywasm 编辑Cargo.toml文件&#xff0c;修改lib的类型为cdylib&#xff0c;并且添加依赖wasm-bindgen [package] name "mywasm" version "0.1.0" edition "…

顺序图(Sequence Diagram)

也叫时序图、序列图 一、定义 顺序图是用来描述对象自身及对象间信息传递顺序的视图。 二、要素 活动者,对象,生命线,控制焦点,消息(同步消息,异步消息,返回消息,自关联消息) 1、 活动者 活动者发出情况或者接收系统的服务。 2、 对象 对象是特定行为与属性的集合。 表…

uniapp 使用renderjs引入echarts

效果图&#xff1a; 1.1renderjs引入echarts 组件zmui-echarts.vue&#xff1a; <template><view class"zmui-echarts" :prop"option" :change:prop"echarts.delay"></view> </template><script>export defaul…

互联网加竞赛 基于深度学习的行人重识别(person reid)

文章目录 0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图 4 实现效果5 部分代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的行人重识别 该项目较为新颖&#xff0c;适合…

数据结构——C/栈和队列

&#x1f308;个人主页&#xff1a;慢了半拍 &#x1f525; 创作专栏&#xff1a;《史上最强算法分析》 | 《无味生》 |《史上最强C语言讲解》 | 《史上最强C练习解析》 &#x1f3c6;我的格言&#xff1a;一切只是时间问题。 ​ 1.栈 1.1栈的概念及结构 栈&#xff1a;一种特…

qt学习:mplayer播放器(视频)+arm如何播放视频实战+c启动播放器

目录 作用 linux下载 arm下载 使用方法 键盘 命令 命令词有很多&#xff0c;举例几个 在arm上qt实战 配置ui界面 添加头文件&#xff0c;成员&#xff0c;函数 添加视频按钮点击事件 列表选项双击事件 播放按钮点击事件 暂停继续按钮点击事件 停止按钮点击事件 …

挑战杯 python+深度学习+opencv实现植物识别算法系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的植物识别算法研究与实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;4分工作量&#xff1a;4分创新点&#xff1a;4分 &#x1f9ff; 更多…

【Linux】缓冲区与缓冲区的刷新策略

目录 1.缓冲区基础 1.1缓冲区的刷新策略 1.1.1三种刷新策略 1.1.2.两种强制刷新策略 2.用户级语言层缓冲区 2.1.默认在显示器输出 2.2.重定向到文件输出 2.3.write调用没有显示两份的原因 3.模拟实现文件缓冲区 3.1 myFileBuffer.h 3.2 myFileBuffer.c 4.系统内核缓…