Mendix Excel导入组件的分析和应用

news2024/11/24 2:16:54

一、前言

企业在发展的过程中会使用各种各样的系统,其中很多系统用了5-10年,我们称之为遗留系统存在诸多风险:维护耗时、中断频繁、用户不友好、与新软件的兼容性问题等。总有一天,这些庞大的问题会垄断IT资源,使数字化转型过程变得更加复杂。同时我们也发现,很多企业的流程和业务场景还停留在线下使用各种office工具,没有落实到系统上。

现在解决现代化的遗留问题有一条捷径。低代码是一种可视化开发方法,可帮助组织构建自定义应用程序以补充或替换遗留系统。低代码平台通过提供各种编码技能水平的人都可以构建可随组织扩展和发展的关键业务应用程序的环境来快速跟踪开发。替换遗留系统或者将线下流程和场景迁移到线上,我们都可以称之为应用现代化。企业实现应用现代化是一项长期的任重道远的工作,后续我们会陆续发布关于应用现代化的文章,来看如何帮助企业实现应用现代化。

回到我们今天的主题,首先请大家思考一个问题,企业员工在日常工作中使用的最多的工具是什么?没错就是Excel,在日常工作中,Excel确实必不可少,在很多场景下都非常适合,但是Excel的过度使用也会带来各种问题。

二、需求分析

首先,我们来看一下下面的两个项目需求:

1.某汽车零配件工厂,Planner每周会去用Excel填报基于个人负责的物料的一整年的预测数量,以每个月为单位填报,填报销售预测的数量,工厂预计生产的数量,工厂预计发货的数量,财务审核的数量。填报完成之后,会根据物料的单价,汇率进行价格计算,同时根据不同的BU包括不同的产品线,不同产品线包括不同的Group,不同的Group包含不同的人员和物料,按照这样的层级关系,计算出BU,产品线,Group负责的物料的价格情况,同时会与上周,上上周的数据进行比较,如果发现某个月的数据以上周或上上周相比,差距比较多,需要报异常,提醒Planner做出备注。

同时管理层希望能随时灵活的查看各个BU,产品线,Group相关的数据。

管理员也需要定期从SAP导出基础数据,比如组织架构关系,成本数据,汇率等需要后续计算用到的数据,这些导出的数据都是以Excel的方式。

2.某电子厂商,工厂员工需要每天去用Excel填报工时,填报工时完成后上传,无论填报多少数据,只基于最后一行数据进行创建,并且创建的数据会去SAP查找是否匹配,如果不匹配则反馈需要修改数据,如果匹配则更新数据,更新数据时,首先基于产品号去查看是否已有数据,如果没有则新建数据,如果有则更新数据,并绑定上传的Excel到当前数据。其他旧的Excel则保存在服务器上。

报表查看不同的产品号的工时数据,且显示的工时数据都是最新数据,同时显示最新上传的相关的Excel,可以一键下载。

从上面两个项目需求我们可以看出有很多类似的地方,首先并没有改变普通员工的工作方式,无论是Planner还是工厂员工还是会通过Excel填报数据,只是在填报数据之后,会有非常多的计算和逻辑需要处理,如果这时还通过Excel的方式去做,我们可以看到在Case1里需要多个Excel表的数据进行合并计算,非常容易出错,其次每周填报数据就要计算,工作量非常大,且不易于版本管理,当发现计算错误后,也非常难去追溯。要注意,没有会有非常多的Planner和工厂员工去填报数据,再用Excel来实现后面的业务场景,这样的人力消耗是巨大的。

其次两个项目都有管理层查看报表的需求,而管理层更加希望能随时随地通过各种终端查看想要看到的数据,这也是通过Excel是无法满足的。

现在这两个需求,可以通过Mendix非常快速的实现,实现的整个过程不在我们本次讨论的范围,本次我们重点介绍如何通过Excel导入组件,将线下流程完美地迁移到线上。

三、Excel导入组件

组件下载

在Mendix Marketplace中输入Excel查找,找到Excel importer组件下载

