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()】

  • 19
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LoneWalker、

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值