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

Funkciu Patch môžete tiež použiť 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.

Funkcia Patch vráti zlúčený záznam bez toho, aby zmenila jeho argumenty alebo záznamy v ktoromkoľvek zdroji údajov.

Syntax

Úprava alebo vytvorenie záznamu v zdroji údajov

PatchDataSource, BaseRecord, ChangeRecord1 [, 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í.
  • ChangeRecord(s) – 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í.
  • ChangeRecordTable(s) – 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

PatchRecord1, Record2 [, …] )

  • Record1, Record2, … – 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:

Príklad zmrzliny.

Vzorec Description Result
Patch( IceCream,
LookUp( IceCream, Flavor = "Chocolate" ), { Quantity: 400 } )
Upravenie záznamu v zdroji údajov s názvom IceCream:
  • Záznam, ktorý chcete upraviť, má v stĺpci ID hodnotu 1. (Je to záznam Chocolate.)
  • Hodnota v stĺpci Quantity sa zmení na 400.
{ 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:
  • Stĺpec ID obsahuje hodnotu 3, ktorú zdroj údajov vygeneruje automaticky.
  • Stĺpec Quantity obsahuje hodnotu 0, čo je pre tento stĺpec v zdroji údajov IceCream predvolenou hodnotou, ktorú určuje funkcia Defaults.
  • Stĺpec Flavor obsahuje hodnotu Strawberry.
{ 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:

Príklad zmrzliny po.

Zlúčenie záznamov (mimo zdroja údajov)

Vzorec Popis Výsledok
Patch( { Name: "James", Score: 90 }, { Name: "Jim", Passed: true } ) Zlúčenie dvoch záznamov mimo zdroja údajov:
  • Hodnoty v stĺpci Name (Názov) sa v prípade jednotlivých záznamov nezhodujú. Výsledok obsahuje hodnotu (Jim) v zázname, ktorý je bližšie ku koncu zoznamu argumentov namiesto hodnoty (James) v zázname, ktorý je bližšie k začiatku.
  • Prvý záznam obsahuje stĺpec (Score), ktorý v druhom zázname neexistuje. Výsledok obsahuje tento stĺpec s hodnotou (90).
  • Druhý záznam obsahuje stĺpec (Passed), ktorý v prvom zázname neexistuje. Výsledok obsahuje tento stĺpec s hodnotou (pravda).
{ 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]) sa očakáva porovnanie 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. As 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.