Mendix敏捷开发零基础学习《三》-高级 (数据删除保护机制、数据关联删除、Security安全、调用外部接口、调用JAVA代码)
邵群超
2021.05.25 15:21发布于技术 - 新手入门
1.47k10

@TOC

Mendix敏捷开发零基础学习《三》

一、 数据保护机制(Prevention of Delete)

1.业务需求

因为系统管理员有删除活动的权限,但是如果有人已经报名了,这时候删除,会导致数据丢失。所以甲方要求,如果有已经报名的人员,活动不能删除。

2.业务分析

这个需求在Mendix可以非常方便的实现。我给操作一下。

3.项目实现

  1. 我们双击Domain Model数据模型,双击下图所示的关系线,在弹出的页面我们可以看到On delete of 'TrainingEvent 'object(当删除活动信息时触发那些操作)。序号1是删除活动信息时保留报名人员,序号2是删除活动信息时删除报名人员,序号3是当报名人员没有数据时可以删除。按照需求我们选择序号3。 在这里插入图片描述
  2. 选择好以后,他会让我们输入提示信息。我们输入好以后点击Ok按钮。就可以了。 在这里插入图片描述
  3. 我们需要在活动信息列表追加删除按钮,我们在目录树上双击TrainingEvent_Overview活动列表,然后在下图圆圈区域搜索button,然后找到Delete button组件拖入到页面。 在这里插入图片描述
  4. 我们保存项目并运行测试,看效果。可以看到该功能已经实现了。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

二、Mendix权限(Security)

1、 开启系统权限ProtoType/demo

双击左侧目录树,点击Project Security模块。我们选择ProtoType/demo(测试环境)开启系统的权限。当系统权限开启以后,每个模块下都会出现Security模块,Security模块控制每个用户具体可以进入那栋楼的那个房间!在这里插入图片描述

2、 项目权限(Project Security)

ProjectSecurity(系统权限)代表一个小区,可以管理那些用户访问具体的那栋楼。 在这里插入图片描述

2.1 菜单功能介绍

2.1.1 Module status

该功能控制系统所有模块中的功能(Page access页面、Nanoflow access原生模板移动端、Microflow access微流、Entity access数据模型,Data set access数据等)是否开启权限控制。 在这里插入图片描述

2.1.2 User roles

所有的角色,可以细分,新建的时候可以控制管理那些模块。就是设置用户可以访问那栋楼。 在这里插入图片描述

2.1.3 Administrator

该菜单是设置超级管理员的用户名和密码。这里我默认设置用户名MxAdmin密码1 在这里插入图片描述

2.1.4 Demo users

Demo users是测试环境下有那些用户,这里可以新增用户分配角色,我们可以在下边测试的时候用到。 在这里插入图片描述

2.1.5 Anonymous users

匿名用户(就是可以不登陆,浏览的东西,如果开启以后需要分配一个角色Role) 在这里插入图片描述

2.1.6 Password policy

该功能是密码设置规范。 在这里插入图片描述

3、 模块权限(Module Security)

当ProjectSecurity(系统权限)开启以后,每一个模块下会有一个security(Module Security模块权限),该权限是控制那些角色可以访问那些房间。 在这里插入图片描述

3.1 菜单功能介绍

介绍一些常用的模块。其余不常用的这里就不介绍了。以后有用到的话可以自己看官方文档。

3.1.1 Module roles

模块角色,是展示当前模块下可以访问的所有角色,这里可以新增,编辑删除。 在这里插入图片描述

3.1.2 Page access

这里是设置那些角色可以访问那些页面。 在这里插入图片描述

3.1.3 Microflow access

这里设置那些角色可以访问那些Microflow微流。 在这里插入图片描述

4、 项目配置

通过以上两个章节,我们大概了解了Mendix对Security权限有那些功能,现在我们实战操作一下。

4.1 项目需求

现在学校想着让老师、报名人员、和管理员访问不同的页面。实现权限划分。

4.2 需求分析

需求明确了,那我们首先需要创建三个角色。

