拆解一个Power Apps模板应用 - 3 - MyTicketScreen

接上一节, 本节继续解析屏幕构件。

二. MyTicketScreen

 屏幕总体构成如下:

屏幕层面, 该屏幕关联到了一个工作流,用来通过电子邮件发送工单状态(工作流的相关内容会在后面描述)。

另外,该屏幕在加载显示的时候执行下面的五个动作(每个动作之间以分号分隔):

  • OnVisible= Refresh(HelpDesk);    /#刷新数据源 Helpdesk 列表#/

ClearCollect(AllTickets,HelpDesk);  /#清理集合AllTickets, 然后把刷新过的 Helpdesk 列表 加载到集合里。#/

If(isAdmin, Set(TicketToRunFlow, First(Sort(AllTickets,Created,Descending))), Set(TicketToRunFlow, First(Sort(Filter(AllTickets, Author.Email = MyProfile.Mail || Author.Claims = MyProfile.UserPrincipalName), Created,Descending) ) ) )/# 如果是管理员(isAdmin 值为 true),就把所有工单按创建时间降序排列,然后把第一个工单分配给变量 RicketToRunFlow, 也就是即将运行工作流的一个工单。否则,不是管理员,就根据用户的电子邮件地址或者UPN来识别出用户身份,并将该用户的所有工单按创建时间降序排列,然后把第一个工单分配给变量 RicketToRunFlow。#/

If(RunFlow,HelpDeskFlow.Run("'"&TicketToRunFlow.ID&"'")); /# 如果RunFlow 为 true(App 层面初始化的值为 false), 就运行 HelpDeskFlow, 并将工单的 ID 作为参数传递给工作流。#/

If(RunFlow,Set(RunFlow, false )) /# 最后把 RunFlow的值重新设置回 false #/

再来看屏幕下级的四个控件:

  • 第一个控件,Logout按钮。OnSelect = Navigate(LoginScreen,None)  /#返回LoginScreen页面#/
  • 第二个控件,新建Ticket 按钮。 OnSelect = Navigate(CreateTicketFormScreen,None) /#跳转到CreateTicketFormScreen页面#/
  • 第三个控件,屏幕标题的一个标签。
  • 第四个控件,屏幕的主体,是一个库(英文对应Gallery),以卡片形式显示每个Ticket。具体由下面的子控件构成:

先来看看最顶部的库的层面, 有三个属性设置值得分析:

  • OnSelect = Set(SelectedTicket,ThisItem)   /# 把当前对象赋值给 SelectedTicket变量  #/
  • Items = If(isAdmin,Sort(AllTickets,Created,Descending),Sort(Filter(AllTickets,Author.Email = MyProfile.Mail || Author.Claims = MyProfile.UserPrincipalName ),Created,Descending))  /#这里也涉及到上面普通用户点击的OnSelect设置,为什么点击用户按钮后,不管是不是管理员,都会把isAdmin设为 false? 可以看到 isAdmin 在这里起了关键的作用,如果是管理员,就显示所有工单, 并按照创建时间降序排序。但如果不是管理员,则对所有工单按照用户的指定属性进行过滤, 然后按照创建时间降序排序。#/
  • WrapCount = 1       /# 用于设定每行显示的卡片数,来控制页面布局#/

上图标出了库下面的14个子控件,逐个来看:

1. 工单卡左上角的一个票券图标,主要设置了Image 和 OnSelect 两个属性。

  • Image  =  'icons-8-train-ticket-96-px'.  /#这里涉及到App 里媒体资源的管理,在App创建界面的左侧工具栏里,有一个就是管理媒体文件资源的,只要将图片、音视频等文件上传进来,然后就可以在App里使用了。可以看到上面的Image所指向的文件就出现在下面的这个媒体资源管理清单里。

#/

2. 右下角的编辑按钮, 主要设置了 OnSelect 属性。

  • OnSelect = Select(Parent);  Navigate(EditTicketFormScreen,ScreenTransition.None)   /# 执行了两个动作: 先执行上一级的Gallery 的OnSelect 动作Set(SelectedTicket,ThisItem)。然后跳转到EditTicketFormScreen窗口。 #/

3. 左下角的删除按钮,主要设置了OnSelect 属性。

  • OnSelect = Select(Parent); Set(TicketToDelete,ThisItem); Navigate(ConfirmationDeleteScreen,None) 

/# 执行了三个动作: 1. 执行上一级的Gallery 的OnSelect 动作Set(SelectedTicket,ThisItem);2. 将ThisItem设置为变量TicketToDelete(这个TicketToDelete变量会在确认删除的页面里用到);3. 跳转到ConfirmationDeleteScreen窗口。#/

扩展一下: 第二步定义了变量TicketToDelete 后,它就可以以全局变量的形式在整个App的任何页面被调用。如下图,可以看到通过 . 运算符可以调用到ThisItem的属性,也就是SPO List里所创建的各个字段(当然也可以调用默认创建的的字段)

#/

4. 覆盖整个卡片的矩形框,主要设置了OnSelect属性。

  • OnSelect  = Select(Parent);  Navigate(ViewTicketScreen,None)  /# 执行了两个动作: 先执行上一级的Gallery 的OnSelect 动作Set(SelectedTicket,ThisItem)。然后跳转到ViewTicketFormScreen窗口。 #/

5. 标签控件(动态),用来显示工单被指派到的人员。主要设置了Text 属性。

  • Text = ThisItem.AssignTo.DisplayName  /#从List 获取对应条目的AssignTo字段的DisplayName数据进行显示#/

6. 标签控件(动态),用来显示工单优先级。主要设置了Text 属性。

  • Text = ThisItem.Priority.Value /#从List 获取对应条目的Priority字段的Value数据进行显示#/

7. 标签控件(静态),用来显示相应条目的名称。Text = “ASSIGNED TO”, 对应第5个控件。

8. 标签控件(静态),用来显示相应条目的名称。Text = “PRIORITY”, 对应第6个控件。

9. 标签控件(静态),用来显示相应条目的名称。Text = “ID:”, 对应第10个控件。

10. 标签控件(动态),用来显示工单ID编号。主要设置了Text 属性。

  • Text = ThisItem.ID /#从List 获取对应条目的ID字段值进行显示#/

11. 标签控件(动态),用来显示工单状态。主要设置了Text 属性。

  • Text = ThisItem.ID /#从List 获取对应条目的TaskStatus字段的Value值进行显示#/

12. 标签控件(动态),用来显示工单的主题。主要设置了Text 属性。

  • Text = ThisItem.ID /#从List 获取对应条目的Title字段值进行显示#/

13. 矩形分割线,用来控制页面视觉效果

14. 控件14有点类似控件 4, 但比 4 的覆盖范围小一些(仔细对比下面的两个截屏的底部就坑看出来。)。

其作用和控件13分割线一样,纯粹是为了控件页面的视觉效果,在控件 4 Mask 所控制的范围内, 添加控件 14 并通过填充白底色来形成卡片的样式。

要注意的是: 控件的排列顺序会影响OnSelect。当前控件 4 排在控件 14的上面,因此点击控件 4 和控件14重复覆盖的范围是,实际生效的OnSelect 是控件 4 的,也就是位于上部的控件。

控件 4 – Mask 

控件 14 – WhiteBackground

另外: 上面第5到14这些控件还都设置了OnSelect属性,都为 Select(Parent) – Set(SelectedTicket,ThisItem)。因为只是一个Set变量的动作,实际点击时,看不到具体的动作。

下一节我们继续解析后续的屏幕构成。

未完,待续。。。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值