Функции Update и UpdateIf

Применимо к: приложениям на основе холста приложениям на основе модели

Обновление записей в источнике данных.

Description

Функция Update

Используйте функцию Update для замены всей записи в источнике данных. Функции UpdateIf и Patch, наоборот, изменяют одно или несколько значений в записи, оставляя другие значения без изменений.

При использовании коллекции вся запись должна совпадать. В коллекциях допускаются повторяющиеся записи, так что возможны совпадения нескольких записей. Для обновления всех экземпляров записи можно использовать аргумент RemoveFlags.All, иначе обновляется только один экземпляр записи.

Если в источнике данных значение столбца создается автоматически, такое значение требует повторного подтверждения.

Функция UpdateIf

Используйте функцию UpdateIf для изменения одного или нескольких значений в одной или нескольких записях, которые соответствуют одному или нескольким условиям. Условием может быть любая формула, которая возвращает результат true или false и может содержать ссылки на столбцы в источнике данных (по имени). Функция оценивает условие для каждой записи и изменяет все записи, для которых возвращен результат true.

Чтобы указать изменение, используйте запись изменения, содержащую новые значения свойств. Если указать эту запись изменения в фигурных скобках, формулы свойств смогут ссылаться на свойства изменяемой записи. Такое поведение можно использовать для изменения записей на основе формул.

Так же как и функцию UpdateIf, функцию Patch можно использовать для изменения определенных столбцов записи без изменения других столбцов.

Функции Update и UpdateIf возвращают измененный источник данных в виде таблицы. Необходимо использовать любую из этих функций в формуле поведения.

Делегирование

При использовании с источником данных эти функции невозможно делегировать. Будет извлечена только первая часть источника данных, затем будет применена функция. Это может не отражать ситуацию в целом. Во время разработки может появиться предупреждение, чтобы напомнить вам об этом ограничении.

Поддержка делегирования (экспериментальная версия)

Поддержка делегирования для UpdateIf и RemoveIf теперь находится на стадии экспериментальной предварительной версии (по умолчанию отключено) для источников данных, которые ее поддерживают. Если источник данных не поддерживает эту функцию, Power Apps теперь отправит запрос на сервер и извлечет все данные, которые соответствуют выражению фильтра, вплоть до максимального размера 500, 2000 или размера страницы данных. Затем он обновит эти записи и отправит каждую обратно на сервер для обновления.

Синтаксис

Update( DataSource, OldRecord, NewRecord [, RemoveFlags.All ] )

  • DataSource — обязательный аргумент. Это источник данных, содержащий записи, которые требуется заменить.
  • OldRecord — обязательный аргумент. Это запись для замены.
  • NewRecord — обязательный аргумент. Запись, которой нужно заменить исходную запись. Она не является записью изменения. Выполняется замена всей записи, а для отсутствующих свойств будет указано значение blank.
  • 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 не указано в записи замены, так что для него будет возвращено значение blank. Замена записи, когда количество не указано.

Источник данных IceCream изменен.
UpdateIf( IceCream, true, { Quantity: 0 } ) Эта формула устанавливает значение 0 для свойства Quantity во всех записях в источнике данных. Задание для всех количества 0.

Источник данных IceCream изменен.

Пошаговое руководство

  1. Импортируйте или создайте коллекцию с именем Inventory и отобразите ее в коллекции, как описано в этой статье.

  2. Присвойте коллекции имя ProductGallery.

  3. Добавьте ползунок с именем UnitsSold и для его свойства Max задайте значение в виде следующего выражения:
    ProductGallery.Selected.UnitsInStock

  4. Добавьте кнопку и задайте следующую формулу в качестве значения свойства OnSelect:
    UpdateIf(Inventory, ProductName = ProductGallery.Selected.ProductName, {UnitsInStock:UnitsInStock-UnitsSold.Value})

  5. Нажмите клавишу F5, выберите продукт в коллекции, укажите значение с помощью ползунка и затем нажмите кнопку.

    Указанное вами число единиц продукта в наличии уменьшится соответствующим образом.