拆解PowerApps - 请假申请 - 8
接上一节,在选择好日期并点击下一步按钮后,就会跳转到下面这个SelectApproverScreen界面,进行审批人的选择。
- 页面的总体布局如下图所示
可以看到,这个页面和上一节选择日期的页面很相似,都是由独立的控件组成,并且文本标签控件居多,感觉运行逻辑应该会比较简单,下面就一起来解析一下。
2. 控件解析
习惯性的看了一下Screen层面的设置,没发现有什么特别的设置,接下来就直接逐个分析17个子控件。
2.1 iconBackApproverScreen - 左上角的返回按钮
OnSelect = Back() //作为按钮来说,这个OnSelect通常是必设项。这里使用了最纯粹的返回。
2.2 LblHeaderAproverScreen - 页面的标题
Text = “Submit To” //也是最直接的设置
2.3 ImageLeaveTypeApproverScreen - 假期类型的图标
Image = If(_editingRequest, LookUp(LeaveTypeCollection, type = First(RequestEdit).LeaveType).icon, _selectedLeaveType.icon) //如果处于编辑页面,就从LeaveTypeCollection里查询相应的假期类型图标,否则就设置为所选假期类型的图标_SelectedLeaveType.icon
2.4 LblLeaveTypeApproverScreen - 假期类型的文字表示
Text = If(_editingRequest, First(RequestEdit).LeaveType, _selectedLeaveType.type)
2.5 LblCurrBalTextApproverScreen - 固定的文字标签
Text = "Current balance: "
2.6 ** LblCurrBalValApproverScreen** - 当前可用的假期天数
Text = LabelCurrentBalanceVal.Text //这里是本App用到的另一中在不同页面间传递数据的方式,通过控件的属性传递数据。这里用到的 LabelCurrentBallanceVal 是上一节选择日期页面里的一个文字标签,当时这个标签通过LookUp函数获取到了用户的可用假期天数。
2.7 ** LblNewBalTextApproverScreen** - 固定的文字标签
Text = “New balance:”
2.8 ** LblNewBalValApproverScreen** - 去掉此次申请的天数后剩余的可用天数
Text = LookUp(
RequesterBalanceCollection, Upper(type)=Upper(_selectedLeaveType.type), balance)
- _requestedDays & " days" //原有可用假期天数减去这次申请的天数
2.9 ** Rectangle9_6** - 页面的区域分割线
2.10 LblSubmitTo - 固定的文字标签
Text = “Submit request to”
2.11 ImageManagerProfile - 审批人头像
Image = _defaultApproverPhoto
2.12 LabelManagerName - 审批人姓名
Text = _defaultApprover.DisplayName
2.13 ButtonChangeManager - 更改审批人按钮
默认的,系统会自动获取申请人的直接主管作为审批人,如要更改审批人,可用点击这个按钮来更改。
设置了按钮的OnSelect 属性,点击后执行两个动作,跳转到SelectApproverPopup界面,同时把TextInputSearchFilter文本框初始化掉。
- OnSelect = Navigate(SelectApproverPopup, None);
- Reset(TextInputSearchFilter)
2.14 LabelManagerTitle - 审批人职位
Text = _defaultApprover.JobTitle
2.15/ 2.16 Rectangle9_12 / Ractangle9_7 - 页面的区域分割线
2.17 ButonNextApproverScreen - 底部的下一步按钮
Text = If(_editingRequest || _reviewRequest, “Save”, “Next”) //按钮可能会处于不同状态的页面里,如果是编辑或者查看页面,就用Save做按钮名,否则就用 Next。
OnSelect = If(_editingRequest, Navigate(EditRequestScreen, None), _reviewRequest, Back(), Navigate(LeaveDetailsScreen, None)) //根据页面的不同状态,跳转到不同的页面
本节解析到此结束,汇总一下其中用到的函数:
IF,Reset, Navigate, LookUp, Upper, Back,First,都是之前已经涉及到的。
我们下一节再见。。。