找到Model Reflection 组件下载,为了配置 Excel 列和域模型之间的映射

 找到Community Commons Function Library组件安装,以确保可以导入 BigDecimal 值

下载这几个模块后,都可以在Marketplace module下找到。

导入模块后,将Templates_OverviewExcelImporter.ExcelImportOverview页面配置到导航栏。这是定义 Excel 映射的起点。

在我们正式开始之前先了解下Excel模板的各种定义,这有助于我们后续根据不同的业务场景来做配置。https://docs.mendix.com/appstore/modules/excel-importer/#413-header-row-nr

下面我们来开始如何导入一个Excel

导入 Excel 文档

1 简介

向应用程序添加大量数据(例如,引用数据或来自外部应用程序的数据)可能非常耗时。为了节省时间和精力,可以使用Excel导入组件来实现。在此操作指南中,将设置导入模板并使用此模块将数据导入应用程序。

2 先决条件

在开始此操作方法之前,请确保知道如何执行以下操作:

  • 创建领域模型(见配置领域模型)
  • 创建概述和详细信息页面(请参阅如何创建前两个概述和详细信息页面)
  • 创建导航栏(请参阅设置导航)
  • 创建微流(请参阅从菜单项触发微流
  • 保护您的应用程序(请参阅如何创建安全应用程序)

3 准备数据结构、GUI 和模块

在开始将数据导入应用程序之前,您首先需要按照以下步骤设置数据结构和 GUI:

1. 创建以下域模型:

OrderStatus属性创建一个枚举,其值为Open 、 ProcessingComplete 。

XLSFile对象配置为从FileDocument对象继承。

2. 创建概览详细信息页面以管理客户订单类型的对象。

3. 创建菜单项以访问订单客户概览页面。

4. 为ExcelImportOverviewMxObjects_Overview页面创建菜单项(这些页面已存在于下载模块的_USE_ME文件夹中)。

5. 将Administrator用户角色配置为具有ExcelImporter模块的Configurator模块角色,以及Mx 模型反射模块的ModelAdministrator模块角色。

4 准备数据导入的逻辑

因为枚举用于OrderStatus属性,所以您需要创建一个微流来根据 Excel 文件的输入确定属性的枚举值。如果导入数据没有枚举的情况,可以忽略此步骤。

1. 创建以下微流并将其命名为IVK_ParseStatus

2. 设置返回值如下:

if $Unformatted = 'open' then MyFirstModule.OrderStatus.Open

else if $Unformatted = 'processing' then MyFirstModule.OrderStatus.Processing

else if $Unformatted = 'complete' then MyFirstModule.OrderStatus.Complete

else MyFirstModule.OrderStatus.Complete

3. 保存微流。

5 在客户端使用应用程序模型元数据

为了设置用于导入数据的导入模板,您的应用程序模型元数据应该反映在客户端。这可以通过使用Mx 模型反射模块来实现。按照以下步骤执行此操作:

  1. 单击播放按钮(本地运行)以启动的应用程序。
  2. 单击查看应用程序以在浏览器中打开您的应用程序。
  3. 以管理员身份登录
  4. 在导航中单击MxObjects_Overview的菜单项。
  5. 通过选中左侧的框来选择包含要在客户中使用的对象的模块——在本例中为MyFirstModule
  6. 单击左侧 Synchronize all entities and microflows of checked modules 旁边的按钮。现在可以在客户端看到和使用来自MyFirstModule模块的两个对象和解析微流。

6 手动创建导入模板

在将 Excel 文件中的数据导入应用程序之前,必须设置导入模板。在此模板中,将配置数据应映射到的对象、对象是否与另一个对象关联、导入应从 Excel 文件的哪一行开始以及应导入哪些列。

将从一个简单的 Excel 文件示例中导入数据,该示例可在此处下载:

下载示例

根据要导入的文件的结构,需要按照以下步骤手动设置模板:

  1. 单击应用主页导航中的ExcelImportOverview菜单项。
  2. 点击新建模板

     3. 为模板命名。

     4. 单击Mendix对象框旁边的箭头。

     5. 双击客户对象:

     6. 单击“引用以导入对象”框旁边的箭头。

     7. 选择Customer_XLSFile关联。通过设置与 XLS 文件的关联,将 XLS 文件保存在磁盘上,并将导入的数据连接到源文件。

     8. 确保导入操作设置为同步对象

对于此示例,将使用一个简单的 Excel 文件,该文件在第一行只有一个工作表和列标题。如果使用更全面的 Excel 文件,可以通过Sheet nr 、 Header row nrImport from row nr字段更改这些值。

     9. 在将列连接到属性部分中,单击新建以创建从 Excel 工作表列到正确Mendix属性的映射。

     10. 添加与要映射的 Excel 文件中的列号对应的列号。

Excel 中第一列的编号为 0,第二列为 1,依此类推。

     11. 将 Excel 列标题定义为Caption值。

     12. 为类型选择属性

     13. 单击属性框旁边的箭头:

     14. 双击要将 Excel 值映射到的属性

     15. 对Customer对象的每个属性重复上述步骤 9 到 14。

  • 对于Name属性的映射,将Key值设置为Yes以防止重复客户。

 如果映射设置正确,则行前会出现一个绿色对勾。

     16. 现在需要为Order对象属性创建映射。但是,因为Order对象与Customer对象相关联,所以映射设置会略有不同。对Order对象的每个属性执行以下步骤:

  1. 添加与要映射的 Excel 文件中的列号对应的列号。
  2. 将 Excel 列标题定义为Caption值。
  3. 为类型选择参考
  4. 单击参考框旁边的箭头,您可以在其中选择将订单链接到客户的关联——在本例中应为 Order_Customer
  5. 单击属性框旁边的箭头,然后双击要将 Excel 值映射到的属性
  6. 对于属性Number的映射,将Key值设置为Yes,仅针对关联对象,以防止重复订单。
  7. 单击Save

     17. 对于OrderStatus属性的映射,需要将 Excel 文件值解析为枚举值。为此,您可以使用IVK_ParseStatus微流(在上面的准备数据导入逻辑部分中创建)。单击Parse with框旁边的箭头并选择IVK_ParseStatus微流:

     18. 保存导入模板。

6.1 导入 Excel 文件

现在模板已设置好,可以开始将数据从 Excel 文件导入到您的应用程序中。可以使用在上面的创建导入模板部分下载的示例文件。

按照以下步骤导入 Excel 文件:

  1. 单击应用主页导航中的ExcelImportOverview菜单项。
  2. 转到导入文件选项卡并单击新建:

   

     3. 选择刚刚创建的模板。

     4. 点击浏览

    

     5. 选择您下载的示例 Excel 文件,然后单击Save

     6. 单击Filename下的 Excel 文件将其选中,然后单击Import file

     7. 导入完成后单击确定

这样就完成了Excel数据导入,至于后续的逻辑处理就可以通过微流来实现,不在本次介绍的范围内。

四、应用展示

完成了Excel组件的配置后,让我们看看针对前面的两个客户需求的实际应用效果。

项目一

Excel上传模板

 Planner上传后生成的数据

 经过计算后的展现不同BU,产品线,Group的数据

通过Excel导入的主数据

项目二

工厂员工导入的Excel工时模板

填写表单然后上传Excel

最终数据展示

五、参考资料

  1. Excel组件 Marketplace介绍https://marketplace.mendix.com/link/component/72
  2. MX Model Reflection组件MarketPlace介绍https://marketplace.mendix.com/link/component/69
  3. Community Common组件介绍https://marketplace.mendix.com/link/component/170
  4. Excel导入具体文档参考https://docs.mendix.com/appstore/modules/excel-importer/#413-header-row-nr 和Import Excel Documents | Mendix Documentation

关于Mendix

Mendix,a Siemens business是全球企业级低代码的领导者,正在从根本上重塑数字化企业构建应用的方式。企业可通过Mendix低代码软件快速开发平台来扩展自身的开发能力,打破软件开发的瓶颈。借助Mendix开发平台,企业可以打造具备智能、主动性和人机互动等原生体验的智能化应用,对核心系统进行现代化升级并实现规模化应用开发,以跟上业务增长的速度。Mendix低代码软件快速开发平台可在保持最高安全、质量和治理标准的前提下,促进业务与IT团队之间的密切合作,大大缩短应用开发周期,帮助企业自信迈向数字化未来。Mendix的“Go Make It”平台已被全球4000多家领先公司采用。

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

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

相关文章

事物的属性与观察者有关吗?

我们通常对世界的看法是以分析和概念为基础的,我们倾向于将事物划分为各种相对的存在和概念。然而,有些领域超越了这种相对的观点,揭示了所有现象的无常性、空虚性和无自性,认识到它们的真实本质。如在人机环境系统中就认为&#…

【车载Android】多用户(一) - Linux用户与Android多用户

现如今手机这样的移动设备已经是人手一台了,但是汽车依然是以家庭为单位使用,不同的家庭成员对于汽车的使用存在着差异,比如空间、功能、影音风格等。因此,“智能汽车”需要具备千人千面的特性,能够适应不同的用户和场…

Linux中Makefile详细教程

目录 Makefile Makefile的介绍 Makefile简单的编写 .PHONY 问题: 如果只执行make,它执行的是Makefile里哪一段语句呢? 怎么知道我的可执行程序是最新的呢? Makefile编译多个文件 进度条小程序 Makefile Makefile的介绍 …

Acwing.860 染色法判定二分图(二分图染色法)

题目 给定一个n个点m条边的无向图,图中可能存在重边和自环。 请你判断这个图是否是二分图。 输入格式 第一行包含两个整数n和m。 接下来m行,每行包含两个整数u和v,表示点u和点v之间存在一条边。 输出格式 如果给定图是二分图&#xff0c…

openpnp - 汇川 Inovance IS620PS2R8I-IAB-C的参数读取

文章目录 openpnp - 汇川 Inovance IS620PS2R8I-IAB-C的参数读取概述笔记伺服和配套电机型号官方伺服调试软件笔记H00H01H02H03H04H05H06H07H08H09H0AH0BH0CH0DH0FH11H12H16H17H30H31自定义组备注END openpnp - 汇川 Inovance IS620PS2R8I-IAB-C的参数读取 概述 设备中用到了…

Enterprise:使用 MySQL connector 同步 MySQL 数据到 Elasticsearch

Elastic MySQL 连接器是 MySQL 数据源的连接器。它可以帮我们把 MySQL 里的数据同步到 Elasticsearch 中去。在今天的文章里,我来详细地描述如何一步一步地实现。 在下面的展示中,我将使用 Elastic Stack 8.8.2 来进行展示。 无缝集成:将 Ela…

两只小企鹅(Python实现)

目录 1 和她浪漫的昨天 2 未来的旖旎风景 3 Python完整代码 1 和她浪漫的昨天 是的,春天需要你。经常会有一颗星等着你抬头去看; 和她一起吹晚风吗﹖在春天的柏油路夏日的桥头秋季的公园寒冬的阳台; 这世界不停开花,我想放进你心里一朵&#…

docker 里面各种 command not found 总结

一、ip:command not found 执行命令: apt-get update & apt-get install -y iproute2 二、yum:command not found 执行命令: apt-get update & apt-get install -y yum 三、ping:command not found 执行命…

113、基于51单片机的智能电子密码锁控制系统设计(程序+原理图+PCB源文件+Proteus仿真+参考论文+开题报告+设计资料+焊接指导书+元器件清单等)

摘 要 在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。具有防盗报警等功能的电子密码锁代替密码量少、安全性差的机械式密码锁已是必然趋势。随着科学技术的不断发展,人们对日常生活中的安全保…

多元融合:流媒体传输网络的全盘解法

我们在寻找「网络」的全盘解法。 音视频数字化在消费领域的红利俨然见顶,而产业级视频应用激活了更多场景下的业务模式。与此同时,音视频客户也从单一的业务需求,趋向于多种业务并行存在的需求。 固有的网络能满足新兴的业态吗?延…

帧同步实现PuppetMaster布娃娃系统的问题

1)帧同步实现PuppetMaster布娃娃系统的问题 ​2)如何屏蔽Unity打包在IQOO安卓手机上出现一侧是黑边的现象 3)SLG或者策略游戏的联盟边界线是如何实现的 这是第343篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖…

