Poznámka
Na prístup k tejto stránke sa vyžaduje oprávnenie. Môžete sa skúsiť prihlásiť alebo zmeniť adresáre.
Na prístup k tejto stránke sa vyžaduje oprávnenie. Môžete skúsiť zmeniť adresáre.
Vzťahuje sa na: Aplikácie plátna Copilot Studio
Desktop –
postupy
aplikácie riadené modelom, funkcie rozhrania Power Platform CLI
Dataverse
Upravuje alebo vytvára jeden alebo viacero záznamov v zdroji údajov alebo zlučuje záznamy mimo zdroja údajov.
Patch Funkciu používajte na úpravu záznamov v zložitých situáciách, napríklad keď robíte aktualizácie, ktoré nevyžadujú zásah od používateľa, alebo používate formuláre, ktoré presahujú cez viacero obrazoviek.
Ak chcete ľahšie aktualizovať záznamy v zdroji údajov pre jednoduché zmeny, použite namiesto toho ovládací prvok Upraviť formulár. Keď pridáte ovládací prvok Upraviť formulár, poskytnete používateľom formulár na vyplnenie a potom môžete uložiť zmeny do zdroja údajov. Ďalšie informácie nájdete v téme Vysvetlenie údajových formulárov.
Pozrite si toto video a naučte sa používať Patch túto funkciu:
Prehľad
Patch Použite funkciu na úpravu jedného alebo viacerých záznamov zdroja údajov. Hodnoty konkrétnych polí sa upravia bez ovplyvnenia ďalších vlastností. Tento vzorec napríklad zmení telefónne číslo zákazníka Contoso:
Patch( Customers, LookUp( Customers, Name = "Contoso" ), { Phone: "1-212-555-1234" } )
Na vytvorenie záznamov použite funkciu PatchDefaults . Pomocou tohto správania zostavte jednu obrazovku na vytváranie a úpravu záznamov. Tento vzorec napríklad vytvorí záznam pre zákazníka Contoso:
Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )
Poznámka
Pri oprave kolekcie pomocou záznamu zo zdroja údajov s predvolenými hodnotami operácia opravy aktualizuje kolekciu zadanými hodnotami opravy aj predvolenými hodnotami zo zdroja údajov. Zdrojúdajov príkazu opravy a ZdrojÚdajov funkcie Defaults sa musia zhodovať, aby sa vytvoril nový záznam.
Na zlúčenie dvoch alebo viacerých záznamov môžete použiť Patch aj vtedy, ak nepracujete so zdrojom údajov. Tento vzorec napríklad zlúči dva záznamy do jedného, ktorý identifikuje telefónne číslo aj polohu zákazníka Contoso:
Patch( { Name: "Contoso", Phone: "1-212-555-1234" }, { Name: "Contoso", Location: "Midtown" } )
Popis
Úprava alebo vytvorenie záznamu v zdroji údajov
Ak chcete túto funkciu použiť so zdrojom údajov, určte zdroj údajov a potom určte základný záznam:
- Ak chcete záznam upraviť, základný záznam musí pochádzať zo zdroja údajov. Základný záznam môže pochádzať z vlastnosti Items galérie, môže byť umiestnený v kontextovej premennej alebo môže pochádzať z nejakej inej cesty. Základný záznam však dokážete vystopovať späť k zdroju údajov. Je to dôležité, pretože záznam obsahuje ďalšie informácie, ktoré pomáhajú pri opätovnom vyhľadaní záznamu na úpravu.
- Ak chcete vytvoriť záznam, použite funkciu Defaults, aby ste vytvorili základný záznam s predvolenými hodnotami.
Potom určte jeden alebo viac záznamov zmien, z ktorých každý bude obsahovať nové hodnoty vlastnosti, ktoré hodnoty vlastnosti v základnom zázname prepíšu. Záznamy zmien sa spracovávajú v poradí od začiatku zoznamu argumentov do konca a neskoršie hodnoty vlastnosti prepisujú tie skoršie.
Vrátenou hodnotou Patch je záznam, ktorý ste upravili alebo vytvorili. Ak ste záznam vytvorili, vrátená hodnota môže obsahovať vlastnosti, ktoré zdroj údajov vygeneroval automaticky. Návratová hodnota však neposkytuje hodnotu pre polia súvisiacej tabuľky.
Napríklad používate Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name")); a potom MyAccount.'Primary Contact'.'Full Name'. V tomto prípade nemôžete uviesť celé meno. Namiesto toho na prístup do polí súvisiacej tabuľky použite samostatné vyhľadávanie, napríklad:
LookUp(Accounts, Account = MyAccount.Account).'Primary Contact'.'Full Name'
Keď zdroj údajov aktualizujete, môžu sa vyskytnúť problémy. Použite funkcie IfError a IsError s vrátenou hodnotou z Patch na zisťovanie a reagovanie na chyby podľa popisu v téme Spracovanie chýb . Na identifikáciu a preskúmanie problémov môžete použiť aj funkciu Errors, ako je popísané v časti Práca so zdrojmi údajov.
Medzi súvisiace funkcie patrí funkcia Update na nahradenie celého záznamu, a funkcia Collect na vytvorenie záznamu. Na úpravu konkrétnych vlastností v prípade viacerých záznamov na základe podmienky použite funkciu UpdateIf.
Úprava alebo vytvorenie množiny záznamov v zdroji údajov
Patch možno použiť aj na vytvorenie alebo úpravu viacerých záznamov jedným volaním.
Namiesto odovzdania jedného základného záznamu je možné v druhom argumente poskytnúť tabuľku základných záznamov. Záznamy zmien sa tiež poskytujú v tabuľke, aby identicky zodpovedali základným záznamov. Počet záznamov v každej tabuľke zmien musí byť rovnaký ako počet záznamov v základnej tabuľke.
Pri použití Patch týmto spôsobom je vrátená hodnota tiež tabuľkou, v ktorej každý záznam ide o záznam typu one-to-one so základnými záznamami a záznamami zmien.
Zlúčenie záznamov mimo zdroja údajov
Určte dva alebo viac záznamov, ktoré chcete zlúčiť. Záznamy sa spracovávajú v poradí od začiatku zoznamu argumentov do konca a neskoršie hodnoty vlastnosti prepisujú tie skoršie.
Patch vráti zlúčený záznam a nemení jeho argumenty ani záznamy v žiadnom zdroji údajov.
Syntax
Úprava alebo vytvorenie záznamu v zdroji údajov
Patch( ZdrojÚdajov, ZákladnýZáznam, ZáznamZmeny1 [, ChangeRecord2, ... ])
- DataSource – povinné. Zdroj údajov obsahujúci záznam, ktorý chcete upraviť, alebo zdroj údajov, ktorý bude záznam obsahovať, keď ho vytvoríte.
- BaseRecord – povinné. Záznam, ktorý chcete upraviť alebo vytvoriť. Ak záznam pochádza zo zdroja údajov, bude nájdený a upravený. Ak sa použil výsledok funkcie Defaults, záznam sa vytvorí. Zdrojúdajov príkazu opravy a ZdrojÚdajov funkcie Defaults sa musia zhodovať, aby sa vytvoril nový záznam.
- ChangeRecords – povinné. Jeden alebo viac záznamov obsahujúcich vlastnosti, ktoré sa majú upraviť v zázname BaseRecord. Záznamy zmien sa spracovávajú v poradí od začiatku zoznamu argumentov do konca a neskoršie hodnoty vlastnosti prepisujú tie skoršie.
Úprava alebo vytvorenie množiny záznamov v zdroji údajov
Patch( DataSource, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, ... ] )
- DataSource – povinné. Zdroj údajov obsahujúci záznamy, ktoré chcete upraviť, alebo zdroj údajov, ktorý bude záznamy obsahovať, keď ho vytvoríte.
- BaseRecordTable – povinné. Záznamy, ktoré chcete upraviť alebo vytvoriť. Ak záznam pochádza zo zdroja údajov, bude nájdený a upravený. Ak sa použil výsledok funkcie Defaults, záznam sa vytvorí. Zdrojúdajov príkazu opravy a ZdrojÚdajov funkcie Defaults sa musia zhodovať, aby sa vytvoril nový záznam.
- ChangeRecordTables – povinné. Jedna alebo viac tabuliek záznamov obsahujúce vlastnosti, ktoré chcete v prípade každého záznamu tabuľky BaseRecordTable upraviť. Záznamy zmien sa spracovávajú v poradí od začiatku zoznamu argumentov do konca a neskoršie hodnoty vlastnosti prepisujú tie skoršie.
Zlúčenie záznamov
Patch( Record1, Record2 [, ...] )
- Záznamy - povinné. Aspoň dva záznamy, ktoré chcete zlúčiť. Záznamy sa spracúvajú v poradí od začiatku zoznamu argumentov do konca a neskoršie hodnoty vlastnosti prepisujú tie skoršie.
Príklady
Úprava alebo vytvorenie záznamu (v zdroji údajov)
V týchto príkladoch upravíte alebo vytvoríte záznam v zdroji údajov s názvom IceCream, ktorý obsahuje údaje z tejto tabuľky, a automaticky vygenerujete hodnoty v stĺpciID:
| Vzorec | Popis | Result |
|---|---|---|
|
Patch( Zmrzlina, LookUp( IceCream, Flavor = "Chocolate" ), { Quantity: 400 } ) |
Upravenie záznamu v zdroji údajov s názvom IceCream:
|
{ ID: 1, Flavor: "Chocolate", Quantity: 400 } Zmenila sa položka Chocolate v zdroji údajov IceCream. |
| Patch( IceCream, Defaults( IceCream ), { Flavor: "Strawberry" } ) | Vytvorenie záznamu v zdroji údajov s názvom IceCream:
|
{ ID: 3, Flavor: "Strawberry", Quantity: 0 } Vytvorila sa položka Strawberry v zdroji údajov IceCream. |
Po vyhodnotení predchádzajúcich vzorcov vyzerajú hodnoty zdroja údajov takto:
Zlúčenie záznamov (mimo zdroja údajov)
| Vzorec | Popis | Result |
|---|---|---|
| Patch( { Name: "James", Score: 90 }, { Name: "Jim", Passed: true } ) | Zlúčenie dvoch záznamov mimo zdroja údajov:
|
{ Name: "Jim", Score: 90, Passed: true } |
Použite As alebo ThisRecord
Používaním As alebo kľúčové slovo ThisRecord vo vzorci zabráni nejednoznačnému hodnotiacemu kontextu.
V príklade nižšie zvážte prvé vyhľadanie vo vyhľadávaní If.
(OrderID = A[@OrderID]) očakáva sa, že porovná OrderId v rozsahu vyhľadávania s OrderId kolekcie A v rozsahu ForAll . V takom prípade pravdepodobne budete chcieť, aby sa A[@OrderId] riešilo ako lokálny parameter. Ale je to nejednoznačné.
Power Apps v súčasnosti interpretuje OrderId na ľavej a A[@OrderId] na pravej strane ako pole v rozsahu vyhľadávania. Preto vyhľadávanie vždy nájde prvý riadok v [dbo].[Orders1] pretože podmienka je vždy pravdivá (tj. ľubovoľný riadok OrderId sa rovná sebe.)
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"
}
)
)
)
Použite As alebo ThisRecord
Kedykoľvek je to možné, použite operátor As alebo ThisRecord na disambiguáciu na ľavej strane. Ako sa odporúča pre vyššie uvedený scenár.
Keď váš vzorec používa viac rozsahov s ForAll, Filter a Lookup na rovnakom zdroj údajov alebo tabuľke je možné, že parametre rozsahu môžu kolidovať s rovnakým poľom inde. Preto sa odporúča používať operátor As alebo ThisRecord vyriešiť názov poľa a vyhnúť sa nejednoznačnosti.
Môžete napríklad použiť operátora As v nasledujúcom príklade.
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"
}
)
)
)
Prípadne môžete použiť ThisRecord na ten istý účel.
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"
}
)
)
)
Ak sa chcete dozvedieť viac o používaní operátora As a ThisRecord, prečítajte si článok Operátori.