使用 Collect 在集合和数据源之间移动数据
集合是一种特殊的数据源。 集合位于应用本地,未获得云端服务连接的支持,因此无法同一用户的不同设备之间或用户之间共享信息。 可以使用 Collect 函数动态创建集合。 集合无需像基于连接的数据源那样提前建立。 换句话说,集合只是变量,如果用户关闭应用,它们的内容不会被保存。 运行该应用的任何其他人都无法访问其中包含的任何数据。 要保存集合中的信息,必须将其写入数据源。 接下来我们介绍一下将集合数据保存到数据源中的两种主要方式。
使用 Collect 函数
Collect 函数可将记录添加到数据源。 它能够将单个值、一条记录或一个表添加到集合中。 它可用于创建集合并写入数据源,例如 SharePoint 列表或 Dataverse 表。 它使您能够写入批量数据,而无需 使用 ForAll/Patch 函数循环访问数据。
使用 Collect 写入数据源时,如果列名称和数据结构与您的源匹配,可以将项目指定为记录。 这样,如下所示的公式会将一条记录写入您的数据,就像 Patch 函数一样:
Collect('YourDataSource', {Title: 'First Try', StartDate: Today()})
只要您的数据源具有名为“Title”和“StartDate”的列(它们分别是数据类型 Text 和 Date),此公式就会在您的数据源中创建一条记录,其中标题为“First Try”,而“StartDate”是今天的日期。
只要您将正确的数据类型写入正确的列(包括任何必需列),您就可以通过在第一条记录之后添加多条记录来将它们串在一起。
您还可以再次通过 Collect 语句将整个表写入数据源,只要数据结构匹配即可。
最后,您可以使用简化版本的公式,通过如下语法将整个集合写入数据源:
Collect('YourDataSource', colMyCollection)
就像我们向数据源写入一条记录时一样,当您使用 Collect 将整个表写入数据源时,您的数据结构和列名必须 与您要写入的列匹配。 使用 Collect 函数进行编写的主要优点是代码很简单。
总之,在使用 Collect 写入数据源时请记住以下三个条件:
集合中的列都必须存在于数据源中。 数据源可以有其他列(例如系统生成的列),但集合中您从中执行写入的列必须 存在于要写入的数据源中。 (如果您的集合有一个名为小组件的文本列,那么您的数据源也必须有一个名为小组件的文本列。)
集合中每列的数据类型(例如 Text、Number 或 Date)必须与目标数据类型匹配。
您的集合必须包含数据源中任何必需列的数据。
提示
如有必要,可以使用函数转换集合,以便与以下数据源匹配:
- AddColumns
- DropColumns
- RenameColumns
- ShowColumns
有关详细信息,请参阅 Power Apps 中的 AddColumns、DropColumns、RenameColumns 和 ShowColumns 函数。
有关 Collect 函数和集合的详细信息,请参阅 Collect 文档。
Patch 和 ForAll
Patch函数允许您在数据源中修改或创建记录。 ForAll函数允许您对表中的每条记录运行公式,集合即为表。 您可以综合运用这些函数使用集合内容更新数据源。 尽管与 Collect 技术相比,使用 ForAll/Patch 需要进行更多编码,但当您想要应用更多逻辑时,后者的效果更好。
例如,您可以创建名为 collectionColorData 的集合,其中包含三列:Name、FavoriteColor 和 UpdateSource。 UpdateSource列可为布尔(true 或 false)列。 在使用应用的过程中,用户更新列值,然后选择更新源按钮。 您可将按钮的 OnSelect 属性设置为以下公式:
ForAll(Filter(collectColorData, UpdateSource = true),
Patch(DataSourceName, Defaults(DataSourceName), {NameColumnSource: Name,
FavoriteColorColumnSource: FavoriteColor}))
此公式将新记录添加到数据源 DataSourceName,同时使用集合中的值设置 NameColumnSource 和 FavoriteColorColumnSource 列,但仅限于UpdateSource 设置为 true 的记录。
本示例可进一步优化,但它展示了将集合动态保存到数据源的相关概念和细节。
有关 ForAll 的详细信息,请参阅 ForAll 文档。
有关 Patch 的详细信息,请参阅 Patch 文档。
现在我们已经探索了将数据从集合写入数据源的方法以及我们为什么会使用其中一个方法,接下来让我们做一个练习,练习使用外部数据和集合。