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多家领先的公司采用。

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

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

相关文章

【校招VIP】java语言考点之ConcurrentHashMap1.7和1.8

考点介绍: ConcurrentHashMap是JAVA校招面试的热门考点,主要集中在1.7和1.8的底层结构和相关的性能提高。 理解这个考点要从map本身的并发问题出发,再到hashTable的低性能并发安全,引申到ConcurrentHashMap的分块处理。同时要理解…

【C++】做一个飞机空战小游戏(八)——生成敌方炮弹(rand()和srand()函数应用)

[导读]本系列博文内容链接如下: 【C】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值 【C】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动【C】做一个飞机空战小游戏(三)——getch()函数控制任意造型飞机图标移动 【C】做一个飞…

SpringBoot中的可扩展接口

目录 # 背景 # 可扩展的接口启动调用顺序图 # ApplicationContextInitializer # BeanDefinitionRegistryPostProcessor # BeanFactoryPostProcessor # InstantiationAwareBeanPostProcessor # SmartInstantiationAwareBeanPostProcessor # BeanFactoryAware # Applicati…

炬芯科技发布全新第二代智能手表芯片,引领腕上新趋势!

2023年7月,炬芯科技宣布全新第二代智能手表芯片正式发布。自2021年底炬芯科技推出第一代的智能手表芯片开始便快速获得了市场广泛认可和品牌客户的普遍好评。随着技术的不断创新和突破,为了更加精准地满足市场多元化的变幻和用户日益增长的体验需求&…

Jmeter-压力测试工具

文章目录 Jmeter快速入门1.1.下载1.2.解压1.3.运行 2.快速入门2.1.设置中文语言2.2.基本用法 Jmeter快速入门 1s内发送大量请求,模拟高QPS,用以测试网站能承受的压力有多大 Jmeter依赖于JDK,所以必须确保当前计算机上已经安装了JDK&#xff0…

Android Shape 的使用

目录 什么是Shape? shape属性 子标签属性 corners (圆角) solid (填充色) gradient (渐变) stroke (描边) padding (内边距) size (大小…

CentOS系统环境搭建(三)——Centos7安装DockerDocker Compose

centos系统环境搭建专栏🔗点击跳转 Centos7安装Docker&Docker Compose 使用 yum 安装Docker 内核 [rootVM-4-17-centos ~]# uname -r 3.10.0-1160.88.1.el7.x86_64Docker 要求 CentOS 系统的内核版本高于 3.10 更新 yum yum update安装需要的软件包&#x…

在Windows Server 2008上启用自动文件夹备份

要在Windows Server 2008上启用自动文件夹备份,您可以使用内置的Windows备份功能。下面是如何设置它的方法: 1. 点击“开始”按钮并选择“服务器管理器”,打开“服务器管理器”。 2. 在“服务器管理器”窗口中,单击左侧窗格中的“…

Python学习笔记_基础篇(六)_Set集合,函数,深入拷贝,浅入拷贝,文件处理

1、Set基本数据类型 a、set集合,是一个无序且不重复的元素集合 class set(object):"""set() -> new empty set objectset(iterable) -> new set objectBuild an unordered collection of unique elements."""def add(self, *a…

redis-数据类型及样例

一.string 类型数据的基本操作 1.添加/修改数据 set key value2.获取数据 get key3.删除数据 del key4.添加/修改多个数据 mset key1 value1 key2 value25.获取多个数据 mget key1 key2二.list类型的基本操作 数据存储需求:存储多个数据,并对数据…

day 0815

计算文件有多少行? 2.文件的拷贝

SpringBoot引入外部jar打包失败解决,SpringBoot手动引入jar打包war后报错问题

前言 使用外部手动添加的jar到项目&#xff0c;打包时出现jar找不到问题解决 处理 例如项目结构如下 引入方式换成这种 <!-- 除了一下这两种引入外部jar&#xff0c;还是可以将外部jar包添加到maven中&#xff08;百度查&#xff09;--><!-- pdf转word --><…

前端代理配置

dev: {env: require(./dev.env),port: process.env.PORT || 8080,autoOpenBrowser: true,assetsSubDirectory: static,assetsPublicPath: /,proxyTable: {// 以 /party/fundamental/ 开头的请求&#xff0c;全部转发到 target 设置的地址/party/fundamental/: {// target: http…

Windows下升级jdk1.8小版本

1.首先下载要升级jdk最新版本&#xff0c;下载地址&#xff1a;Java Downloads | Oracle 中国 2.下载完毕之后&#xff0c;直接双击下载完毕后的文件&#xff0c;进行安装。 3.安装完毕后&#xff0c;调整环境变量至新安装的jdk位置 4.此时&#xff0c;idea启动项目有可能会出…

ATF bl1 ufshc_dme_get/set处理流程分析

ATF bl1 ufshc_dme_get/set处理流程分析 UFS术语缩略词1 ATF的下载链接2 ATF BL1 ufshc_dme_get/set流程3 ufs总体架构图3.1 UFS Top Level Architecture3.2 UFS System Model 4 ufshc_dme_get/set函数接口详细分析4.1 ufshc_dme_get4.2 ufshc_dme_set4.3 ufshc_send_uic_cmd4.…

nodejs+vue+elementui考研互助交流网站

语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;VScode 前端nodejsvueelementui,该系统采用vue技术和B/S结构进行开发设计&#xff0c;后台使用MySQL数据库进行数据存储。系统主要分为两大模…

java面试题(16):Mysql一致性视图是啥时候建立的

1 演示错误案例 先给大家来一个错误演示。 我们打开两个会话窗口&#xff0c;默认情况下隔离级别是可重复读&#xff0c;我们来看下&#xff1a; 首先在 A 会话中查看当前 user 表&#xff0c;查看完成后开启事务&#xff1a; 可以看到id3的数据sex是男。 接下来在 B 会话中…

K8S系列一:概念入门

写在前面 本文组织方式&#xff1a; K8S的架构、作用和目的。需要首先对K8S整体有所了解。 K8S是什么&#xff1f; 为什么是K8S&#xff1f; K8S怎么做&#xff1f; K8S的重要概念&#xff0c;即K8S的API对象。要学习和使用K8S必须知道和掌握的几个对象。 Pod 实例 Volume 数…

php错误类型与处理

1 语法编译错误&#xff0c;少了分号&#xff0c;这是系统触发的错误&#xff0c;不需要我们去管。 2 错误类型有四种&#xff1a;error致命错误&#xff0c;代码不会往下运行&#xff1b;warning&#xff1a;提醒错误&#xff0c;会往下运行&#xff0c;但是会有意想不到的结果…

【C++学习】STL容器——stack和queue

目录 一、stack的介绍和使用 1.1 stack的介绍 1.2 stack的使用 1.3 stack的模拟实现 二、queue的介绍和使用 2.1 queue的介绍 2.2 queue的使用 2.3 queue的模拟实现 三、priority_queue的介绍和使用 3.1 priority_queue的介绍和使用 3.2 priority_queue的使用 3.4 p…