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

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

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

剩下的就是App运行所需的各个主体Screen(如下面的截屏),接下来我们根据App的运行逻辑来逐个进行解析。

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 三个表格。

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:
        "<html>
        <head>
            <meta http-equiv=""Content-Type"" content=""text/html; charset=us-ascii"">
        </head>
        <body>
              <p>        There is a leave request from:  {SubmitterName}  pending your approval. <ul><li>Type:  {LeaveType}</li><li>Title: {LeaveTitle}</li><li>Description: {LeaveDescript}</li><li>Start Date: {LeaveStart}</li><li>End Date: {LeaveEnd}</li>" & " </p>
        </body>
        </html>"},

{Row: 2, Value:
         "<html>
        <head>
            <meta http-equiv=""Content-Type"" content=""text/html; charset=us-ascii"">
        </head>
        <body>
        <p>        Your leave request from {LeaveStart} to {LeaveEnd} has been {LeaveStatus}" &        "</p>
        </body>
        </html>"})       //Concurrent 的第三个函数 ClearCollect(),也是这个Concurrent的最后一个公式
);      //结束整个ConCurrent函数。

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

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

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

拆解PowerApps - 请假申请 -1相关推荐

  1. 拆解PowerApps - 请假申请 -11

    续接上一节,今天我们要解析的这个页面是新建请假申请的最后一个页面ConfirmationScreen. 页面结构 这个页面初看感觉很简单,稍一拆析发现还是有点意思,这个页面里其实是包括了两个" ...

  2. OA系统十九:请假申请五:【请假申请】这个内嵌页面的前台文件;设置【点击左侧菜单栏的“请假申请”后】在首页的“功能区”显示【请假功能】这个内嵌页面;

    本篇博客的主要内容是: 本篇博客有几点特别说明下: (1)前端的东西挺复杂的,感受到了[学会一个成熟的前端框架]的重要性.毕竟,框架可以提高前段文件的开发效率,简化开发步骤! (2)前端的Ajax请求 ...

  3. 实例演示使用RDIFramework.NET 框架的工作流组件进行业务流程的定义—请假申请流程-Web

    实例演示使用RDIFramework.NET 框架的工作流组件 进行业务流程的定义-请假申请流程-Web 参考文章: RDIFramework.NET - 基于.NET的快速信息化系统开发框架 - 系 ...

  4. 实例演示使用RDIFramework.NET 框架的工作流组件进行业务流程的定义—请假申请流程-WinForm

    实例演示使用RDIFramework.NET 框架的工作流组件 进行业务流程的定义-请假申请流程-WinForm 参考文章: RDIFramework.NET - 基于.NET的快速信息化系统开发框架 ...

  5. OA系统十七:请假申请三:【请假申请】这个内嵌界面中【提交请假表单数据】的Service层;(PS:在EmployeeDao中初次遇到@Param()参数设置)

    本篇博客的主要内容是:  本篇博客的需要注意的点有: (1)根据业务需求,规划好整体的代码结构和编码逻辑: (2)一种目前认可的编程小细节:(PS:随着以后经验增多,可能会抛弃这种想法,或者有其他理解 ...

  6. OA系统十五:请假申请一:【请假申请】这个内嵌界面的数据库设计;(即请假申请这个线型工作流程的数据库设计!)

    本篇博客的主要内容是:设计[请假申请]相关的数据表: 目录 一:[多级请假审批流程]的数据库设计:分析 1.请假工作流程图 2.工作流程表的设计分析 3.设计约束 二:具体表设计 1.leaveFor ...

  7. OA系统十八:请假申请四:【请假申请】这个内嵌界面中【提交请假表单数据】的Controller层;

    本篇博客的主要内容是: 本篇博客需要注意的点: (1)一种策略,或称之为一种思想:一个Controller的url设置成通配符的形式,从而实现不同的请求调用不同方法: (2)加深感受下Session这 ...

  8. Oracle Workflow Demo 1 - 一个简单的请假申请工作流

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 目标:通 ...

  9. Activiti6自学之路(九)——请假申请和请假审批数据库表设计

    一.请假申请流程图回顾 前面我们设计了请流程审批的流程图,并且完成了流程图任务分配等功能, 上述的流程图具有四个任务节点 1.填写请假申请 2.经理审批 3.总监审批 4.人力资源审批 二.Activ ...

最新文章

  1. 每日一皮:自己运行正常,测试一测就有bug
  2. 通过这12张手绘图,搞懂什么是微服务架构
  3. DNS隧道工具使用 不过其网络传输速度限制较大
  4. Leetcode 283. 移动零 解题思路及C++实现
  5. 带你玩转关键字Synchronized
  6. lazada开店平台费用都有哪些,产品如何来做定价?
  7. echarts定时加载动画数据
  8. c++变量的作用域、生存期和可见性
  9. 简述LINQ的发展历程
  10. 使用数据库恢复专家,修复数据库
  11. mysql dbd 卸载_mysql首次使用过程以及彻底卸载过程
  12. 初接触RTMP流媒体实时消息传输协议
  13. ImportError: libcudart.so.9.2: cannot open shared object file: No such file or directory
  14. 记录10本关于开关电源的书
  15. 怎么换c语言程序窗口背景图,vc++如何给窗体添加背景图片
  16. JS实现图片验证码功能
  17. 计算机网络自顶向下方法(二)——应用层
  18. 【SQL SERVER】将查询结果转换为字符串
  19. eclipse设置pom.xml打开方式
  20. 【Eclipse使用技巧】格式化代码的方法 + 解决注释是繁体字的方法

热门文章

  1. Qt5教程(九):Qt多线程
  2. 小牛客户管理软件 下载
  3. wpsjs excel二次开发大数据写入缓慢解决方案
  4. 什么是DirectX,DirectShow与DirectX有什么区别?
  5. python 创建后台守护进程
  6. 给出十六进制数转二进制数的汇编语言代码并画出流程图
  7. 其实我们都有一些穷人思维
  8. es6的杂乱的知识总结
  9. 洛谷 P1063 能量项链
  10. CSP 202206-2