拆解PowerApps - 请假申请 -1

从今天开始,我们一起来拆解Powerapps模板库里的一个"请假申请", 看看其构成模块、涉及到的函数、处理逻辑等,希望能从中学到点新东西。
同时,解析的内容中如有差错,也还请朋友们随时指出,感激不尽!!!

1. 首先登录到Powerapps里,利用模板创建出"Leave Request"这个App。

2. 看一下App的总体结构
等App创建完成后,从左边的树状视图里可以看到App的所有Screen构成。
最下面的三个是App的参数配置说明,本文就不加描述了。

剩下的就是App运行所需的各个主体Screen(如下面的截屏),接下来我们根据App的运行逻辑来逐个进行解析。
拆解PowerApps - 请假申请 -1_第1张图片

3. 第一个组件 -- App 

这里的“App”是一个对象,用于为当前的App 提供数据(比如全局变量、集合数据)及总体性的控制。App 对象里有两个属性最常用: 

  • ConfirmExit  --  算是一种容错机制。设置了这个属性后,用户在选择退出App时会有对话框弹出来问用户确认是否要退出,以免数据未保存而丢失。
  • OnStart -- App 启动后就会执行 OnStart里的设定。在OnStart属性里,App 创建者可以利用navigate来设定App运行后显示的第一个页面,利用Set 函数来设置全局变量,以及利用Collect来设置集合。

本文的App对象里就在OnStart属性里使用了 Set 和 Collect 函数,下面具体来看OnStart属性的代码设置:

OnStart =           //设置启动时要执行的操作
Concurrent(        //同时执行多个函数,语法:Concurrent( Formula1, Formula2 [, ...])

     ClearCollect(    //ClearCollect代码段的目的: 将假期类型添加到自定义的集合LeaveTypeCollection中。
                              //ClearCollect相当于Clear 和 Collect 两个命令的组合,也就是先把集合里的数据清除“Clear”,然后再添加”Collect”新的数据。
                              //语法 :ClearCollect(集合名,条目,...)

    LeaveTypeCollection,   //ClearCollect函数的第一个参数,集合名LeaveTypeCollection

            {   type:"Vacation",  icon:vacation, description:"说明什么是Vacation."  },
            {   type:"Sick Leave",  icon:'sick-leave',  description:"说明什么是Sick-leave "},
            {   type:"Floating Holiday",  icon: 'floating-holiday',  description:"说明什么是Floating Holiday." },
            {   type:"Jury Duty",  icon: 'jury-duty',  description:"说明什么是Jury Duty." },
            {   type:"Bereavement",  icon: bereavement,  description:"说明什么是Bereavement." }    //ClearCollect的第2、3、4、5、6个参数,也就是集合里的五个假期类型的数据(包括假期类型名,对应的图标和假期类型的说明)。同时,如要对假期类型进行自定义,也可以在这里增删或修改。
    ),     //Concurrent的第一个函数 --- ClearCollect()

    Set(_myProfile,Office365Users.MyProfile())   // 这里利用Set函数 将用户的Profile 赋予全局变量 "_myProfile"。
           //Concurrent的第二个函数 --- Set(), 注意:这里是以 分号 结尾,表示这个Set 函数会和下面的两个Set 函数以及一个 IF 函数组合在一起,作为一个函数集合做Concurrent的第二个"函数"。  
    Set(_defaultApprover,Office365Users.Manager(_myProfile.Id));       //把用户的经理作为审批人赋值给变量 _defaultApprover
    Set(_defaultApproverPhoto, If(Office365Users.UserPhotoMetadata(_defaultApprover.Id).HasPhoto, Office365Users.UserPhoto(_defaultApprover.Id)))      //设置审批人的头像。 其中的If语句只设置了条件为真的操作,没有设置条件为假的操作。
    If(
      IsBlank(    //通过 IsBlank() 函数的结果来作为If语句的判断条件, 下面的LookUp函数的输出就是IsBlank的参数。
            LookUp(Balance, Year = Text(Year(Now())) && EmployeeEmail = _myProfile.UserPrincipalName))      //通过LookUp()函数,查询Balance表,看用户今年在表里有没有年假可用天数。
//如果没有,IsBlank就为假,反之If语句的值为真,就会继续执行下面的Patch命令来为用户添加今年的默认的假期天数已经相关的信息。
//另外,这里链接了一个数据源,名为Balance, 它是存储在OneDrive 里一个Excel文件里的表格。默认的,通过模板创建了这个App后,会在下面的路径下生成一个data.xlsx文件, 里面包含
Leave,Holidays, Balance 三个表格。

拆解PowerApps - 请假申请 -1_第2张图片

            Patch(Balance, Defaults(Balance),    // 当上面的 If 语句返回为 真 时,通过 Patch 命令向Balance表的各个字段(如下面的截图)添加数据

           {      
                EmployeeEmail: _myProfile.UserPrincipalName,
                EmployeeName: _myProfile.DisplayName,
                Year: Text(Year(Now())),
                Vacation:10,     //这里可以自定义各种假期默认的天数
                VacationUsed:0,
                Sick:8,
                SickUsed:0,
                Floating:8,
                FloatingUsed:0,
                JuryDuty:3,
                JuryDutyUsed:0,
                Bereavement:5,
                BereavementUsed:0,
                BalanceID:_myProfile.UserPrincipalName&Text(Now(), "[$-en-US]mm-dd-yyyy-hh-mm-ss-fff")
            }
        )     // Patch 函数结束
    ),  //IF语句结束, 同时,也结束了Concurrent 函数的第二个“函数” (上面提到过,其实这第二个是四条函数组合而成的一个函数组合)

    ClearCollect(EmailTemplate,         //和上面一样,这里又用到了ClearCollect函数,目的是:设置用来发送请假申请通知的电子邮件模板。
    {Row: 1, Value:
        "
       
           
       
       
             

        There is a leave request from:  {SubmitterName}  pending your approval.

  • Type:  {LeaveType}
  • Title: {LeaveTitle}
  • Description: {LeaveDescript}
  • Start Date: {LeaveStart}
  • End Date: {LeaveEnd}
  • " & "


           
            "},

        {Row: 2, Value:
             "
           
               
           
           
           

            Your leave request from {LeaveStart} to {LeaveEnd} has been {LeaveStatus}" &        "


           
            "})       //Concurrent 的第三个函数 ClearCollect(),也是这个Concurrent的最后一个公式
    );      //结束整个ConCurrent函数。

    //由此总体来看,这个Onstart属性是利用Concurrent 函数做了三件事:
    //第一,利用ClearCollect 设置假期类型的说明。

    //第二,利用几个Set 函数设置了全局变量,以及利用Patch 函数向Excel 文件里写入变量值
    //第三,利用ClearCollect 设置了一个电子邮件模板, 当用户提交请假申请后,他的主管就会收到一封提示邮件,样式如下。

    拆解PowerApps - 请假申请 -1_第3张图片

    ------------------------ 本节结束,下一节继续-- --------------------------

你可能感兴趣的:(Microsoft,Power,Apps,microsoft,app)