如何让 PowerApps 查看 SharePoint Online multi-select 选择字段值?

How can I get PowerApps to see SharePoint Online multi-select Choice field values?

我有一个连接到 SharePoint Online 列表的 PowerApps 表单。我名为“日志”的 SharePoint 列表有一个名为“服务”的 multi-select 选择列,它在 PowerApps 中显示为 combo-box。用户可以 select 1 个或多个来自此 combo-box 的“服务”。基于服务的 selection,许多相关的“机构”应该出现在表单的图库中。机构是针对服务列表中的每个服务定义的。

日志列表:

服务列表:

虽然我可以从组合框中获取 selected 服务,但问题是我无法从同一列表中的 Agency multi-select Choice 字段中检索值。我尝试的是从 dcvServices 控件中获取 selected 服务(进入 SelectedServices),然后在服务下拉列表的 OnSelect 期间收集相关的机构值(进入 AvailableAgencies):

ClearCollect(SelectedServices, Filter([@Service], Title in dcvServices.SelectedItems.Value));
ClearCollect(AvailableAgencies, SelectedServices.Agency);

当我尝试将我的 Gallery 控件连接到 AvailableAgencies collection 时,我无法完全显示 Agency 值。我收到以下错误:

让我们来看一个例子,它应该可以阐明这个问题。如果我的服务列表有这些值:

并且在组合框中选择了服务 1 和 4:

然后表达式 ClearCollect(SelectedServices, Filter(Service, Title in dcvServices.SelectedItems.Value)) 将分配给 SelectedServices collection 两个项目(服务 1、服务 4),每个项目都有一个 代理列表 与之相关联。

如果我们尝试按原样在单独的 collection 中收集代理商,使用表达式 ClearCollect(AvailableAgencies, SelectedServices.Agency),您将不会在 collection 中拥有各个代理商;相反,您将有两条记录,每条记录本身都有 collection:

[
  Agency: [ { Value: "Agency 1" }, { Value: "Agency 2" }, { Value: "Agency 3" } ],
  Agency: [ { Value: "Agency 1" }, { Value: "Agency 4" }, { Value: "Agency 7" } ]
]

如果您在图库中有此 collection,并尝试在标签中显示代理商的值(这需要单个文本值),这将不起作用(如您所述) :

ThisItem.Agency.Value

因为这不是单个文本值,而是其中的 collection 个(例如,第一项是代理机构 1、2、3 的 collection)。您可以使用 Concat function 显示该特定记录的所有值,如下所示:

这可能不是您需要的;如果您想要与所选服务相关联的所有 机构,您将需要一个不同的表达式:

Clear(AvailableAgencies2);
ForAll(
    SelectedServices,
    Collect(AvailableAgencies2, ThisRecord.Agency.Value))

这样,您将只在 collection:

中拥有代理商

请注意,由于服务 1 和 4 都与代理机构 1 相关联,因此它出现了两次。如果你不想这样,你可以使用 Distinct function 过滤掉任何重复的值:

Clear(AvailableAgencies2);
ForAll(
    SelectedServices,
    Collect(AvailableAgencies2, ThisRecord.Agency.Value));
ClearCollect(AvailableAgencies3, Distinct(AvailableAgencies2, Value))

这应该会为您提供与所选服务关联的独特机构列表。