使用一对多关系

已完成

一对多关系是您会用到的最常见的 Dataverse 关系。 本单元将继续介绍有关 Contoso 中共享工作区(办公桌轮用)解决方案的应用场景。 为解释如何在画布应用中使用关系,随后的示例将使用“位置”和“办公桌”表之间的关系。 以下图表是本关系及相应数据的可视化效果。

一对多关系的图表,本关系的“一端”是一条“位置”记录,“多端”是多条“办公桌”记录。

如果要允许用户选择一个位置,并使该位置的办公桌显示在该位置下的库中,则可以创建类似以下示例的屏幕。

示例 UI 的屏幕截图,其中显示已选定“位置 1”下拉列表,下跟所选位置的办公桌列表。

与大多数数据源一样,您可以使用 Filter() 函数筛选办公桌,以仅显示所选位置的办公桌。 公式将类似于以下示例:

公式的屏幕截图,该公式用于设置上一个示例中的数据源。

由于您使用的是 Dataverse 一对多关系,因此您可以改用点符号通过 Control.Selected.Desks 来引用该位置的办公桌,如以下公式所示。

办公桌库 Items 属性的备选公式的屏幕截图。

在本示例中,两个公式都生成与所选位置相关的同一办公桌列表。 使用点符号比使用 Filter() 函数更简单、更简洁。

默认情况下,使用点符号语法在一对多关系中导航时,您会获取所有相关记录。 可以使用筛选器将更多条件应用于相关行。 以下表达式使用一对多关系,同时根据活动状态筛选结果。

Filter(FilterLocation_1.Selected.Desks, Status= 'Status (Desks)'.Active)

此外,还可以使用从办公桌行开始的关系。 例如,要在库中显示每个办公桌所在位置的地址。 您可能熟悉使用查找来检索位置记录,然后访问作为属性的地址列。

分配给控件 text 属性的公式的屏幕截图。

也可以改用点符号并引用 ThisItem.Location.Address,而不使用 Lookup() 公式。

用于分配办公桌位置地址的简化公式的屏幕截图。

您可以在多个级别的关系中导航。 例如,如果您的某个位置具有相关主要联系人,您想要显示全名列,则可以编写以下公式:

ThisItem.Location.'Primary Contact'.'Full Name'

通过使用点符号,您可以快速包括相关数据,无论您使用的是从哪一端开始的关系。

建立一对多关系的最简单方法是使用编辑窗体创建或更新相关行。 将查找列添加到窗体时,它使用 Choices() 函数向用户显示可能的值。 以下示例演示添加办公桌行的过程,其中位置查找列已添加到窗体中。

办公桌记录的编辑窗体的屏幕截图,其中位置查找由下拉控件表示。

下拉控件中的高级属性演示了如何设置 Items 属性。

用于位置查找列的下拉控件的高级属性的屏幕截图。

使用 Choices() 函数时,您无需将查找表添加为另一个数据源。 Choices() 函数的结果为表,因此您可以添加更多筛选和排序内容,如下所示:

Filter(Choices([@Desks].contoso_Location), Status='Status (Locations)'.Active)

如果已设置了所需的查找值(例如,从“位置”屏幕创建办公桌记录时),则可以设置数据卡值上的 DefaultSelectedItems 属性,然后将窗体字段的 Visible 属性设置为 Off。 本设置支持在调用 SubmitForm() 函数时传递默认值。

为下拉列表中的位置设置默认值的表达式的屏幕截图。

如果使用 Patch() 函数设置查找列,则将列的值设置为主表中的记录。 以下示例演示了在办公桌行和当前在位置下拉列表中选择的主位置行之间建立关系。

Patch(Desks, ThisItem, {Location:FilterLocation_1.Selected})

您也可以使用 Relate() 函数实现相同的结果。 第一个参数是与主行(位置)相关的行(办公桌)的列表,第二个参数是要添加到该列表或要 关联 的行(办公桌)。

Relate(FilterLocation_1.Selected.Desks,ThisItem)

同样,您可以使用 Unrelate() 函数解除关联行,例如从与所选位置 FilterLocation_1.Selected 关联的办公桌中删除 ThisItem(办公桌)。

Unrelate(FilterLocation_1.Selected.Desks,ThisItem)

使用 Unrelate() 函数时,请记住,它会将相关记录上的主要查找值设置为 (或 NULL)。 避免包含孤立的行,因为应用可能无法显示没有与主行建立关联的行。 在 Contoso 示例中,如果办公桌列表仅显示为与位置相关,则任何没有位置的办公桌都将为孤立状态且无法通过应用进行访问。 设置关系行为属性时删除主行来删除指向相关行的链接时,也会发生这种负面影响。