4.3 项目实现

  1. 我们开始实现,首先我们点开模块权限(Module Security),然后点击New创建角色。 在这里插入图片描述

  2. 在弹出的页面输入Name为Admin然后点击Ok按钮。我这里只展示如何创建角色,其余角色创建步骤都一样。还需要创建Teacher(老师)和Trainee(报名人员)。 在这里插入图片描述

  3. 创建完Teacher老师角色以后,我们将User角色修改为Trainee。 在这里插入图片描述

  4. 最终创建好三个模块权限(Module Security)角色 在这里插入图片描述

  5. 创建好模块权限(Module Security)角色以后,我们需要在项目权限(Project Security)创建同样的三种角色。双击Project Security,然后打开User roles,我们可以看到已经有两个角色权限,Administrator就是我们模块里对应的admin角色。所以管理员角色就不用我们创建了。 在这里插入图片描述

  6. 然后我们将User权限修改为Teacher角色。选中User点击Edit按钮,在弹出的页面修改Name为Teacher,然后点击Ok按钮。完成修改。 在这里插入图片描述

  7. 然后我们需要再创建一个报名人员的角色Trainee,点击New按钮,在弹出的页面修改Name为Trainee,其中Create module role in modules是询问我们是否需要在模块权限中创建相同的角色,因为我们刚开始已经创建了,所以这时候就取消勾选就可以了。如果刚开始在Project Security中创建角色模块中就不用创建了(便利性)。然后点击Ok按钮就可以了。

     MyFirstModule是我们创建的模块、Administration和Atles_UI_Resources是Mendix系统模块。
    

在这里插入图片描述

  1. 创建好角色以后我们开始修改角色对应模块中的那些角色。我们先看Administrator管理员的角色,可以看到它对应的是我们模块MyFirstModule的Trainee所以是不对的,我们点击Edit按钮进行修改。 在这里插入图片描述
  2. 我们将Administrator选择对应所有模块下的管理员。然后点击Ok-Ok按钮完成选择。 在这里插入图片描述 在这里插入图片描述
  3. 接着我们检查Teacher角色 在这里插入图片描述 在这里插入图片描述
  4. 检查一下Trainee角色 在这里插入图片描述 在这里插入图片描述
  5. 到这一步,我们完成所有角色的创建了。我们开始设置角色的权限,双击模块下的Security,然后打开Page access页面,按照下图进行配置。管理员是拥有所有的权限,Teacher是可以看到所有的详情页面Overview和活动页面。Trainee是只能看到活动列表。配置好以后点击Ok按钮。 在这里插入图片描述
  6. 我们对应的需要配置一下Microflow access的权限,应该目前我们创建的Microflow都是关于写数据的一些操作,所以我们只需要管理员拥有这个权限就可以了。然后点击Ok按钮就可以了。 在这里插入图片描述
  7. 配置好权限以后,我们运行项目开始预览一下,我们可以发现是需要我们进行登陆的。 在这里插入图片描述
  8. 我们可以在Project Security下的Administrator中看到管理员的用户和密码。 在这里插入图片描述
  9. 我们现在可以登陆一下,发现系统右侧会有一个小图标,我们点击它可以进行用户的切换。 在这里插入图片描述 在这里插入图片描述
  10. 我们可以进行用户的切换,对比页面上有什么不同。我们可以发现demo_administrator是拥有新增按钮的,demo_user是没有新增按钮的。 在这里插入图片描述 在这里插入图片描述
  11. 经过以上配置,我们可以发现还需要设置一个Trainee报名人员的用户角色,我们来设置一下。我们双击Project Security找到Demo users(演示用户)的页面,点击New按钮,在弹出的页面输入demo_trainee然后勾选Trainee角色,点击Ok按钮完成用户创建。 在这里插入图片描述
  12. 我们将demo_user修改为demo_teacher方便理解。 在这里插入图片描述
  13. 保存所有操作,然后我们重新运行项目进行预览。选择demo_trainee用户,我们可以看到首页有很多的白框。很不美观。 在这里插入图片描述
  14. 那如何将白框跟角色进行绑定呢?我来操作一下。首先点击我们首页Home_Web页面。然后选中我们拖入的Card卡片下图红圈内,注意不要选错了。然后双击打开,在visible选项点击Edit进行编辑。 在这里插入图片描述
  15. 在弹出的页面选择Show the container for selected roles(只对勾选的角色进行展示)。 在这里插入图片描述
  16. 然后将Trainee取消勾选显示,点击Ok就完成设置了。 在这里插入图片描述
  17. 我们依次将其余的设置好,设置好以后会出现绿条。 在这里插入图片描述
  18. 然后我们重新运行项目进行预览。可以发现问题已经解决了。 在这里插入图片描述
  19. 我们发现其实报名人员只需要看到报名页面就行,不需要展示主页。那我来设置一下,点击Navigation(系统设置),然后找到Role-based home pages(根据不同角色展示页面),然后点击Edit进行编辑,在弹出的页面选择New按钮新建规则。 在这里插入图片描述
  20. 然后在弹出的页面选择Trainee角色,然后选择Select按钮。 在这里插入图片描述
  21. 然后选中新建的规则,双击或者点击Select target来选择展示的首页。 在这里插入图片描述
  22. 然后我们选择活动报名页面,然后点击Select->OK按钮。完成创建 在这里插入图片描述 在这里插入图片描述
  23. 然后我们重新运行项目进行预览。可以发现demo_trainee用户访问的直接是活动报名的页面。 在这里插入图片描述

