实操手册U1S1:Mendix敏捷开发零基础学习《三》
该章节的例子是基于【】和【】的需求和例子来讲解,此章为完结篇。
01
数据保护机制
(Prevention of Delete)
01
业务需求
因为系统管理员有删除活动的权限,但是如果有人已经报名了,误删就会导致数据丢失。所以,如果有已经报名的人员,不能删除活动。
02
业务分析
这个需求在Mendix可以非常容易地实现。
03
项目实现
1. 双击Domain Model数据模型,双击下图所示的关系线,在弹出的页面里,可以看到On delete of 'TrainingEvent 'object(当删除活动信息时触发那些操作)。序号1是删除活动信息时保留报名人员,序号2是删除活动信息时删除报名人员,序号3是当报名人员没有数据时可以删除。依据需求,选择序号3。
2. 选择好以后,输入提示信息,然后点击Ok按钮。
3. 因为需要在活动信息列表追加删除按钮,所以在目录树上双击TrainingEvent_Overview活动列表,在下图圆圈区域搜索button,找到Delete button组件拖入到页面。双击拖入的按钮Button,修改Caption选项(按钮名称)为新增,修改On click下拉框为Call a microflow,创建一个微流。
4. 保存项目并运行测试,可以看到该功能已经实现。
02
Mendix权限
(Security)
01
开启系统权限(ProtoType/demo)
双击左侧目录树,点击Project Security模块,选择ProtoType/demo(测试环境)开启系统的权限。当系统权限开启以后,每个模块下都会出现Security模块,Security模块控制每个用户具体可以进入课室的房间。
02
项目权限(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
该功能是密码设置规范。
03
模块权限(Module Security)
因为系统管理员有删除活动的权限,但是如果有人已经报名了,这时候删除,会导致数据丢失。所以甲方要求,如果有已经报名的人员,活动不能删除。
当ProjectSecurity(系统权限)开启以后,每一个模块下会有一个security(Module Security模块权限),该权限是控制那些角色可以访问课室。
3.1 菜单功能介绍
3.1.1 Module roles
模块角色,是展示当前模块下可以访问的所有角色,这里可以新增,编辑删除。
3.1.2 Page access
这里是设置哪些角色可以访问的页面。
3.1.3 Microflow access
这里设置哪些角色可以访问的Microflow微流。
04
项目配置
因为系统管理员有删除活动的权限,但是如果有人已经报名了,这时候删除,会导致数据丢失。所以甲方要求,如果有已经报名的人员,活动不能删除。
相信大家对Mendix在Security权限有哪些功能,现在一起实战操作一下。
项目需求
现在学校需要让老师、报名人员、和管理员访问不同的页面,实现权限划分。
需求分析
明确需求后,首先需要创建三个角色。
项目实现
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系统模块。
8. 创建完角色后就可以修改角色对应模块中的那些角色。首先看到Administrator管理员的角色,它对应的是模块MyFirstModule的Trainee,因此是不对的,点击Edit按钮进行修改。
9. 将Administrator选择对应所有模块下的管理员,然后点击OK-OK按钮完成选择。
10. 接着检查Teacher角色。
11. 检查Trainee角色。
12. 完成所有角色的创建后,可以开始设置角色的权限,双击模块下的Security,打开Page access页面,按照下图进行配置。管理员拥有所有的权限,Teacher可以查阅所有的详情页面Overview和活动页面,Trainee只能看到活动列表。配置好以后点击OK按钮。
13. 需要对应地配置Microflow access的权限,目前创建的Microflow都是关于写数据的一些操作,所以只需要管理员拥有这个权限就可以了,然后点击Ok按钮。
14. 配置好权限以后,运行项目预览一下,发现是需要进行登陆的。
15. 可以在Project Security下的Administrator中看到管理员的用户和密码。
16. 现在登陆一下,发现系统右侧会有一个小图标,点击它可以进行用户的切换。
17. 可以进行用户的切换,对比页面上有什么不同,可以发现demo_administrator是拥有新增按钮的,demo_user是没有新增按钮的。
18. 经过以上配置,可以发现还需要设置一个Trainee报名人员的用户角色。双击Project Security找到Demo users(演示用户)的页面,点击New按钮,在弹出的页面输入demo_trainee然后勾选Trainee角色,点击OK按钮完成用户创建。
19. 将demo_user修改为demo_teacher方便理解。
20. 保存所有操作,然后重新运行项目进行预览。选择demo_trainee用户,可以看到首页有很多的白框,需要进行美化。
21. 如何将白框跟角色进行绑定呢?首先点击首页Home_Web页面,选中拖入的Card卡片下图红圈内,注意不要选错了哦。然后双击打开,在visible选项点击Edit进行编辑。
22. 在弹出的页面选择Show the container for selected roles(只对勾选的角色进行展示)。
23. 然后将Trainee取消勾选显示,点击OK就可完成设置。
24. 依次将其余的设置好,设置好以后会出现绿条。
25. 然后重新运行项目进行预览,可以发现问题已经解决了。
26. 其实报名人员只需要看到报名页面就行,不需要展示主页。点击Navigation(系统设置),找到Role-based home pages(根据不同角色展示页面),然后点击Edit进行编辑,在弹出的页面选择New按钮新建规则。
27. 然后在弹出的页面选择Trainee角色,选择Select按钮。
28. 选中新建的规则,双击或者点击Select target来选择展示的首页。
29. 然后选择活动报名页面,点击Select->OK按钮,完成创建。
30. 然后重新运行项目进行预览,可以发现demo_trainee用户访问的是活动报名的页面。
05
开启系统权限(Production)
双击左侧目录树,点击Project Security模块,选择Production(生产环境)开启系统的权限。当系统权限开启以后,每个模块下都会追加对数据模型的管理!该功能基于Prototype/demo上更多是为了对数据的保护。
应用场景
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有新增和删除的权限,这里就不再详细展示。
03
用户新增
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. 然后重新运行项目进行预览,就可以直接在页面新增用户啦!
04
程序退出功能
1. 打开指定的目录,然后点击下图红圈内容(New item)创建一个导航页,输入名称为Sign Out,点击Select选择一个图标。
2. 选择好图标以后选择一个事件,系统会提供了一个Sign Out退出事件,所以直接选择即可,点击OK按钮保存操作。
3. 然后重新运行项目进行预览,发现有退出的导航栏了,点击按钮系统会自动的跳转到登陆页面。
05
调用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. 然后双击规则,将之前传入的参数Znumber改为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. 输入以下代码,并保存。
24.接着回到Medix开发工具中,选择project菜单下的Synchronize Project Directory(同步本地的文件)。
25. 然后运行项目进行测试,已经能实现之前的效果啦!
06
调用外部接口
1. 首先需要创建一个Microflow微流。
2. 在弹出窗口输入微流的名称Home_posts。
3. 然后打开创建的微流,拖入一个Activity事件,然后双击选择Call REST service,点击Select按钮。
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中:
7. 然后先定义mapping,点击Select按钮。
8. 点击New按钮新建。
9. 直接点击OK->OK按钮。
10. 在目录树中找到刚才创建的mapping,然后双击,点击左上角的select elements选择mapping。
11. 点击New按钮新创建一个。
12. 然后点击OK按钮。
13. 在弹出的页面输入请求过后的响应体,可直接复制下方,复制好以后点击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”
}
14. 接着需要将所有的信息进行返回,点击Check all按钮选中所有,然后点击OK按钮。
15. 创建好以后需要与数据模型进行关联,然后点击下图的按钮进行自动创建并关联,点击close按钮。
16. 系统会自动创建一个内存缓存数据模型。
17. 同样在数据模型工作台中,也可看到创建的这个临时Root数据模型。
18. 接下来点击微流,然后双击报错信息,点击OK按钮,进行设置。
19. 这时候需要输出相应体,然后在Store in variable 选择Yes按钮,输入返回的实体名称responseJson,点击OK按钮。
20. 双击结束按钮,在弹出的页面选择Object。
21. 选择返回的数据模型,点击Select按钮。
22. 然后选择新创建的Root,点击Select按钮。
23. 然后赋值为刚创建的那个输出参数,点击OK按钮。
24. 需要在页面展示,点击Add page 新创建一个页面。
25. 创建一个空白的页面,命名为Home_posts,然后点击OK按钮。
26. 拖入一个Data view组件,并右击选择数据源。
27. 需要注意一点的是先选择Microflow微流,然后点击Select按钮
28. 然后选择微流,点击select->OK按钮。
29. 选择Yes,根据数据模型自动展示。
30. 删除不需要的按钮。
31. 需要模块的配置权限,在Page access配置Admin可见。
32. 在Microflow配置admin可用。
33. 在Entity access 配置管理员有创建删除、可读可写的权限,然后点击OK按钮。
34. 配置好权限以后点击OK按钮。
35. 在首页配置一个入口,直接复制下图圆圈中的组件。
36. 然后拖入页面,直接拖就可以。
37. 然后运行项目进行测试,接口的静态调用已实现。
关于Mendix
Mendix,a Siemens business是全球企业级低代码的领导者,正在从根本上重塑数字化企业构建应用的方式。企业可通过Mendix低代码软件快速开发平台来扩展自身的开发能力,打破软件开发的瓶颈。借助Mendix开发平台,企业可以打造具备智能、主动性和人机互动等原生体验的智能化应用,对核心系统进行现代化升级并实现规模化应用开发,以跟上业务增长的速度。Mendix低代码软件快速开发平台可在保持最高安全、质量和治理标准的前提下,促进业务与IT团队之间的密切合作,大大缩短应用开发周期,帮助企业自信迈向数字化未来。Mendix的“Go Make It”平台已被全球4000多家领先公司采用。