Funkcia Patch
Vzťahuje sa na: aplikácie plátna aplikácie riadené modelom Power Platform CLI toky na počítači
Upravuje alebo vytvára jeden alebo viacero záznamov v zdroji údajov alebo zlučuje záznamy mimo zdroja údajov.
Funkciu Patch môžete použiť na úpravu záznamov v zložitých situáciách, napríklad keď vykonávate aktualizácie, ktoré nevyžadujú zásah od používateľa, alebo keď používate formuláre presahujúce cez niekoľko 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, kde sa dozviete, ako používať funkciu Patch:
Prehľad
Funkciu Patch môžete použiť 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, First( Filter( Customers, Name = "Contoso" ) ), { Phone: "1-212-555-1234" } )
Na vytvorenie záznamov použite funkciu Patch s funkciou Defaults. 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" } )
Funkciu Patch môžete použiť na zlúčenie dvoch alebo viacerých záznamov 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 ovládacieho prvku Galéria, 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 bude obsahovať ďalšie informácie, ktoré mu pomôžu základný záznam znova nájsť na úpravy.
- 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 funkcie 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 IfError a IsError s návratovou hodnotou z funkcie Patch na zisťovanie chýb a reagovanie na ne, ako je popísané v časti 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 je možné 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.
Keď funkciu Patch používate týmto spôsobom, vrátená hodnota je tiež tabuľkou, v ktorej každý záznam identicky zodpovedá základným záznamom a záznamom 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 vracia zlúčený záznam a nemení jeho argumenty ani záznamy v žiadnych dátových zdrojoch.
Syntax
Úprava alebo vytvorenie záznamu v zdroji údajov
Oprava( Zdroj údajov, BaseRecord, ChangeRecord1 [, Zmeniť záznam2, … ])
- 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í.
- 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
Oprava( Zdroj údajov, 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í.
- 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
Oprava( Záznam1, Záznam2 [, …] )
- 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ĺpci ID:
Vzorec | Description | Result |
---|---|---|
Náplasť (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 ), { Príchuť: "Jahoda" } ) | 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 | Výsledok |
---|---|---|
Oprava( { Meno: "James", Skóre: 90 }, { Meno: "Jim", Úspešné: pravda } ) | 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.