5、 开启系统权限Production

双击左侧目录树,点击Project Security模块。我们选择Production(生产环境)开启系统的权限。当系统权限开启以后,每个模块下都会追加对数据模型的管理!其实该功能基于Prototype/demo上更多的是为了开始对数据的保护在这里插入图片描述

5.1 应用场景

  1. 点击左侧目录树中等个Security,然后选择Production点击Ok按钮。打开Production权限。 在这里插入图片描述
  2. 这时候你就会发现在你的模块权限中会增加Entity access(数据模型)。同样的可以看到我们错误信息中也会有57个错误,是因为我们没有配置角色对数据模型的关系。所以会报错。 在这里插入图片描述 在这里插入图片描述
  3. 我们现在来配置一下用户和数据模型之间的关系,我们先创建Admin的角色与数据模型的关系。点击New按钮,然后选择全部,然后点击Ok按钮。 在这里插入图片描述
  4. 在弹出的页面我们选择Admin角色,因为Admin角色是可以访问所有并有读写创建删除权限的,序号1是可以创建所有实体,序号2是可以删除所有实体(因为开发工具的BUG导致序号2展示不全,我们只需要点一下他就勾选了),序号3代表的是读写权限(Nono代表没有读写权限、Read代表只读权限)然后点击OK按钮。完成此操作 在这里插入图片描述
  5. 我们再创建一下Teacher老师的角色,点击New按钮,选择所有,然后点击Ok按钮。 在这里插入图片描述
  6. 因为老师只有读的权限,没有写的权限,所以我们只勾选Read(只读)然后点击OK按钮。 在这里插入图片描述
  7. 学生也是只有读的权限,没有写的权限。所以跟老师的设置是一样的。 在这里插入图片描述 在这里插入图片描述
  8. 然后我们重新运行项目进行预览。可以发现demo_trainee和demo_teacher用户访问的所有页面都没有新增和删除的操作了。只有demo_administrator有新增和删除的权限。这里就不做演示了。

三、用户新增

经过以上操作我们发现,用户新增需要在开发工具中很麻烦,我们能不能在页面上新增用户呢?答案:可以的。Mendix有一套自己的用户新增页面。我们可以直接拿过来用,很方便的。我开始操作一下。

  1. 首先找到我们程序的Home_Web(主页面),然后选中TrainingEvent的card(卡片)组件,复制,粘贴。并双击打开。 在这里插入图片描述
  2. 我们双击刚复制的Card(卡片),然后点击编辑Edit,让他只能管理员看见。 在这里插入图片描述
  3. 选择Show the container for selected roles,然后只让管理员看见,然后点击OK->Ok按钮。 在这里插入图片描述 在这里插入图片描述
  4. 然后我们修改名称为AddUser。 在这里插入图片描述
  5. 修改图标。 在这里插入图片描述
  6. 以上操作修改完毕以后。开始我们的最关键一步,也是最简单的一步。看好了各位!!!找到对应目录下的Account_Overview(用户管理页面),直接拖到图标和文字中。 在这里插入图片描述
  7. 然后我们重新运行项目进行预览。可以发现可以新增用户了。该功能大功告成。 在这里插入图片描述 在这里插入图片描述

四、程序退出功能

  1. 打开指定的目录,然后点击下图红圈内容(New item)创建一个导航页,然后输入名称为Sign Out,点击Select我们选择一个图标。 在这里插入图片描述 在这里插入图片描述
  2. 选择好图标以后我们选择一个事件,系统给我们提供了一个Sign Out退出事件,所以我们直接选他就可以了,点击Ok按钮保存操作。 在这里插入图片描述 在这里插入图片描述
  3. 然后我们重新运行项目进行预览。可以发现有退出的导航栏了,点击按钮系统会自动的跳转到我们的登陆页面。 在这里插入图片描述 在这里插入图片描述

