Mendix 基础审计模块介绍

一、前言

作为售前顾问,帮助客户选型低代码产品是日常工作。考察一家低代码产品的好坏,其中一个维度就是产品的成熟度。产品成熟度直接影响产品在使用中的稳定性和用户体验,对于新工具导入和可持续运用至关重要。

那怎么考察一个产品是否成熟呢?我经常会跟客户讲,一看时间,即上市有多长时间,二看迭代,即多长时间发布新版本,三看“边角功能”。前两点相信大家一看就明白,那什么是“边角功能”?我们说,看某家人是否爱干净会收拾,应该去看墙角旮旯是否有积尘。同样道理,我们看某个产品是否覆盖到了一些貌似边缘的功能,也能窥出这一产品成熟度。其中逻辑是,只有产品发展到较为成熟的阶段时产研团队才有条件给那些看起来不那么核心的需求予资源投入的优先级。相反,一款早期产品肯定是忙于把核心功能先打造出来,再去顾及非核心功能和需求。

就Mendix来讲,它诞生于2005年,至今18年的发展历程,在低代码赛道不可谓不“老资历”。迭代方面,2-4周一个小版本,1-2个月一个中版本,相较同行也保持着快速进化。“边角功能”也有很多,断点调试便是其中代表。Mendix Studio Pro很早开始支持本地加断点甚至条件断点,进行类似传统IDE的开发调试,给予开发者更完整的用户体验。

本文要介绍的基础审计模块可以说是体现Mendix产品成熟度的另一个“边角功能”。即使是Mx 圈老人也未必听过或者详细了解这个模块的使用,然而在某些业务场合它能短平快地解决问题。

二、需求分析

笔者亲身经历的客户提到以下两类业务需求:

Case 1: 某制药企业,希望选择一款低代码产品满足规划中的某创新药研发的项目管理。其中涉及设备、样品、试验、巡检、人员、财务等多方面,且项目耗时预计5~10年,过程中会出现更多不可知的应用需求。然而有一点明确的,制药企业的某些领域软件应用,比如试验、制造,必须满足FDA(该企业在美国有研发团队且产品投放海外)和国内NMPA关于过程规范的要求GXP(Good Practices),其中一条要求所有系统内操作必须留有完整的原始记录,且可导出备查,以确保药品研制过程可审计和审查。因此,该企业对低代码产品也提出开发出的应用能记录核心对象的变更记录的需求。

Case 2: 某大型流通企业,希望用低代码快速实现过去在Excel上管理的某些应用。比如,曾经几千人在Excel中协作目标管理,从目标提出、修改、审批、跟进、更新、回顾到关闭整个过程可能有多人在不同时间点对记录进行增删改查。Excel的痛点之一便是无法跟踪谁做了何种修改。因此,负责人希望上线低代码应用后能清晰记录以上事件,包含明确的什么人在什么时间对哪个对象做了何种(增删改)操作,事件记录可导出。

Case 1和Case 2分别是行业规范和 IT系统规范的典型体现,需求类似,在Mendix 平台上都能得到满足,用的就是Mendix 基础审计模块。

三、模块解析

在Studio Pro中搜索并下载基础审计 Audittrial 模块。

1.png

在Marketplace Module 下出现新加入模块。

2.png

我们来分析一下本模块的实现逻辑。首先是核心实体。

3.png

  • AudittrailSuperClass实体:审计对象父类,核心实现了Before Commit和Before Delete两个事件。待审计的业务实体从此AudittrailSuperClass实体继承创建,获得两个触发事件,业务实体在提交和删除前执行相关操作。

4.png

  • Log实体:记录业务对象的一次变更,包括对象名称、变更时间、变更成员数量、变更类型、描述等信息。

  • LogLine实体:记录业务对象中单个成员的变更信息,包括成员类型、成员名称、旧值、新值等信息。

  • ReferenceLog 和ReferenceLogLine实体:记录业务对象涉及关联对象变更的信息。

模块中的核心逻辑。

5.png

  • 微流 BCo_AudittrailSuperClass:通过调用CreateLogRecordOfObject JavaAction记录业务对象提交入库时刻的变更信息,返回Log对象。JavaAction中实例化该对象及相关关联对象。

  • 微流BDe_AudittrailSuperClass:通过调用CreateLogRecordChangesBeforeDelete JavaAction记录业务对象删除时刻的变更信息,逻辑同上。

在关联和添加事件的模块使用方式下,需要复制和简单调整这两个微流,添加到待记录的业务实体。

