Mendix中级认证培训案例-Vacation Tracking

Vacation Tracking

一、用户角色:

  • Administrator

    image-20220824102023876
  • Employee:

    image-20220824102106766
  • Manager:

    image-20220824102128690
  • Guest:

    image-20220824102148822

二、UserManagement模块:

0、模块角色

  • Manager
  • Employee
  • Guest

1、Domain model

默认自带Administration模块中有Account实体。

需要给账号设置头像,系统默认自带Image实体。

  1. 1 创建ProfilePicture实体,继承Image实体,并与Account实体建立1对1关联
image-20220823175439651

1.2 在Account所在模块Domain Model中进行安全性更新

image-20220824091517125

2、账号管理页面

2.1 Overview

image-20220824092114357
  • ListView绑定数据库中Account实体。

  • Dynamic Image绑定Account实体关联的ProfilePicture实体。

  • Overview页面设置为对Manager可见。

  • 对Account实体设置Administrator角色(Administration模块内)权限:

    image-20220824094933484
  • 对ProfilePicture实体设置Manager角色(UserManagement模块内)权限:

    image-20220824095143275

2.1 新增用户

  • 复制Administration模块中的NewAccount微流,在其基础上为账号添加关联的头像实体并保存。

image-20220824093443980

  • 微流权限设置为Manager

2.2 编辑用户

  • 点击Edit按钮携带对应Account对象进入编辑页面,复用Administration模块中编辑用户页面Account_Edit,添加DataView展示ProfilePicture信息并提供图片上传功能。
image-20220824093825216
  • Account_Edit页面权限设置为Manager

2.3 删除用户

  • 在ListView中的一行数据中添加Delete按钮,On Click选择Delete。
image-20220824094239303

2.4 添加导航

image-20220824095953305

3、个人账号页面

3.1 修改个人信息

  • 对Account实体设置User角色(Administration模块内)设置权限:

    • 对所有User

      image-20220824101047162
    • 对于当前登录用户,可修改自身Account对象信息。Xpath约束:[id='[%CurrentUser%]']

      image-20220824101239359
  • 在导航栏添加修改个人信息的入口:

    image-20220824100352153
  • 复用Administration模块中ManageMyAccount微流。微流权限设置为Employee:

    image-20220824100513385
  • 复用Administration模块中MyAccount页面,添加存放ProfilePicture对象的DataView组件用于修改头像。页面权限设置为Employee:

    image-20220824100628923

4、匿名用户

4.1 匿名用户浏览页面

  • 开启匿名用户,为匿名用户分配角色:

    image-20220824101534148
  • 创建为匿名用户提供的浏览页面,页面权限设置为Guest:

    image-20220824101712321
  • 将默认主页设置为匿名用户访问页面,并为其他用户设置对应主页:

    image-20220824101827440

    image-20220824101912106

4.2 匿名用户注册

  • 创建用于存放注册信息的实体Registration,由于暂时使用选择Persistable-No:

    image-20220824102646635

  • 对Registration实体设置Guest角色(UserManagement模块内)权限:

    image-20220824102751335

  • 设置登录页面:

    image-20220824102317039
  • 创建用户注册微流及注册信息输入页面,微流及信息输入页面权限设置为Guest:

    • 点击注册按钮,创建Registration实体,打开信息输入页面:

      image-20220824103228203 image-20220824103300949
    • 完成信息输入,点击Save保存,触发用户创建微流,其中验证输入信息,创建Account对象并存储用户信息,并创建关联ProfilePicture对象:

      image-20220824103450208

三、VacationManagement模块:

0、模块角色

  • Manager
  • Employee

1、Domain model

  • 请假申请包含在VacationRequest实体中:

    image-20220824104721326
  • 一个请假申请中的日期区间可拆分为一个个请假日对象(1对多关系),在请假日对象中可以设置每日请假时长:

    image-20220824104912158
  • VacationRequest请假申请实体关联Account用户实体,涉及申请者和审批者两个属性,设置两个不同关联:

    image-20220824105236926

2、申请者

2.1 Overview

  • 创建页面,使用两个ListView组件,其中一个使用Xpath进行时间上的约束只展示未来的请假申请:

    image-20220824105504601 image-20220824105647339
  • 对VacationRequest设置Employee角色(VacationManagement模块内)权限:仅当该请假申请对应的申请者为当前用户时才可读可写,Xpath约束:[VacationManagement.VacationRequest_AccountRequestor='[%CurrentUser%]']

    image-20220824113550023

2.2 休假申请向导流程

  • 创建向导页面:

    • Step1:

      image-20220824105813510
    • Step2:

      image-20220824105835461
    • Step3:

      image-20220824105852996
  • 创建微流:

    • 第一页输入请假起止日期、类型、描述信息等,点击Next触发Step1微流:

      • 首先进行数据校验:日期非空,区间正确等
      • 根据起止日期区间,拆分每日创建VacationRequestDay对象:循环创建对象、解决往返操作后对象的重复创建(删除无用对象、创建对象前检查是否已创建)、根据请假日是周几确定当日请假时长
    • 第二页根据VacationRequest对象找到关联的VacationRequestDay对象并使用ListView展示,点击Next触发Step2微流:

      • VacationRequest对象找到关联的VacationRequestDay对象列表,使用Aggregate List节点进行聚合统计总请假时长,并存储在VacationRequest实体字段中
    • 第三页展示请假信息,用户确定后点击Submit提交触发Step3微流:

      • 改变VacationRequest的状态字段,并为当前VacationRequest对象设置审批者关联对象,提交保存。

3、审批者

3.1 Overview

  • 创建页面,使用Data Grid组件和数据源添加限制分页展示不同状态的请假申请。页面权限设置为Manager:

    image-20220824112644321 image-20220824112712929
  • 在Data Grid中添加Action按钮并设置为Default并绑定审批页面,使得双击一条数据时触发Action按钮并携带该条数据对象打开审批页面,页面权限设置为Manager:

    image-20220824112947495
  • 对VacationRequest实体设置Manager角色(VacationManagement模块内)权限:可读,仅可修改请假申请的状态

    image-20220824113739107

3.2 通过or拒绝

  • 在审批页面点击Approve或Reject按钮,触发审批通过或审批拒绝微流,微流中改变VacationRequest的状态并提交保存。微流权限设置为Manager。

四、Notification模块

0、模块角色

  • Manager
  • Employee

1、Domai model

  • 创建Notification通知实体:

    image-20220824140051565
  • 建立Notification与VacationRequest一对一关联,一个请假申请对应一个通知实体。建立Notification与Account一对多关联,一个通知实体既可以发给审批者也可以发给申请者:

    image-20220824140309538

2、页面内自定义菜单

  • 分别建立两个页面用于显示未读新消息和已读消息,共用一个自定义菜单,选择选项打开对应页面:

    image-20220824140500320 image-20220824140526705

3、新通知

  • 使用Data Grid展示通知,数据源使用Xpath过滤选择属于当前用户且未读的通知:[not(Read) and Notification.Notification_Account = '[%CurrentUser%]']

  • 标记已读:设置Data Grid中Default button打开编辑页面,选择Read触发微流改变当前Notification是否已读状态并保存刷新:

    image-20220824140839196 image-20220824140858986

4、已读通知

  • 使用Data Grid展示通知,数据源使用Xpath过滤选择属于当前用户且已读的通知:[Read and Notification.Notification_Account = '[%CurrentUser%]']
posted @ 2022-08-24 14:23  L-ZH  阅读(468)  评论(0编辑  收藏  举报