练习 - 处理关系数据
在本练习中,您将了解如何访问相关数据以及如何在多个表中创建相关记录。 在本例中,我们会用到集合,这些集合只能临时存储数据。 如果要将解决方案保存至 Dataverse 或 SharePoint,请使用 Patch 函数。
我们要创建一个购物车。 我们会使用一个父表(收据标头)、一个子表(收据明细项目)和一个产品表(引用表)。 其关系如下:
上图显示了三个带有主键的表,但 ReceiptLineItems 表(右侧)有两个外键,分别指向 ReceiptHeader ID 和 Products ID。 从 ReceiptHeader 和 Products 表到 ReceiptLineItems 表的线条符号表示一对多的关系, 这意味着可以为 ReceiptLineItems 中的许多不同项目输入一个 ID 字段(来自每个项目)。
开始练习
选择 + 创建
选择空白应用,然后选择空白画布应用。
将应用命名为 Shopping Cart,确保格式为平板电脑,然后选择创建。
现在从顶部菜单选择插入,然后选择按钮。
在本按钮的 OnSelect 属性中,输入以下代码(可以复制粘贴):
ClearCollect(Products, {ID:1, Name:"T-Shirt", Category: "Clothing"}, {ID:2, Name:"Sweatshirt", Category: "Clothing"}, {ID:3, Name:"Socks", Category: "Clothing"}, {ID:4, Name:"Necklace", Category: "Jewelry"}, {ID:5, Name:"Ring", Category: "Jewelry"}, {ID:6, Name:"Coffee Mug", Category: "Misc."}, {ID:7, Name:"Keychain", Category: "Misc."} )
长按 Alt 键并选择本按钮。 现在内存中有一个名为 Products 的集合,这将是我们第一个库的数据。 您可以将此按钮移开。
在屏幕中添加一个垂直库,并选择产品集合作为数据源。 这样会在 Items 属性中用产品取代 CustomGallerySample。
将布局改为标题和副标题。
将新库移至屏幕最左侧,并将库的 OnSelect 属性设为等于:
Collect(colCart, ThisItem)
现在添加第二个垂直库 (Gallery2),数据源设为 colCart,布局设为标题和副标题。 删除库中指向右边的 V 形图标。
将此库放置在屏幕的右侧,使它看起来像下面的屏幕,Gallery1 在左侧,Gallery2 在右侧:
按下 Alt 键并选择 Gallery1 最上面一行中指向右边的图标。 Gallery2 中现在应包含一个项目。 您可以继续按下 Alt 键,从 Gallery1 中选择项目填充 Gallery2。
现在在屏幕中添加第二个按钮。 将此按钮的 Text 属性设为“结帐”,并将按钮的 OnSelect 属性设为以下公式(您可以复制粘贴):
Collect( ReceiptHeader, { ID: If( IsEmpty(ReceiptHeader), 1, Last(ReceiptHeader).ID + 1 ), Name: User().FullName, Date: Today() } ); ForAll( colCart, Collect( ReceiptLineItems, { ID: If( IsEmpty(ReceiptLineItems), 1, Last(ReceiptLineItems).ID + 1 ), ProductID: ThisRecord.ID, ReceiptHeaderID: Last(ReceiptHeader).ID } ) ); Clear(colCart)
此代码将创建一个单项 ReceiptHeader 集合,包含有关当前用户、当前日期的信息,并为用户设置 ID。 然后,对于 colCart 中的每个项目,它都将添加一个明细项目到 ReceiptLineItems。 本明细项目将带有自动编号的 ID 字段、新创建的 ReceiptHeader 记录(将项目与购买事件相联系)的 ID 以及 colCart 中产品的 ID。 然后将会清除 colCart,因为会将其提交。 您需要在选择之前填充您的购物车!
按下 Alt 键并选择“结帐”按钮,可加载此集合。
创建一个新屏幕 (Screen2),这样我们就可以在全新画布中查看新创建的数据。
转到新屏幕并添加两个垂直库,其格式与上一页的两个库相同。 将左侧库 (Gallery3) 的数据源或 Items 属性设为 ReceiptHeader,并选择 ReceiptLineItems 作为第二个库 (Gallery4) 的源。
在左侧库 (Gallery3) 中,将副标题的 Text 属性更改为 ThisItem.Date。
转到右侧库 (Gallery4) 并将 Items 属性修改为如下值:
Filter(ReceiptLineItems, ReceiptHeaderID=Gallery3.Selected.ID)
现在(仍在 Gallery4 中),将标题的 Text 属性更改为:
LookUp(Products, ID=ThisItem.ProductID).Name
接下来(仍在 Gallery4 中),将副标题的 Text 属性更改为:
LookUp(ReceiptHeader, ID=ThisItem.ReceiptHeaderID).Name
您现在有了一个可正常运行的订单历史记录页面,在左侧的 Gallery3 中有订单头信息,在右侧的 Gallery4 中是购买的商品。 您可以从左侧选择收据标头项,可以查看右侧收据中的明细项目。
您可以返回第一个屏幕并从 Gallery1 中选择新项目以填充购物车(由 Gallery2 表示)。 然后可以按结帐 按钮,转到 Screen2 并查看您名下的另一个订单。 选择任一订单将显示该特定订单中购买的商品。
您可以继续处理并完成解决方案。 您可以添加更多描述性标签、导航片段,并定义用户将使用此类应用执行哪些操作。
希望您现在已经了解了使用关系数据可以实现的可能性。 虽然这远不是一个完整的解决方案,但您可以开始发现在您的应用中使用此类技术的可能性。