Update 和 UpdateIf 函数
适用于:画布应用模型驱动应用
Description
Update 函数
使用 Update 函数可替换数据源中的整个记录, 而使用 UpdateIf 和 Patch 函数则可修改记录中的一个或多个值,对其他值不作处理。
对于集合来说,整个记录必须匹配。 集合允许重复记录,因此可能会匹配多个记录。 可使用 RemoveFlags.All 参数来更新记录的所有副本;否则仅更新记录的一个副本。
如果数据源自动生成列的值,则该列的值必须再次进行确认。
UpdateIf 函数
使用 UpdateIf 函数可以在一个或多个记录中修改一个或多个值,而这些记录则与一个或多个条件匹配。 条件可以是其结果为 true 或 false 的任意公式,并且可以通过名称引用数据源的列。 函数会评估每个记录的条件,并修改结果为 true 的任何记录。
若要指定某个修改,请使用包含新的属性值的更改记录。 如果使用大括号以内联方式提供此更改记录,则属性公式可以引用要修改的记录的属性。 可以通过此行为根据公式修改记录。
就像使用 UpdateIf 一样,也可使用 Patch 函数更改记录的特定列,而不影响其他列。
Update 和 UpdateIf 都以表的形式返回修改的数据源。 必须在行为公式中使用任一函数。
代理
与数据源一起使用时,无法委派这些函数。 将仅检索数据源的第一部分,然后应用该函数。 这并不能代表整个过程。 创作时可能会出现警告,以提醒您存在此限制。
委派支持
只有部分数据源支持 UpdateIf。 如果数据源不支持此功能,Power Apps 将向服务器发送查询,并检索符合筛选表达式的所有数据,最大值为 500 或 2000 或者数据页面大小。 然后,它将更新那些记录并将每一条记录发送回要更新的服务器。
语法
Update( DataSource, OldRecord, NewRecord [, RemoveFlags.All ] )
- DataSource – 必需。 数据源,其中包含要替换的记录。
- OldRecord – 必需。 要替换的记录。
- NewRecord – 必需。 替换记录。 这不是更改记录。 将替换整个记录,缺失的属性将包含空白。
- RemoveFlags.All – 可选。 在集合中,同一记录可能出现多次。 指定 RemoveFlags.All 参数以更新记录的所有副本。
UpdateIf( DataSource, Condition1, ChangeRecord1 [, Condition2, ChangeRecord2, ... ] )
- DataSource – 必需。 数据源,其中包含要修改的一个或多个记录。
- Condition(s) – 必需。 一个公式,对于一个或多个需修改的记录,该公式的求值结果为 true。 可以在公式中使用 DataSource 的列名。
- ChangeRecord(s) - 必需。 对于每个相应的条件,将对符合条件的 DataSource 记录应用新属性值的更改记录。 如果使用大括号以内联方式提供记录,则可在属性公式中使用现有记录的属性值。
示例
在以下示例中,您将替换或修改某个数据源中的记录,该数据源名为 IceCream 且以下表中的数据开头:
公式 | 描述 | 结果 |
---|---|---|
Update( IceCream, First( Filter( IceCream, Flavor="Chocolate" ) ), { ID: 1, Flavor: "Mint Chocolate", Quantity:150 } ) |
替换数据源中的某条记录。 | 修改了 IceCream 数据源。 |
UpdateIf( IceCream, Quantity > 175, { Quantity: Quantity + 10 } ) | 修改其 Quantity 大于 175 的记录。 Quantity 字段按 10 递增,其他字段不进行修改。 | 修改了 IceCream 数据源。 |
Update( IceCream, First( Filter( IceCream, Flavor="Strawberry" ) ), { ID: 3, Flavor: "Strawberry Swirl"} ) |
替换数据源中的某条记录。 替换记录中未提供 Quantity 属性,因此在结果中该属性将为空白。 | 修改了 IceCream 数据源。 |
UpdateIf( IceCream, true, { Quantity: 0 } ) | 将数据源中所有记录的 Quantity 属性的值设置为 0。 | 修改了 IceCream 数据源。 |
分步操作
导入或创建名为 Inventory 的集合,让其显示在库中,如在库中显示数据所述。
将库命名为 ProductGallery。
添加名为 UnitsSold 的滑块,将其 Max 属性设置为以下表达式:
ProductGallery.Selected.UnitsInStock添加一个按钮,然后将其 OnSelect 属性设置为以下公式:
UpdateIf(Inventory, ProductName = ProductGallery.Selected.ProductName, {UnitsInStock:UnitsInStock-UnitsSold.Value})按 F5,在库中选择一个产品,使用滑块指定一个值,然后选择该按钮。
所指定产品的库存单元数下降指定的数量。