在画布应用中创建订单库
按照分步说明在画布应用中创建订单库,来管理罗斯文商贸数据库中的虚构数据。 本主题是一个文章系列的一部分,该系列说明如何基于 Microsoft Dataverse 中的关系数据构建业务应用。 为了获得最佳结果,请按以下顺序探索这些主题:
先决条件
- 安装罗斯文商贸数据库和应用。
- 通读罗斯文商贸的画布应用概述。
创建空白应用
创建空白画布应用,并为其命名,例如“我的罗斯文订单(画布应用)”。
添加数据
在左侧窗格中,选择数据 > 添加数据 > 搜索,然后选择订单表。
订单表包含很多不同类型的字段:
每个字段都有一个显示名称和一个名称,名称有时也称为逻辑名称。 这两个名称指的是一件事。 通常,在构建应用时将使用显示名称,但是在某些情况下,如过程中所述,要求使用更加模糊的名称。
接下来,我们将处理屏幕和控件,所以在 Power Apps Studio 中,按下三个堆叠的正方形图标,切换回左侧的树视图。 您可以通过按圆柱图标随时返回数据源。
创建订单库
在插入选项卡上,选择库 > 垂直空白添加 库 控件,这将显示订单。
此控件将被放置在画布上,并出现一个弹出对话框,询问要连接到哪个数据源。
我们可以在此处将其直接连接到订单,不过我们希望控制库的排序顺序。 忽略弹出对话框,在编辑栏中将库的 Items 属性设置为此公式:
Sort( Orders, 'Order Number', Descending )
Sort 函数将对列表进行排序,以使最新订单(具有最大订单编号)首先出现。
一会儿过后,“结果视图”将出现在编辑栏下方。 下拉左侧的箭头查看公式的结果。 滚动到右侧查看订单编号列,确保它已按所需方式排序(从最高到最低)。
在右边缘附近的属性选项卡中,打开布局列表:
在选项列表中,选择标题和副标题:
两个 标签 控件将添加到库的模板中。 默认情况下,这些控件显示订单表的两个列,接下来您将对其进行更改。 将为表中的每个记录垂直复制库的模板。
在右边缘附近的属性选项卡中,选择编辑(字段旁边)。
在数据窗格中,选择 Title1(或在库模板中选择上部标签)。
在编辑栏中,将标签的 Text 属性设置为以下表达式:
"Order " & ThisItem.'Order Number'
订单编号将出现在每个库项的顶部。 在库模板中,ThisItem 授予对订单表中所有字段的访问权限。
在数据窗格中,选择 Subtitle1(或在库模板中选择下部标签):
在编辑栏中,将标签的 Text 属性设置为以下表达式:
ThisItem.Customer.Company
输入此公式后,可能会暂时显示红色波浪错误。 如果您在编辑栏之外选择任何内容,然后将光标返回到编辑栏,错误应会清除。 如果错误仍然存在或您没有看到值,请选择视图选项卡,选择数据源,然后选择数据源名称右侧的省略号 (...) 来刷新订单表。
当您指定 ThisItem.Customer 时,您将利用订单和客户表之间的多对一关系并检索与每个订单关联的客户记录。 从客户记录中,您要提取公司列中的数据来显示。
您可以显示从订单表到其他表的所有关系,包括客户表:
选择窗格右上角的 (x) 关闭图标,关闭数据窗格。
显示每个订单的状态
在此过程中,您将在库中为标签添加空间,并将其配置为基于数据以不同颜色显示每个订单的状态。
在库的模板中,减小第一个标签 Title1 的宽度:
对第二个标签 Subtitle1 重复上一个步骤:
选中库模板(或模板中的控件)后,在插入选项卡上选择标签:
将新标签移到 Title1 标签的右侧:
将新标签的 Text 属性设置为以下表达式:
ThisItem.'Order Status'
在订单表中,订单状态字段包含来自订单状态选择项的值。 选择项类似于其他编程工具中的枚举。 每个选项集都已在数据库中定义,因此用户只能指定集中的那些选项。 订单状态选择项也是全局的,不是本地的,因此您可以在其他表中使用它:
集中的每个选项都有一个名称,如果您在标签中显示选项,其名称将出现。 这些名称可以本地化,无论英语用户选择 Apple,法语用户选择 Pomme,还是西班牙语用户选择 Manzana,应用都可以识别相同的选项。 因此,您不能为选项创建依赖于硬编码字符串的公式,如本主题后面所述。
在公式中,您必须用单引号将订单状态括住,因为它包含空格。 但是,该名称的功能与 Power Apps 中的其他任何名称相同,如客户或公司。
在主页选项卡上,将状态标签的字号增加到 20 磅,然后将文本右对齐:
在编辑栏中,将状态标签的 Color 属性设置为此公式:
Switch( ThisItem.'Order Status', 'Orders Status'.Closed, Green, 'Orders Status'.New, Black, 'Orders Status'.Invoiced, Blue, 'Orders Status'.Shipped, Purple )
Power Apps 将阻止您为集中的每个选项创建依赖于硬编码字符串的公式,因为如果选项名称本地化,此类公式可能会生成不适当的结果。 而是使用 Switch 函数基于用户的设置根据标签中显示的任何一个字符串确定颜色。
如上图所示,使用此公式后,不同的状态值将以不同的颜色显示。
显示每个订单的总计
选择库中的第一项,即库的模板:
在插入选项卡上,选择标签添加另一个标签:
移移动新标签,使其显示在状态标签下:
在编辑栏中,将新标签的 Text 属性设置为以下公式:
Text( Sum( ThisItem.'Order Details', Quantity * 'Unit Price' ), "[$-en-US]$ #,###.00" )
在此公式中,Sum 函数通过一对多关系将订单详细信息表中与订单表中的每个记录关联的记录相加。 这些明细项目构成了每个订单,您将使用相同的一对多关系在屏幕右下方区域显示和编辑明细项目。
此公式显示蓝色下划线和委派警告,因为 Dataverse 不支持复杂聚合函数的委派(例如,乘法求和)。 您可以忽略此信息,因为此示例中没有订单会包含超过 500 个明细项目。 如果其他应用需要,可以在应用设置中增加该限制。
此公式中的 Text 函数将添加货币符号并使用千位和十进制分隔符设置结果格式。 根据编写,此公式将包含美国英语的语言标记 ([$-en-US]) 和美元符号 ($)。 如果您删除此语言标记,将会基于您的语言设置将其替换为另一个语言标记,标签将显示该标记的适当格式。 如果您保留美元符号,标签将基于用户的设置显示相应的货币符号。 但是,您可以通过将美元符号替换为您喜欢的符号来强制显示其他符号。
在主页选项卡上,将最新标签的字号更改为 20 磅,然后将文本右对齐:
将库移到屏幕的左边缘,并减小库的宽度以关闭一些空间。
增加库的高度,使其几乎与屏幕一样高,但在顶部为标题栏留出一小块空间,您将在下一个主题开始时添加标题栏:
摘要
回顾一下,您已经开始通过添加包含以下元素的订单库来构建单屏画布应用:
- 用于显示订单编号的表达式:
"Orders " & ThisItem.OrderNumber
- 多对一关系中的字段:
ThisItem.Customer.Company
- 显示集中的选项名称的标签:
ThisItem.'Order Status'
- 基于标签显示集中的哪个选项更改格式的标签:
Switch( ThisItem.'Order Status', 'Orders Status'.Closed, Green, ...
- 使用一对多关系的复杂聚合函数:
Sum( ThisItem.'Order Details', Quantity * 'Unit Price' )
下一主题
在下一个主题中,您将添加 编辑窗体 控件,来显示和编辑用户在您刚刚创建的库中选择的任何一个订单的摘要。