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:
Overview
Patch Použite funkciu na úpravu jedného alebo viacerých záznamov zdroja údajov. Aktualizuje hodnoty konkrétnych polí bez ovplyvnenia iný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" } )
Note
Keď opravíte kolekciu použitím záznamu zo zdroja dát s predvolenými hodnotami, operácia aktualizácie aktualizuje kolekciu o špecifikované hodnoty záplaty aj predvolené hodnoty zo zdroja dát. DataSource príkazu patch a DataSource 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" } )
Description
Ú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:
- Na úpravu záznamu musí základný záznam pochádzať zo zdroja dát. Základný záznam môžete získať cez vlastnosť Items v galérii, umiestniť ho do kontextovej premennej alebo ho získať inou cestou. Ale musíte byť schopní vystopovať základný záznam až k zdroju dát. Táto požiadavka je dôležitá, pretože záznam obsahuje ďalšie informácie, ktoré vám pomôžu záznam znovu nájsť 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
Môžete tiež vytvoriť alebo upraviť Patch viacero záznamov jedným hovorom.
Namiesto odovzdávania jedného základného záznamu poskytnite tabuľku základných záznamov v druhom argumente. Poskytujte aj záznamy zmien v tabuľke, ktoré zodpovedajú jeden ku jednému so základnými záznamami. Počet záznamov v každej tabuľke zmien musí byť rovnaký ako počet záznamov v základnej tabuľke.
Keď používate Patch týmto spôsobom, návratová hodnota je tiež tabuľka, kde každý záznam zodpovedá jeden ku jednému základnému a zmennému záznamu.
Zlúčenie záznamov mimo zdroja údajov
Určte dva alebo viac záznamov, ktoré chcete zlúčiť. Funkcia spracováva záznamy v poradí od začiatku zoznamu argumentov až do konca, pričom neskoršie hodnoty vlastností prepisujú tie starš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 dát, funkcia ho nájde a upraví. Ak sa použije výsledok Defaults , funkcia vytvorí záznam. 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. Funkcia spracováva zmeny záznamov v poradí od začiatku zoznamu argumentov až po koniec, pričom neskoršie hodnoty vlastností prepisujú tie starš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 dát, funkcia ho nájde a upraví. Ak sa použije výsledok Defaults , funkcia vytvorí záznam. 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ť. Funkcia spracováva zmeny záznamov v poradí od začiatku zoznamu argumentov až po koniec, pričom neskoršie hodnoty vlastností prepisujú tie staršie.
Merge records
Patch( Record1, Record2 [, ...] )
- Záznamy - povinné. Aspoň dva záznamy, ktoré chcete zlúčiť. Funkcia spracováva záznamy v poradí od začiatku zoznamu argumentov až do konca, pričom neskoršie hodnoty vlastností prepisujú tie staršie.
Examples
Úprava alebo vytvorenie záznamu (v zdroji údajov)
V týchto príkladoch upravujete alebo vytvárate záznam v dátovom zdroji s názvom IceCream. Zdroj údajov obsahuje údaje v tejto tabuľke a automaticky generuje hodnoty v stĺpciID:
Ak chcete vytvoriť verziu tohto dátového zdroja v pamäti, aby ste mohli vyskúšať tieto príklady, vyhodnoťte tento vzorec:
ClearCollect( IceCream,
{ ID: 1, Flavor: "Chocolate", Quantity: 100 },
{ ID: 2, Flavor: "Vanilla", Quantity: 200 }
)
| Formula | Description | Result |
|---|---|---|
|
Patch( Zmrzlina, LookUp( IceCream, Flavor = "Chocolate" ), { Quantity: 400 } ) |
Upravenie záznamu v zdroji údajov s názvom IceCream:
|
{ ID: 1, Príchuť: "Čokoláda", Množstvo: 400 } Záznam Čokoláda v dátovom zdroji IceCream je upravený. |
| Patch( IceCream, Default( IceCream ), { Flavor: "Strawberry" } ) | Vytvorenie záznamu v zdroji údajov s názvom IceCream:
|
{ ID: 3, Príchuť: "Jahoda", Množstvo: 0 } Záznam Strawberry v dátovom zdroji IceCream je vytvorený. |
Po vyhodnotení predchádzajúcich vzorcov zdroj údajov končí týmito hodnotami:
Zlúčenie záznamov (mimo zdroja údajov)
| Formula | Description | Result |
|---|---|---|
| Patch( { Meno: "James", skóre: 90 }, { Meno: "Jim", Úspešné: pravda } ) | Zlúčenie dvoch záznamov mimo zdroja údajov:
|
{ Meno: "Jim", skóre: 90, Úspešné: pravda } |
Upraviť alebo vytvoriť súbor záznamov (v dátovom zdroji)
Keď používate Patch tabuľky namiesto jednotlivých záznamov, môžete vytvoriť alebo upraviť viacero záznamov v jednom hovore. Návratová hodnota je tabuľka záznamov, ktorá zodpovedá jeden ku jednému vstupným tabuľkám.
Tento príklad aktualizuje množstvo pre viaceré príchute v zdroji dát IceCream naraz:
Patch(
IceCream,
Table(
{ ID: 1, Flavor: "Chocolate", Quantity: 150 },
{ ID: 2, Flavor: "Vanilla", Quantity: 200 }
),
Table(
{ Quantity: 300 },
{ Quantity: 400 }
)
)
Výsledkom je tabuľka s aktualizovanými záznamami: { ID: 1, Flavor: "Chocolate", Quantity: 300 } a { ID: 2, Flavor: "Vanilla", Quantity: 400 }.
Tento príklad vytvára viacero nových záznamov pomocou predvolených hodnôt:
Patch(
IceCream,
Table( Defaults( IceCream ), Defaults( IceCream ) ),
Table(
{ Flavor: "Mint", Quantity: 60 },
{ Flavor: "Peach", Quantity: 80 }
)
)
Note
Pri používaní Patch s tabuľkami musí počet záznamov v každej tabuľke zmien zodpovedať počtu záznamov v základnej tabuľke. Inak dôjde k chybe.
Na detekciu chýb pri úprave viacerých záznamov použite IfError.
IfError je preferovaný mechanizmus a funguje naprieč Power Fx hostmi:
IfError(
Patch(
IceCream,
baseRecords,
changeRecords
),
Notify( "Some records failed to update: " & FirstError.Message, NotificationType.Error )
)
Patch s typmi stĺpcov v Dataverse
Nasledujúce príklady sa špecificky vzťahujú na Microsoft Dataverse dátové zdroje. Tvary záznamov sa líšia podľa zdroja dát (napríklad SharePoint a SQL Server majú rôzne formáty).
Stĺpec výberu: Na nastavenie stĺpca Choice použite priamo hodnotu enum. Tento príklad nastavuje stĺpec voľby Stav v tabuľke Účtov :
Patch(
Accounts,
LookUp( Accounts, 'Account Name' = "Contoso" ),
{ 'Status': 'Status (Accounts)'.Active }
)
Vyhľadávací stĺpec: Na nastavenie stĺpca Vyhľadávanie poskytnite záznam s primárnym kľúčom súvisiacej tabuľky. Tento príklad nastavuje vyhľadávanie Primárneho kontaktu na záznam Účtov :
Patch(
Accounts,
LookUp( Accounts, 'Account Name' = "Contoso" ),
{ 'Primary Contact': LookUp( Contacts, 'Full Name' = "John Smith" ) }
)
Note
Tieto príklady typu stĺpca sú špecifické pre Dataverse. Iné zdroje dát, ako SharePoint alebo SQL Server, môžu vyžadovať odlišné tvary záznamov pre podobné typy stĺpcov. Pozrite sa na dokumentáciu pre váš konkrétny zdroj dát pre správny formát.
Delegácia vo formulách, ktoré používajú Patch
Samotná funkcia Patch nie je predmetom delegácie , pretože zapisuje do dátového zdroja namiesto toho, aby ho dotazovala. Varovania pred delegáciou sa však môžu objaviť vo vzorcoch, ktoré používajú Patch , ak časť formuly na výber záznamov (napríklad Filter, LookUp alebo ForAll) zahŕňa dotaz, ktorý presahuje limity delegácie zdroja dát.
Keď uvidíte varovanie o delegácii vo vzorci, ktorý obsahuje Patch, skontrolujte, či sa varovanie vzťahuje na funkcie na získavanie dát namiesto Patch na seba. Viac informácií o delegovaní nájdete v článku Pochopte delegovanie v aplikácii Canvas.
Bežné chyby funkcie Patch
Pri použití tejto Patch funkcie môžu nastať chyby spôsobené konektivitou zdroja dát, oprávneniami alebo konfliktmi údajov. Použite IfError a IsError na detekciu chýb a primeranú reakciu.
"Sieťová chyba pri používaní Patch funkcie": Táto chyba zvyčajne znamená, že aplikácia nemôže dosiahnuť dátový zdroj. Bežné príčiny zahŕňajú stratu internetového pripojenia, dočasnú nedostupnosť dátového zdroja alebo nedostatočné oprávnenia pre aktuálneho používateľa. Zabalte Patch volanie do IfError , aby ste používateľom poskytli zmysluplnú správu.
"Existujú konflikty so zmenami na serveri": Táto chyba nastáva, keď iný používateľ alebo proces upraví ten istý záznam medzi tým, ako vaša aplikácia záznam prečíta a zapíše zmenu. Obnovte zdroj dát zavolaním funkcie Obnoviť a skúste operáciu znova.
Chyby oprávnení: Ak používateľ nemá povolenie vytvárať alebo meniť záznamy v dátovom zdroji, Patch hovor zlyhá. Použite IfError na zachytenie chýb súvisiacich s oprávneniami a usmernenie používateľa.
Pre všeobecné vzory spracovania chýb pozri Spracovanie chýb.
Použite As alebo ThisRecord
Použite kľúčové slovo As alebo ThisRecord vo vašom vzorci, aby ste sa vyhli nejednoznačnému hodnotiacemu kontextu.
V nasledujúcom príklade zvážme prvé Lookup v tvrdení If .
(OrderID = A[@OrderID]) Očakáva sa, že porovná v OrderIdLookup rozsahu s OrderId kolekciou A v ForAll rozsahu. V takom prípade pravdepodobne budete chcieť A[@OrderId] vyriešiť ako lokálny parameter. Ale je to nejednoznačné.
Power Apps momentálne interpretuje ľavú stranu OrderId aj pravú stranu A[@OrderId] ako pole v rozsahu Lookup. Preto vždy nájde Lookup prvý riadok v , [dbo].[Orders1] pretože podmienka je vždy pravdivá (teda každý riadok OrderId je rovný sám 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 kľúčové slovo ThisRecord na rozlíšenie ľavej strany. Ako sa odporúča pre predchádzajúci scenár.
Keď váš vzorec používa viacero rozsahov s ForAll, Filter, a na tom istom zdroji Lookup dát alebo tabuľke, parametre rozsahu sa môžu zraziť s rovnakým poľom inde. Preto použite operátor As alebo ThisRecord na vyriešenie názvu poľa a vyhnite sa nejasnostiam.
Napríklad môžete použiť operátor As na rozlíšenie 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žití operátora As a ThisRecord, pozrite si článok Operátory .