除此之外,模块提供页面和页面片段Snippeet的样例,开发者可以直接使用或者添加到目标页面上,展示审计记录。

6.png

四、实际应用

下面展示基础审计模块的一个实际应用。这是一个库存管理的示例应用,包括物料、工厂和库存量等几个基础实体。我们通过两种方式分别为工厂和物料添加审计记录,获得关于这两个业务对象的一切变更信息。

继承的使用方式

针对物料实体,我们通过设置继承父类为AudittrailSuperClass的方式,直接获得Before Commit和Before Delete两个事件的处理逻辑。这是最为简单的模块使用方式。

7.png

注意事项:当业务实体本身已经继承自某个实体时,无法直接使用这一方式。如果当前父类没有再继承,可以考虑让该父类继承AudittrailSuperClass。但请注意Mendix 关于继承层数的最佳实践。如果遇到父类是系统实体的情况,无法修改父类,那就要考虑第二种使用方式了。

关联和添加事件的使用方式

针对工厂实体,我们首先将它和基础审计模块的Log实体建立1对多的关联关系,然后为工厂实体添加Before Commit和Before Delete的事件处理逻辑。这里我们只需要复用模块下已有的BCo_AudittrailSuperClass和BDe_AudittrailSuperClass两个微流即可。

8.png

复用方式:拷贝两个微流至业务模块,给予合适的名字,同时将微流入参对实体类型改为工厂实体。

9.png

复用审计查看页面

本应用中我们直接使用模块自带的审计查看页面,效果已经很不错。具体做法,将Log_Overview页面拷贝至业务模块,设置当前布局模板确保UX一致性,并添加到导航菜单栏。

赋予角色与权限

最后不要忘记,为需要访问审计页面的用户添加合适的角色。基础审计模块有两个角色,差别在于MxAdministrator角色才有查询关联对象变更信息的权限。因此,对于想查看业务对象变更时关联对象变更信息时,需要添加这一角色。

11.png

效果展示

首先我们添加一个物料M005,名称为Basket,当前用户名是demo_user

12.png

打开审计页面,我们看到该变更已经被记录,包括变更人、变更时间和变更详情。

13.png

然后我们修改工厂实体,经理由demo_user变更为Tom.

14.png

打开审计页面,我们同样看到变更被记录。

15.png

这里需要注意的是,变更的经理字段并未在这个页面的表格中显示出来,在新值上显示为reference changed。这是因为manager属性是来自system.user这一关联对象。其变更信息的显示需要用到前面介绍的ReferenceLog和ReferenceLogLine两个实体,并在其他页面上展示。这时候选中该行,点击View,我们就能看到此关联实体的变更信息了。

16.png

17.png

至此,我们看到两种使用方式下达到了同样的预期效果。

在审计页面点击切换到表格视图,我们可以看到所有业务对象的变更记录,并且可以进行实体名、变更日期、变更人、变更类型的筛选,最后导出为Excel或CSV格式,用于归档或外部审阅。

18.png

19.png

此外,模块提供一些配置参数,允许开发者自行设定变更记录的类型和时间戳时区和格式等。详情请查看配置页面说明文字,非常清晰。

20.png

五、总结与展望

本文介绍了Mendix官方的基础审计模块。审计是一个重要但一般低代码产品可能忽略的长尾功能,利益于Mendix早些年在金融行业客户(如荷兰RaboBank、苏黎世保险、加拿大BDC等)的应用,这一需求很早就在产品中得到覆盖。这恰恰是前言中所说产品成熟度的重要标志。模块提供两种使用方式,且很容易复用内部页面,上手简单,是项目实战中的好帮手。该模块已经发布到9.1版本,用户众多,在Marketplace 上收获了大量的正向用户反馈。

21.png

使用该模块时,也有些注意事项,比如性能方面。考虑到变更记录的逻辑触发在业务对象提交入库或删除的时间点,如果需要审计的实体很多,并且变更非常频繁,可能带来较多的延时以及审计数据量剧增的情况。以及某些情况下需要更快捷和完善的记录搜索。为此,Mendix推出了收费版本的高级审计模块,重新设计了架构,借助Kafka、ElasticSeach、Kibana等开源组件增强了可无限扩展、索引化检索、外部永久存储等特点。该模块已经在美国Johnson&Johnson项目上得到运用,以满足FDA CFR 21 Part 11 的计算机系统合规要求。

