拆解PowerApps - 请假申请 -3

上一节分析了App运行后的主界面 LoginScreen。

这一节我们一起来解构请假申请App 的“主页” - HomeScreen。

1. HomeScreen 的总体结构如下图所示
这个屏幕包含了11个控件,其中有些控件初始状态因为没有数据是看不到的。

2. 逐个来看各个控件

2.1. 最高层的HomeScreen  

主要设置了:OnVisible =  // OnVisible,顾名思义,这里的设置就是用来定义页面在展示出来的时候需要执行的一些动作。 
Concurrent(     //同时计算多个函数,语法:Concurrent( Formula1, Formula2 [, ...])
    Set(_editingRequest, false),    //Concurrent 的第一个函数, 用Set 为一个变量设置布尔值为 false。
    Set(_reviewRequest, false),    //Concurrent 的第二个函数,用Set 为一个变量设置布尔值为 false。
    If(!_managerView,   // 利用 IF 条件来判断当前的界面是员工视图还是主管视图,换句话说也就是判断登录人是一名员工还是一名主管。 这里的 "_managerView" 在第二节介绍的两个按钮的属性里进行过赋值。当用户点击按钮时,相应的值就带过来了并在此发挥作用。
        Set(_requesterBalanceRecord, LookUp(Balance,  Year = Text(Year(Now())) && EmployeeEmail = _myProfile.UserPrincipalName  ));   // 这里用到了 LookUp 函数,用来从表中查找记录。语法: LookUpTableFormula [, ReductionFormula ] )。
         // LookUp 的第一个参数 Balance, 就是第一节提到的保存在 OneDrive里那个 Data.xlsx 文件里的一个 工作表。这一句在当前视图不是主管视图是运行,用来将LookUp查到的员工假期天数暂存到_requesterBalanceRecord变量里。

        ClearCollect(RequesterBalanceCollection,
                    {type:"Vacation", balance:Value(_requesterBalanceRecord.Vacation) - Value(_requesterBalanceRecord.VacationUsed)},
                    {type:"Sick Leave", balance:Value(_requesterBalanceRecord.Sick) - Value(_requesterBalanceRecord.SickUsed)},
                    {type:"Floating Holiday", balance:Value(_requesterBalanceRecord.Floating) - Value(_requesterBalanceRecord.FloatingUsed)},
                    {type:"Jury Duty", balance:Value(_requesterBalanceRecord.JuryDuty) - Value(_requesterBalanceRecord.JuryDutyUsed)},
                    {type:"Bereavement", balance:Value(_requesterBalanceRecord.Bereavement) - Value(_requesterBalanceRecord.BereavementUsed)})
        )   //Concurrent 的第三个函数。 一个If 语句, 目的是: 如果不是主管视图,就从后台读取员工的假期天数进行显示。如果是主管视图,就计算员工当前可用的假期天数并存储到RequesterBalanceCollection集合里。
)  //结束Concurrent 语句。 

2.2 MakeFirstRequestGroup (上图左侧的一个隐藏的方框区域) 

这个控件的作用是在用户第一次运行App时,显示下面这样一个提示性的界面让用户来创建新的申请。

从这个控件的名字可以看出,它是几个控件的组合(Group)。 
在树状视图里展开它后,可以看到它里面包含了三个控件,前两个组合在一起就是上图里那个蓝色的加号图标,第三个Label7 就是提示文字“Make your first leave request!”

通过将多个控件组合在一起,我们选中控件组进行属性设置,来控制整个组合的一些特性。比如,这里对组合控件设置了:
Visible = (_requestTypeFilter = "All") && !GalleryRequests.Visible && !_managerView   //仅当_requestTypeFilter的值为All 并且GalleryRequests 不可见并且 !_managerView 值为真这三个条件同时满足时,这个组合控件才可见。这里使用了 && 逻辑运算符(表示And)和 ! 运算符(表示 Not)。对控件组设置一次 Visible属性,里面的所有子控件都会得到同样的设置。

- 控件 icon2_1, 设置了 OnSelect = Navigate(NewRequestScreen, None)     //点击后跳转到 NewRequestScreen 窗口。
- 控件 Label7, 设置了 Text = “Make your first leave request! ”     //也就是所显示的提示文字
- 控件 Circle1_1, 用来美化那个 “ + ” 图标,只是设置了一些 Design方面的参数,没有Action的自定义设置。

2.3 LabelNoRequest

这个控件是一个文本提示标签,用于在用户点击了申请类型后显示对应的提示信息。

这个控件比较有趣的地方在于,它只在用户点选的申请类型没有数据时才显示,并且会根据用户点击的按钮组合出不同的提示文本。如上图,点击的是Approved 按钮,组合出来的文字就是 No approved requests.
相应的就需要设置两个属性来对这个控件进行控制。
a. Visible = !GalleryRequests.Visible && GalleryFilters.Selected.Filter <> "All"      //控件是否显示由两个条件决定: 1. GalleryRequests.Visible 的值, 2. GalleryFilters.Selected.Filter <> "All" (点击的按钮不是 All) 。这里涉及的两个控件 GalleryRequests 和 Gallery Filter 就是下面马上要拆解的控件。
b. Text = "No " &Lower(_requestTypeFilter)& " requests"     //利用连接符 & 连接三个字符串来组合出最终的提示文本。其中变量 _requestTypeFilter 后续会提到,这里使用了 Lower() 函数来将其转换成全部小写。

2.4 Rectangle1_1 
这个控件只是用来做界面不同区域的分割,设置好Design相关的属性就行。

好了,今天就先到这里,接下来的内容会更丰富、更精彩。

附:本节用到的函数和运算符
LookUp, Concurrent, Set, ClearCollect, If, Lower, &&, & , <> 

--------------  本节结束, 下一节继续解析 HomeScreen -----------------

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值