Бележка
Достъпът до тази страница изисква удостоверяване. Можете да опитате да влезете или да промените директориите.
Достъпът до тази страница изисква удостоверяване. Можете да опитате да промените директориите.
Отнася се за: Приложения
за платно Copilot Studio
Работен плот потоци
Модел-управлявани приложения
Power Platform CLI
Dataverse функции
Променя или създава един или повече записи в източник на данни или обединява записи извън източник на данни.
Използвайте функцията 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 на инструкцията за корекция и DataSource на функцията Defaults трябва да съвпадат, за да се създаде нов запис.
Дори ако не работите с източник на данни, можете да използвате 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 на инструкцията за корекция и DataSource на функцията Defaults трябва да съвпадат, за да се създаде нов запис.
- ChangeRecords – Задължително. Един или повече записи, които съдържат свойства за промяна в BaseRecord. Записите на промените се обработват в ред от началото на списъка с аргументи до края, като по-късните стойности на свойствата надменят по-ранните.
Променете или създайте набор от записи в източник на данни
Patch( DataSource, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, ... ] )
- Източник на данни – Задължително. Източникът на данни, който съдържа записи, които искате да промените или ще съдържа записи, които искате да създадете.
- BaseRecordTable – Задължително. Таблица от записи за промяна или създаване. Ако записът е от източник на данни, записът е намерен и модифициран. Ако резултатът от Defaults се използва, създава се запис. DataSource на инструкцията за корекция и DataSource на функцията Defaults трябва да съвпадат, за да се създаде нов запис.
- ChangeRecordTables – Задължително. Една или повече таблици от записи, които съдържат свойства, които да се променят за всеки запис на BaseRecordTable. Записите на промените се обработват в ред от началото на списъка с аргументи до края, като по-късните стойности на свойствата надменят по-ранните.
Обединяване на записи
Patch( Запис1, Запис2 [, ...] )
- Записи - Задължителни. Поне два записа, които искате да обедините. Записите се обработват в реда от началото на списъка с аргументи до края, като по-късните стойности на свойствата заместват по-ранните.
Примери
Променете или създайте запис (в източник на данни)
В тези примери ще модифицирате или създадете запис в източник на данни, наречен IceCream, която съдържа данните в тази таблица и автоматично генерира стойностите в IDколона:
| Формула | Описание | Result |
|---|---|---|
|
Patch- Не, не. LookUp( IceCream, Аромат = "Шоколад" ), { Количество: 400 } ) |
Променя запис в IceCream източник на данни:
|
{ ID: 1, Вкус: "Шоколад", Количество: 400 } Обетът Шоколад в Сладолед източник на данни е променен. |
| Patch( IceCream, Defaults( IceCream ), { Вкус: "Ягода" } ) | Създава запис в IceCream източник на данни:
|
{ ID: 3, Вкус: "Ягода", Количество: 0 } Записът Ягода в Сладолед източник на данни е създадена. |
След като предишните формули са оценени, източник на данни завършва с тези стойности:
Обединяване на записи (извън източник на данни)
| Формула | Описание | Result |
|---|---|---|
| Patch( { Име: "Джеймс", Резултат: 90 }, { Име: "Джим", Предадено: true } ) | Слива два записа извън източник на данни:
|
{ Name: "Jim", score: 90, passed: true } |
Използване на Като или ThisRecord
Използвайки Като или 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"
}
)
)
)
Използване на Като или ThisRecord
Винаги когато е възможно използвайте Като оператор или ThisRecord за да се разграничи лявата страна. Както се препоръчва за горния сценарий.
Когато вашата формула използва множество обхвати с ForAll, Filter, и Lookup на същия източник на данни или таблица е възможно параметрите на обхвата да се сблъскат със същото поле другаде. Поради това се препоръчва използването на Като оператор или ThisRecord за разрешаване на името на полето и избягване на неясноти.
Например можете да използвате Като оператор за премахване на отметката в примера по-долу.
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"
}
)
)
)
За да научите повече за използването на Като оператор и ThisRecord вижте Оператори статия.