五、调用JAVA代码

  1. 我们可以回到我们的项目中,双击我们之前创建的ACO_Ade_Registration_SetNubOfRegi用来数报名人数的微流,然后拖入一个Activity事件,将之前的Count事件删除。 在这里插入图片描述

  2. 删除以后,我们双击刚才拖入的事件,然后选择Java action call然后点击Select按钮。 在这里插入图片描述

  3. 我们选择一个Java action。点击Select按钮 在这里插入图片描述

  4. 这时候我们发现没有javaAction,所以我们重新创建一个点击New按钮。 在这里插入图片描述

  5. 在弹出的页面输入java Action名称为Java_list_count然后点击Ok按钮。 在这里插入图片描述

  6. 这时候开发工具会跳转到我们刚才创建的那个java action,我们只需要点击Ok按钮。 在这里插入图片描述

  7. 然后我们需要添加参数,方便在java中处理。点击Add按钮。 在这里插入图片描述

  8. 在弹出的页面我们在Type中选择List。 在这里插入图片描述

  9. 然后Select选择我们需要数的数据模型。 在这里插入图片描述

  10. 然后选择Registration(报名人员)数据模型,然后点击Select->Ok按钮。 在这里插入图片描述 在这里插入图片描述

  11. 然后我们需要返回一个参数,我们定义返回的参数为Integer/Long类型的数据。 在这里插入图片描述

  12. 设置好以后回到我们的微流,双击java action。 在这里插入图片描述

  13. 这时候会报错,我们不用管点击Ok按钮即可(说的是我们没有设置传入的参数)。 在这里插入图片描述

  14. 我们设置传入的参数为$RegistrationList。 在这里插入图片描述

  15. 然后将返回的值命名为listCount,然后点击Ok按钮。完成设置。 在这里插入图片描述

  16. 然后我们双击最后的报错节点。 在这里插入图片描述

  17. 然后双击我们的规则,将之前传入的参数Z$number改为$listCount,然后点击Ok->Ok按钮。 在这里插入图片描述 在这里插入图片描述

  18. 然后我们保存一下项目,点击菜单栏的Project中的Deploy for Eclipse来生成JAVA代码。 在这里插入图片描述

  19. 提示下列消息证明Java代码生成完毕,点击Ok按钮。 在这里插入图片描述

  20. 生成完毕以后我们去找一下我们对应的代码,点击Project菜单找到Show project Directory in Explorer(在电脑目录中打开我们的项目文件夹) 在这里插入图片描述

  21. 在弹出的目录窗口我们可以看到javasource,我们打开javasource找到我们的模块myfirstmodule然后打开actions目录(该目录存放我们所有的javaAction),可以看到系统给我们创建的java类Java_list_count.java 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

  22. 然后我们右击用Idea打开(用其他工具打开也可以),我们在注释的地方写我们的代码。 在这里插入图片描述

  23. 输入以下代码,并保存。

    return Long.valueOf(__Parameter.size());
    

在这里插入图片描述

  1. 然后我们回到Medix开发工具中,我们选择project菜单下的Synchronize Project Directory(同步本地的文件) 在这里插入图片描述
  2. 然后我们运行项目进行测试。发现已经实现我们之前的效果了。该功能到此就结束了。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

六、调用外部接口

  1. 首先我们需要创建一个Microflow微流。 在这里插入图片描述

  2. 在弹出窗口输入微流的名称Home_posts。 在这里插入图片描述

  3. 然后打开创建的微流,我们拖入一个Activity事件,然后双击选择Call REST service,然后点击Select按钮 在这里插入图片描述

  4. 在弹出的页面我们编辑调用的连接地址。 在这里插入图片描述

  5. 输入连接地址,然后点击OK按钮。

     https://jsonplaceholder.typicode.com/posts/1
    

在这里插入图片描述 6. 然后其余的我们就不用操作,只处理Response,我们在Response handling选择Apply import mapping方式。

  • Do not store in a vaiable(只调用不处理)
  • Store in a String(将调用结果存入一个字符串里)
  • Store in a file document(将调用结果存在文件里)
  • Store in an HTTP response(将调用结果存在response数据结构中)
  • Apply import mapping(将调用结果存入到内存中的Json对象)。我们选择存入到一个json中 在这里插入图片描述
  1. 然后我们需要先定义mapping,点击Select按钮。 在这里插入图片描述

  2. 点击New按钮新建。 在这里插入图片描述

  3. 然后直接点击Ok->Ok按钮。 在这里插入图片描述 在这里插入图片描述

  4. 然后我们在目录树中找到我们刚才创建的mapping然后双击,点击左上角的select elements选择我们的mapping。 在这里插入图片描述

  5. 我们点击New按钮新创建一个。 在这里插入图片描述

  6. 然后点击Ok按钮。 在这里插入图片描述

  7. 然后在弹出的页面输入请求过后的响应体,我这边就直接罗列在下方。可直接复制,复制好以后点击Refresh按钮刷新一下,Mendix开发工具会自动的将响应体解析出来。然后点击Ok完成创建。

    { "userId": 1, "id": 1, "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto" }