我们将在今后择机向大家介绍此高级模块,有需求的小伙伴也可以联系Mendix热线获得更多信息。

22.png

六、参考资料

  • Mendix Documentation: Audit Trial

  • Mendix Marketplace: Advanced Audit Trial

关于Mendix公司

在一个数字化先行的世界中,客户希望自己的每一项需求都得到满足,员工希望使用更好的工具来完成工作,而企业意识到自己只有通过全面数字化转型才能生存并取得成功。Mendix公司,a Siemens business正在迅速成为企业数字化转型的推动者。其业内领先的低代码平台和全方位的生态系统整合最先进的技术,帮助企业创造出提高互动性、简化操作和克服IT瓶颈的解决方案。Mendix公司以抽象化、自动化、云和协作为四大支柱,大幅提升开发者的生产力,并且依靠自己的工程协作能力和直观的可视化界面,帮助大量不熟悉技术的“公民”开发者在他们所擅长的领域创建应用程序。Mendix公司是权威行业分析师眼中的领导者和远见者,也是一个云原生、开放、可扩展、敏捷和饱经考验的平台。从人工智能和增强现实,到智能自动化和原生移动,Mendix公司已成为数字化先行企业的骨干。Mendix公司企业低代码平台已被全球4000多家领先的公司采用。

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

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

相关文章

input输入框自动填充后消除背景色