Acwing算法基础 前缀和与差分

前缀和与差分 AcWing 795. 前缀和 import java.util.*; public class Main{public static void main(String[] args ){Scanner scnew Scanner(System.in);int nsc.nextInt();int msc.nextInt();int[] arrnew int[n1];arr[0]0;for(int i1;i<n;i) {arr[i]sc.nextInt()arr[i-1…

基于Java+Swing实现表白墙的效果

JavaSwingmysql员工工资管理系统 一、系统介绍二、功能展示1.效果展示 三、系统实现1.salary.java 四、其它系统五、获取源码 一、系统介绍 使用javaswing桌面编程技术实现的一个表白墙的效果 二、功能展示 1.效果展示 基于javaswing表白墙的效果 三、系统实现 1.salary.ja…

Python实现AdaBoost回归模型(AdaBoostRegressor算法)并应用网格搜索算法调优项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档代码讲解&#xff09;&#xff0c;如需数据代码文档代码讲解可以直接到文章最后获取。 1.项目背景 AdaBoost算法&#xff08;Adaptive Boosting&#xff09;是一种有效而实用的Boosting算法&#xff0c;…

C++ | 反向迭代器

目录 前言 一、基本框架 二、起始位置和结束位置 三、反向迭代器的自增与自减 四、反向迭代器的判断 五、list类的修改 六、单独设计反向迭代器类的意义 前言 反向迭代器实际上与我们前面的stack、queue、priority一样&#xff0c;都是适配器&#xff1b;我们可以通过正向…

国网技术学院MySQL课堂练习

一、数据库的安装和配置 在虚拟机中安装WINDOWS7操作系统 正常安装&#xff0c;查询安装教程即可安装必备组件和MYSQL5.7数据库 正常安装&#xff0c;查询安装教程即可修改my.ini配置文件中关于character_set的相关设置 直接补下面的代码即可&#xff0c;作用为设置默认的内…

Hudi基础知识讲解

Hudi概述 Hudi是一种数据湖的存储格式&#xff0c;在Hadoop文件系统之上提供了更新数据和删除数据的能力以及消费变化数据的能力。支持多种计算引擎&#xff0c;提供IUD接口&#xff0c;在 HDFS的数据集上提供了插入更新和增量拉取的流原语。 基础架构图 Hudi特性 ACID事务能…

将一个数组对象里的属性值全部追加到另外一个数组的对象里

介绍 将一个数组对象里的属性值全部追加到另外一个数组的对象里&#xff0c;这里需要使用到 map 遍历&#xff0c;循环数组&#xff0c;依次处理元素&#xff0c;实现重组数组对象 tips&#xff1a; map() 不会对空数组进行检测。 map() 不会改变原始数组。 Object.assign(),…

RocketMQ5.0消息存储<二>_消息存储流程

RocketMQ5.0消息存储<二>_消息存储流程 一、消息存储概览 如下图所示,是消息从生产者发送消息到消费者消费消息的大致流程。 step1:生产者发送消息到消息存储Broker端; step2:单一文件Commitlog存储所有主题消息,确保顺序写入,提高吞吐量; step3:消息通过堆外缓存,…

YOLOv5解析 | 第五篇:yolo.py文件解读

一、前言 文件位置:**./models/yolo.py** 这个文件是YOLOv5网络模型的搭建文件,如果你想改进YOLOv5,那么这么文件是你必须进行修改的文件之一。文件内容看起来多,其实真正有用的代码不多的,重点理解好我文中提到的一个函数两个类即可。 注:由于YOLOv5版本众多,同一个文件…