Нотатка
Доступ до цієї сторінки потребує авторизації. Можна спробувати ввійти або змінити каталоги.
Доступ до цієї сторінки потребує авторизації. Можна спробувати змінити каталоги.
Застосовується до: Програми
Canvas Copilot Studio
Desktop flows
Model-driven apps
Power Platform CLI
Dataverse functions
Змінює або створює один або кілька записів у джерелі даних або об’єднує записи за межами джерела даних.
Patch Використовуйте функцію, щоб змінювати записи в складних ситуаціях, наприклад під час виконання оновлень, які не потребують взаємодії з користувачем або використання форм, що охоплюють кілька екранів.
Щоб спростити оновлення записів у джерелі даних для простих змін, використовуйте натомість елемент керування Редагування форми. Під час додавання елемента керування Редагування форми користувач має заповнити форму, а потім зберегти зміни в джерелі даних. Щоб отримати додаткові відомості, див. розділ Ознайомлення з формами даних.
Перегляньте це відео, щоб дізнатися, як використовувати Patch функцію:
Зведення
Скористайтеся функцією Patch , щоб змінити один або кілька записів джерела даних. Значення певних полів змінюються, не впливаючи на інші властивості. Наприклад, ця формула змінює номер телефону клієнта Contoso:
Patch( Customers, LookUp( Customers, Name = "Contoso" ), { Phone: "1-212-555-1234" } )
Використовується Patch з функцією Defaults для створення записів. За допомогою цих дій можна настроїти один екран для створення й редагування записів. Наприклад, ця формула створює запис для клієнта Contoso:
Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )
Нотатка
Якщо ви виправите колекцію за допомогою запису з джерела даних із стандартними значеннями, операція виправлення оновлює колекцію з указаними значеннями виправлень і значеннями за замовчуванням із джерела даних. Щоб створити новий запис, необхідно відповідати джерелу даних і функції DataSource за промовчанням.
Навіть якщо ви не працюєте з джерелом даних, можна об'єднати Patch кілька записів. Наприклад, ця формула об’єднує два записи в один, який ідентифікує як номер телефону, так і розташування для Contoso:
Patch( { Name: "Contoso", Phone: "1-212-555-1234" }, { Name: "Contoso", Location: "Midtown" } )
Опис
Зміна або створення запису в джерелі даних
Щоб використовувати цю функцію з джерелом даних, укажіть джерело даних, а потім укажіть базовий запис.
- Щоб змінити запис, базовий запис має бути частиною джерела даних. Можливо, базовий запис пройшов через властивість Елементи колекції, був поміщений у змінну контексту або пройшов інший шлях. Проте базовий запис можна простежити до джерела даних. Це важливо, оскільки запис містить додаткові відомості, які допоможуть знову знайти запис для змінення.
- Щоб створити запис, використовуйте функцію Defaults для створення базового запису зі значеннями за замовчуванням.
Потім укажіть один або кілька записів для змінення, кожен з яких містить нові значення властивості, які змінюють значення властивості в базовому записі. Записи для змінення обробляються від початку й до кінця списку аргументів, а останні значення властивості змінюють попередні.
Повернуте значення Patch – це запис, який ви змінили або створили. Якщо ви створили запис, повернуте значення може містити властивості, створені джерелом даних автоматично. Проте значення, що повертається, не забезпечує значення полів пов'язаної таблиці.
Наприклад, ви використовуєте Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name")); а потім MyAccount.'Primary Contact'.'Full Name'. У цьому випадку не можна давати повне ім’я. Натомість, щоб отримати доступ до полів зв'язаної таблиці, скористайтеся окремим полем підстановки, наприклад:
LookUp(Accounts, Account = MyAccount.Account).'Primary Contact'.'Full Name'
Під час оновлення джерела даних може виникнути одна або кілька проблем. Скористайтеся функціями IfError і IsError , Patch щоб виявляти помилки та реагувати на помилки, як описано в розділі Обробка помилок . Також можна використовувати функцію Errors для пошуку й аналізу проблем, як описано в статті Робота з джерелами даних.
Пов’язані функції містять функцію Update, щоб замінити весь запис, а також функцію Collect для створення запису. Щоб змінити певні властивості кількох записів на основі умови, використовуйте функцію UpdateIf.
Зміна або створення набору записів у джерелі даних
Patch також можна використовувати для створення або змінення кількох записів за допомогою одного виклику.
У другому аргументі можна вказати таблицю базових записів замість того, щоб передавати окремий базовий запис. У таблиці також містяться записи зі змінами, що відповідають базовим записам. Кількість записів у кожній таблиці зі змінами має збігатися з кількістю записів у базовій таблиці.
Patch Таким чином, повернуте значення також є таблицею з кожним записом, що відповідає один для одного з основою та змінює записи.
Об’єднання записів поза межами джерела даних
Укажіть два або більше записів, які потрібно об’єднати. Записи обробляються від початку й до кінця списку аргументів, а останні значення властивості змінюють попередні.
Patch повертає об'єднаний запис і не змінює його аргументи або записи в будь-яких джерелах даних.
Синтаксис
Зміна або створення запису в джерелі даних
Patch( DataSource, BaseRecord, ChangeRecord1 [, ChangeRecord2, ... ])
- Джерело даних– Обов’язковий. Джерело даних, що містить запис, який потрібно змінити, або буде містити запис, який необхідно створити.
- BaseRecord – обов’язковий. Запис, який потрібно змінити або створити. Якщо запис є частиною джерела даних, його буде знайдено та змінено. Якщо використовується результат функції Defaults, створюється запис. Щоб створити новий запис, необхідно відповідати джерелу даних і функції DataSource за промовчанням.
- ChangeRecords – Обов’язковий. Один або кілька записів, що містять властивості, які потрібно змінити в BaseRecord. Записи для змінення обробляються від початку й до кінця списку аргументів, а останні значення властивості змінюють попередні.
Зміна або створення набору записів у джерелі даних
Patch( DataSource, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, ... ] )
- Джерело даних– Обов’язковий. Джерело даних, що містить записи, які потрібно змінити, або буде містити записи, які необхідно створити.
- BaseRecordTable – обов’язковий. Таблиця записів, які потрібно змінити або створити. Якщо запис є частиною джерела даних, його буде знайдено та змінено. Якщо використовується результат функції Defaults, створюється запис. Щоб створити новий запис, необхідно відповідати джерелу даних і функції DataSource за промовчанням.
- ChangeRecordTables – обов’язковий. Одна або кілька таблиць записів, що містять властивості, які необхідно змінити для кожного запису BaseRecordTable. Записи для змінення обробляються від початку й до кінця списку аргументів, а останні значення властивості змінюють попередні.
Злиття записів
Patch( Record1, Record2 [, ...] )
- Записи - обов’язкові. Виберіть принаймні два записи для об’єднання. Записи обробляються від початку й до кінця списку аргументів, а останні значення властивості змінюють попередні.
Приклади
Зміна або створення запису (в джерелі даних)
У цих прикладах ви зміните або створите запис у джерелі даних з іменем IceCream. Запис міститиме дані в цій таблиці й автоматично створить значення в стовпціІдентифікатор:
| Формула | Опис | Результат |
|---|---|---|
|
Patch(IceCream, LookUp( IceCream, Flavor = "Chocolate" ), { Кількість: 400 } ) |
Змінює запис у джерелі даних IceCream:
|
{ ID: 1, Смак: "Шоколад", Кількість: 400 } Запис Chocolate у джерелі даних IceCream змінено. |
| Patch( IceCream, Defaults( IceCream ), { Flavor: "Полуниця" } ) | Створює запис у джерелі даних IceCream:
|
{ ID: 3, Смак: "Полуниця", Кількість: 0 } У джерелі даних IceCream створено запис Strawberry. |
Після обчислення попередніх формул джерело даних отримує такі значення:
Об’єднання записів (поза межами джерела даних)
| Формула | Опис | Результат |
|---|---|---|
| Patch( { Ім'я: "Джеймс", оцінка: 90 }, { Ім'я: "Джим", передано: true } ) | Об’єднує записи поза межами джерела даних:
|
{ Ім'я: "Джим", оцінка: 90, передано: true } |
Використання As або ThisRecord
Використання ключового слова As або ThisRecord у формулі дозволяє уникнути неоднозначного контексту перевірки.
У наведеному нижче прикладі розглянемо першу підстановку у виразі If.
(OrderID = A[@OrderID]) очікується порівняння OrderId в області пошуку з обсягом OrderId колекції A в ForAll області видимості. У цьому випадку ви, ймовірно, очікуєте, що A[@OrderId] означатиме локальний параметр. Але це неоднозначно.
Power Apps наразі інтерпретує і OrderId у лівій частині, і A[@OrderId] у правій частині, як поле з області підстановки. Тому підстановка завжди знаходитиме перший рядок в [dbo].[Orders1], оскільки умова завжди буде істинною (іншими словами, OrderId будь-якого рядка дорівнюватиме самому собі).
ClearCollect(
A,
Filter(
'[dbo].[Orders1]',
OrderId = 8888888
)
);
ForAll(
A,
If(
LookUp(
'[dbo].[Orders1]',
OrderId = A[@OrderId],
"OK"
) = "OK",
Patch(
'[dbo].[Orders1]',
LookUp(
'[dbo].[Orders1]',
OrderId = A[@OrderId]
),
{
OrderName: "val1"
}
),
Patch(
'[dbo].[Orders1]',
Defaults('[dbo].[Orders1]'),
{
OrderName: "val2"
}
)
)
)
Використання As або ThisRecord
Де це можливо, використовуйте оператор As або ThisRecord, щоб усунути неоднозначність у лівій частині. Як рекомендується для вищеописаного сценарію.
Якщо у формулі використовуються кілька областей з ForAll, Filter та Lookup для одного джерела даних або таблиці, можливо, параметри області можуть стикнутися із тим самим полем деінде, Тому рекомендовано використовувати оператор As або ThisRecord для розкриття імені поля та усунення неоднозначності.
Наприклад, можна використати оператор As для усунення неоднозначності у наведеному нижче прикладі.
ClearCollect(
A,
Filter(
'[dbo].[Orders1]',
OrderId = 8888888
)
);
ForAll(
A,
If(
LookUp(
'[dbo].[Orders1]' As B,
B.OrderId = A[@OrderId],
"OK"
) = "OK",
Patch(
'[dbo].[Orders1]',
LookUp(
'[dbo].[Orders1]' As C,
C.OrderId = A[@OrderId]
),
{
OrderName: "val1"
}
),
Patch(
'[dbo].[Orders1]',
Defaults('[dbo].[Orders1]'),
{
OrderName: "val2"
}
)
)
)
Крім того, для цієї ж мети можна використати ThisRecord.
ClearCollect(
A,
Filter(
'[dbo].[Orders1]',
OrderId = 8888888
)
);
ForAll(
A,
If(
LookUp(
'[dbo].[Orders1]',
ThisRecord.OrderId = A[@OrderId],
"OK"
) = "OK",
Patch(
'[dbo].[Orders1]',
LookUp(
'[dbo].[Orders1]',
ThisRecord.OrderId = A[@OrderId]
),
{
OrderName: "val1"
}
),
Patch(
'[dbo].[Orders1]',
Defaults('[dbo].[Orders1]'),
{
OrderName: "val2"
}
)
)
)
Щоб дізнатися більше про використання оператора As і ThisRecord, див статтю Оператори.