在这里插入图片描述

  1. 我们需要将所有的信息进行返回,点击Check all按钮选中所有,然后点击Ok按钮。 在这里插入图片描述
  2. 创建好以后我们需要与我们的数据模型进行关联,然后点击下图的按钮进行自动创建并关联,点击close按钮。 在这里插入图片描述 在这里插入图片描述
  3. 系统会自动的为我们创建一个内存缓存数据模型。 在这里插入图片描述
  4. 我们同样的也可以在我们的数据模型工作台中看到创建的这个临时Root数据模型。 在这里插入图片描述
  5. 杰西莱我们需要点击我们的微流,然后双击报错信息。点击Ok按钮,进行设置。 在这里插入图片描述
  6. 这时候我们需要输出相应体,然后在Store in variable 选择Yes按钮,输入返回的实体名称responseJson,然后点击Ok按钮。

在这里插入图片描述

  1. 我们双击结束按钮,在弹出的页面我们选择Object。 在这里插入图片描述
  2. 然后选择返回的数据模型,点击Select按钮。 在这里插入图片描述
  3. 然后选择新创建的Root,点击Select按钮。 在这里插入图片描述
  4. 然后给他赋值为我们刚创建的那个输出参数。点击Ok按钮。 在这里插入图片描述
  5. 我们这个时候需要在页面展示,所以点击Add page 新创建一个页面。 在这里插入图片描述
  6. 我们创建一个空白的页面,命名为Home_posts,然后点击Ok按钮。 在这里插入图片描述
  7. 拖入一个Data view组件。并右击选择数据源。 在这里插入图片描述 在这里插入图片描述
  8. 这时候需要注意,我们要选择Microflow微流,然后点击Select按钮。

在这里插入图片描述

  1. 然后选择我们的微流,点击select->Ok按钮。 在这里插入图片描述 在这里插入图片描述
  2. 我们选择Yes,根据数据模型自动展示。 在这里插入图片描述
  3. 删除不需要的按钮。 在这里插入图片描述
  4. 我们现在需要模块的配置权限,在Page access配置Admin可见。 在这里插入图片描述
  5. 在Microflow配置admin可用。 在这里插入图片描述
  6. 我门在Entity access 配置管理员可以创建删除,可读可写的权限。然后点击Ok按钮。 在这里插入图片描述 在这里插入图片描述
  7. 配置好权限以后我们点击Ok按钮。 在这里插入图片描述
  8. 我们在首页配置一个入口,直接复制下图圆圈中的组件。 在这里插入图片描述
  9. 然后拖入我们的页面,直接拖就行。 在这里插入图片描述
  10. 然后我们运行项目进行测试。发现已经实现接口的静态调用了。该功能到此就结束了。 在这里插入图片描述 在这里插入图片描述
红猪、作者在、邵群超、uliuw137
点赞
收藏
手机查看
举报
10个回复
倒序看帖
仅看楼主
楼层直达
    邵群超
    2021.05.25 16:05 发布
    楼主
    #1

    测试评论自己是否给积分

    作者在
    点赞
    回复
    举报
    邵群超
    回复
    邵群超
    2021.05.25 16:07 发布
    楼主

    测试结果是给积分的!

    作者在
    点赞
    回复
    举报
    邵群超
    回复
    邵群超
    2021.05.25 16:07 发布
    楼主

    那无限评论是不是就无限给积分啊

    作者在
    点赞
    回复
    举报
    邵群超
    回复
    邵群超
    2021.05.25 16:07 发布
    楼主

    好像是的

    作者在
    点赞
    回复
    举报
    邵群超
    回复
    邵群超
    2021.05.25 16:07 发布
    楼主

    那这是一个bug啊

    作者在
    点赞
    回复
    举报
    邵群超
    回复
    邵群超
    2021.05.25 16:08 发布
    楼主

    还挺好玩的哈

    作者在
    点赞
    回复
    举报
    邵群超
    回复
    邵群超
    2021.05.25 16:08 发布
    楼主

    😎

    作者在
    点赞
    回复
    举报
    作者在
    回复
    邵群超
    2021.05.25 18:42 发布

    好家伙,哈哈哈🤣

    作者在
    点赞
    回复
    举报
    邵群超
    回复
    作者在
    2021.05.26 14:07 发布
    楼主

    哈哈哈哈

    首赞
    回复
    举报
    邵群超
    2021.05.25 16:10 发布
    楼主
    #2

    欢迎大家点评😎

    作者在、b52773618410
    点赞
    回复
    举报