一般自动填充后会有一个突出的浅蓝色背景,一定也不好看,所以想把它去掉: 这个时候,就要用到浏览器的样式设置了: input:-webkit-autofill {background: transparent;transition: background-color 50000s ease-in-ou…

matlab使用教程(12)—随机数种子和随机数流

1.生成可重复的随机数 1.1指定种子 本示例显示如何通过首先指定种子来重复生成随机数数组。每次使用相同种子初始化生成器时,始终都可以获得相同的结果。首先,初始化随机数生成器,以使本示例中的结果具备可重复性。 rng( default ); 现在…

护眼灯值不值得买?什么护眼灯对眼睛好

想要选好护眼台灯首先我们要知道什么是护眼台灯,大的方向来看,护眼台灯就是可以保护视力的台灯,深入些讲就是具备让灯发出接近自然光特性的光线,同时光线不会伤害人眼而出现造成眼部不适甚至是视力降低的照明设备。 从细节上看就…

迁移协调器 - 就地迁移模式

在本系列博客的第一部分中,我们从高层级视角介绍了 Migration Coordinator 提供的所有模式,Migration Coordinator 是内置于 NSX 中的完全受 GSS 支持的工具,可将 NSX for vSphere 迁移到 NSX (NSX-T)。 本系列的第二篇博客将详细介绍就地迁…

问题记录和细节补充(完善中)

【问题记录】ORA-01400: 无法将 NULL 插入 Ajax 调用为Execute Server-Side Code返回了服务器错误ORA-01400: 无法将 NULL 插入 ("YWJA"."DEPT_TEST_WXX2"."DEPT_ID")。 原因:主键非自增,输入时并未有主键值传递&#x…

使用phpstorm开发调试thinkphp

1.环境准备 1.开发工具下载:PhpStorm: PHP IDE and Code Editor from JetBrains 2.PHP下载:PHP: Downloads 3. PHP扩展:PECL :: Package search 4.用与调试的xdebug模块: Xdebug: Downloads xdebug模块,如果是php8以…

目标和——力扣494

文章目录 题目描述解法:动态规划题目描述 解法:动态规划 nt findTargetSumWays(vector<int>& nums, int target){int sum

成集云 | 鼎捷ERP采购单同步钉钉 | 解决方案

源系统成集云目标系统 方案介绍 鼎捷ERP&#xff08;Enterprise Resource Planning&#xff09;是一款综合性的企业管理软件&#xff0c;它包括了多个模块来管理企业的各个方面&#xff0c;其中之一就是采购订单模块。鼎捷ERP的采购订单模块可以帮助企业有效管理和控制采购过程…

设计HTML5图像和多媒体

在网页中的文本信息直观、明了&#xff0c;而多媒体信息更富内涵和视觉冲击力。恰当使用不同类型的多媒体可以展示个性&#xff0c;突出重点&#xff0c;吸引用户。在HTML5之前&#xff0c;需要借助插件为网页添加多媒体&#xff0c;如Adobe Flash Player、苹果的QuickTime等。…

新一代分布式融合存储,数据场景All In One

1、摘要 2023年5月11日&#xff0c;浪潮信息全国巡展广州站正式启航。会上&#xff0c;重磅发布新一代分布式融合存储AS13000G7&#xff0c;其采用极致融合架构设计理念&#xff0c;实现同一套存储满足四种非结构化数据的“All In One”高效融合&#xff0c;数据存力提升300%&a…

专为茶叶品牌设计的美观小程序制作教程分享

茶叶是中国传统的饮品&#xff0c;拥有悠久的历史和丰富的文化内涵。而如今&#xff0c;随着互联网的快速发展&#xff0c;许多茶叶品牌也开始转向线上销售&#xff0c;以便更好地满足消费者的需求。为了方便茶叶品牌与消费者之间的互动&#xff0c;设计一个美观的小程序是必不…

vue + vue-office 实现多种文件(docx、excel、pdf)的预览

支持多种文件( docx、excel、pdf)预览的vue组件库&#xff0c;支持vue2/3。也支持非Vue框架的预览。 github: 《仓库地址》 演 示&#xff1a; 《演示效果》 功能特色 一站式&#xff1a;提供docx、pdf、excel多种文档的在线预览方案&#xff0c;有它就够了简单&#xff1a…

每天一个知识点——L2R

面试的时候&#xff0c;虽然做过医疗文献搜索&#xff0c;也应用过L2R的相关模型&#xff0c;但涉及到其中的一些技术细节&#xff0c;都会成为我拿不下offer永远的痛。也尝试过去理解去背下一些知识点&#xff0c;终究没有力透纸背&#xff0c;随着时间又开始变得模糊&#xf…

勘探开发人工智能技术:机器学习(6)

0 提纲 7.1 循环神经网络RNN 7.2 LSTM 7.3 Transformer 7.4 U-Net 1 循环神经网络RNN 把上一时刻的输出作为下一时刻的输入之一. 1.1 全连接神经网络的缺点 现在的任务是要利用如下语料来给apple打标签&#xff1a; 第一句话&#xff1a;I like eating apple!(我喜欢吃苹…

css3-flex布局:基础使用 / Flexbox布局

一、理解flex 二、理解Flex布局&#xff08;又称Flexbox布局&#xff09; Flex布局&#xff08;又称Flexbox布局&#xff09;是一种基于Web的CSS3布局模式&#xff0c;其目的是为了更加灵活和自适应地布置各种各样的网页元素。Flex布局通过将一个父容器分割为一个或多个弹性项…

spring cloud alibaba 应用无法注册到sentinel dashboard

一。技术背景 由于升级jdk17的需要 我们将项目中的 spring cloud spring cloud alibaba 以及springboot进行了升级 各版本如下 spring cloud 2021.0.5 spring cloud alibaba 2021.0.5.0 spring boot 2.6.13 二。问题表现 当启动项目服务后&#xff0c;服务无法注册到 sentin…

开发规范(一):Mysql篇

1. 流程 数据库表结构的修改需要相关人员和Leader一起评审&#xff0c;保证符合涉及规范。 不允许使用root账号&#xff0c;所有开发和测试应当分配指定账号&#xff0c;并授予最小数据库权限 2. 数据库与表规范 表命名规范 常规表表名以 t_开头&#xff0c;t 代表 table 的意思…

安卓逆向 - 某麦网 x-mini-wua x-sgext x-sign x-umt x-utdid

本文仅供学习交流&#xff0c;只提供关键思路不会给出完整代码&#xff0c;严禁用于非法用途&#xff0c;若有侵权请联系我删除&#xff01; 目标app: 5aSn6bqm572ROC41LjQ 目标接口&#xff1a;aHR0cHM6Ly9hY3MubS50YW9iYW8uY29tL2d3L210b3AuZGFtYWkud2lyZWxlc3MuZGlzY292ZX…

vue element 多图片组合预览

定义组件&#xff1a;preview-image <template><div><div class"imgbox"><divclass"preview-img":class"boxClass"v-if"Imageslist 3 ||Imageslist 5 ||Imageslist 7 ||Imageslist 8 ||Imageslist > 9"&…

IK分词器升级,MySQL热更新助一臂之力

ik分词器采用MySQL热更新 ​ 官方所给的IK分词器只支持远程文本文件热更新&#xff0c;不支持采用MySQL热更新&#xff0c;没关系&#xff0c;这难不倒伟大的博主&#xff0c;给哈哈哈。今天就来和大家讲一下如何采用MySQL做热更新IK分词器的词库。 一、建立数据库表 CREATE…