Mendix 基础审计模块介绍

news2024/11/25 3:04:46

一、前言

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

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

就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.coloradmin.cn/o/882012.html

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

相关文章

Ghost-free High Dynamic Range Imaging withContext-aware Transformer

Abstract 高动态范围(HDR)去鬼算法旨在生成具有真实感细节的无鬼HDR图像。 受感受野局部性的限制,现有的基于CNN的方法在大运动和严重饱和度的情况下容易产生重影伪影和强度畸变。 本文提出了一种新的上下文感知视觉转换器(CA-VIT)用于高动态…

UNIAPP中开发企业微信小程序

概述 需求为使用uni-app开发企业微信小程序。希望可以借助现成的uni-app框架,快速开发。遇到的问题是uni-app引入jweixin-1.2.0.js提示异常: Reason: TypeError: Cannot read properties of undefined (reading ‘title’)。本文中描述了如何解决该问题&#xff0c…

Python语法基础——循环

学习目标 通过使用while循环编写重复执行的语句。遵从循环的设计策略开发循环。利用用户的确认控制循环。用哨兵值控制循环。通过使用输入重定向从文件获取大量数据而不是从键盘输入来来获取大量数据,并且使用输出重定向将输出存人文件。使用for循环来实现计数器控制…

【资料包】HDC.Together 2023精选Codelabs指南现已上线(内有活动)

今年HDC.Together 2023的Codelabs挑战系列活动如期而至,众多开发者齐聚一堂,积极参与。本次赛题中部分Codelabs已在官网上线详细操作指南,让我们与众多coders一起探索代码的独特魅力。 01 ArkTS基础知识(ArkTS) 本课程…

Spring系列六:JdbcTemplate

🦒JdbcTemplate 📕实际需求 实际需求: 如果程序员就希望使用spring框架来做项目, spring框架如何处理对数据库的操作呢? 方案1: 使用前面做项目开发的JdbcUtils类方案2: 其实spring提供了一个操作数据库(表)功能强大的类JdbcTemplate. 我们可以同ioc…

目标和——力扣494

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

Paper 推荐第3期|隐私集合求交 PSI 系列

前言&#xff1a; 隐语 awesome-PETs&#xff08;PETs即Privacy-Enhancing Technologies &#xff0c;隐私增强技术&#xff09;精选业内优秀论文&#xff0c;按技术类型进行整理分类&#xff0c;旨在为隐私计算领域的学习研究者提供一个高质量的学习交流社区。awesome-PETs 包…

关于vant2 组件van-dropdown-item,在IOS手机上,特定条件下无法点击问题的探讨

情景重现 先贴有问题的代码 <template><div :class"showBar ? homeContain : homeContain-nobar"><div class"contant" id"content"><van-dialog v-model"loading" :before-close"onBeforeClose" :…

css鼠标样式 cursor: pointer

cursor: none; cursor:not-allowed; 禁止选择 user-select: none; pointer-events:none;禁止触发事件, 该样式会阻止默认事件的发生&#xff0c;但鼠标样式会变成箭头

openpose姿态估计【学习笔记】

文章目录 1、人体需要检测的关键点2、Top-down方法3、Openpose3.1 姿态估计的步骤3.2 PAF&#xff08;Part Affinity Fields&#xff09;部分亲和场3.3 制作PAF标签3.4 PAF权值计算3.5 匹配方法 4、CPM&#xff08;Convolutional Pose Machines&#xff09;模型5、Openpose5.1 …

【uniapp2】获取manifest里的versionName版本号

在要展示版本号的页面中添加&#xff1a; onLoad() {// 获取本地应用资源版本号plus.runtime.getProperty(plus.runtime.appid, (wgtinfo) > {this.innerVer wgtinfo.version;this.versionCode wgtinfo.versionCode;console.log(wgtinfo);});},打印看看获取的信息&#x…

机器学习---逻辑回归代码

1. 逻辑回归模型 import numpy as npclass LogisticRegression(object):def __init__(self, learning_rate0.1, max_iter100, seedNone):self.seed seedself.lr learning_rateself.max_iter max_iterdef fit(self, x, y):np.random.seed(self.seed)self.w np.random.normal…

视频汇聚平台EasyCVR安防监控视频汇聚平台的FLV视频流在VLC中无法播放的问题解决方案

众所周知&#xff0c;TSINGSEE青犀视频汇聚平台EasyCVR可支持多协议方式接入&#xff0c;包括主流标准协议国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。在视频流的处理与分发上&#xff0c;视频监控…

ESP8266获取网络时间 实时时钟

程序现象 一、用串口调试助手调试 1.发送指令ATRST重启模块使应用模式更改生效&#xff1b; 2.发送指令ATE0取消回显 3.使用串口发送指令ATCWMODE1设置模块Wi-Fi应用模式为Station模式&#xff1b; 4.发送指令ATCWJAP "ssid","pwd"连接AP&#xff1b; …

react-native-webview RN和html双向通信

rn登录后得到的token需要传递给网页&#xff0c;js获取到的浏览器信息需要传递给rn RN Index.js: import React from react import { WebView } from react-native-webview import useList from ./useListexport default function Index(props) {const { uri, jsCode, webVie…

23款奔驰S450 4MATIC升级车载冰箱系统,快乐就是这么朴实无华呀

凉爽餐饮随时触手可及。容积10升的可拆卸冷藏箱与后排扶手和谐融合。如此一来&#xff0c;即使在炎炎夏日&#xff0c;也可享受沁凉的冷饮。

Vue3头像(Avatar)

效果如下图&#xff1a;在线预览 APIs 参数说明类型默认值必传shape指定头像的形状‘circle’ | ‘square’‘circle’falsesize设置头像的大小number | ‘large’ | ‘small’ | ‘default’ | Responsive‘default’falsesrc图片类头像资源地址string‘’falsealt图片无法显…

关于微信临时文件wxfile://tmp文件如何处理,微信小程序最新获取头像和昵称

分享-2023年资深前端进阶&#xff1a;前端登顶之巅-最全面的前端知识点梳理总结&#xff0c;前端之巅 *分享一个使用比较久的&#x1fa9c; 技术栈&#xff1a;taro框架 vue3版本 解决在微信小程序获取微信头像时控制台报错&#xff1a;找不着wxfile://tmp 文件路径,失败&…

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

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