Funkce Patch

Platí pro: Aplikace plátna Modelem řízené aplikace Power Platform CLI Desktopové toky

Upravuje nebo vytváří jeden či více záznamů ve zdroji dat, nebo slučuje záznamy mimo zdroj dat.

Funkci Patch můžete použít k úpravě záznamů ve složitých situacích, například když provedete aktualizace, které nevyžadují zásah od uživatele, nebo když používáte formuláře pokrývající několik obrazovek.

Pro snadnější aktualizaci záznamů ve zdroji dat v případě jednoduchých změn použijte místo toho ovládací prvek Edit form. Když ovládací prvek Edit form přidáte, poskytnete uživatelům formulář k vyplnění a potom změny můžete uložit do zdroje dat. Další informace najdete v tématu Principy datových formulářů.

Podívejte se na toto video a zjistěte, jak používat funkci Patch:

Přehled

Funkci Patch můžete použít k úpravě jednoho nebo více záznamů zdroje dat. Hodnoty konkrétních polí se upraví bez ovlivnění dalších vlastností. Tento vzorec například změní telefonní číslo zákazníka Contoso:

Patch( Customers, First( Filter( Customers, Name = "Contoso" ) ), { Phone: "1-212-555-1234" } )

K vytvoření záznamů použijte funkci Patch s funkcí Defaults. Pomocí tohoto chování sestavte jednu obrazovku pro vytváření a úpravu záznamů. Tento vzorec například vytvoří záznam pro zákazníka Contoso:

Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )

Funkci Patch můžete použít, i když nepracujete se zdrojem dat, a sloučit dva nebo více záznamů. Tento vzorec například sloučí dva záznamy do jednoho, který identifikuje jak telefonní číslo, tak i polohu zákazníka Contoso:

Patch( { Name: "Contoso", Phone: "1-212-555-1234" }, { Name: "Contoso", Location: "Midtown" } )

Popis

Úprava nebo vytvoření záznamu ve zdroji dat

Pokud chcete tuto funkci použít se zdrojem dat, určete zdroj dat a potom určete základní záznam:

  • Pokud chcete záznam upravit, základní záznam musí pocházet ze zdroje dat. Základní záznam může pocházet z vlastnosti Items ovládacího prvku Galerie, může být umístěný v kontextové proměnné nebo může pocházet z nějaké jiné cesty. Můžete však základní záznam vystopovat zpět ke zdroji dat. Je to důležité proto, že záznam bude obsahovat další informace, které mu pomohou základní záznam znovu najít kvůli úpravám.
  • Pokud chcete záznam vytvořit, použijte funkci Defaults, abyste vytvořili základní záznam s výchozími hodnotami.

Potom určete jeden nebo více záznamů změn, z nichž každý bude obsahovat nové hodnoty vlastnosti, které hodnoty vlastnosti v základním záznamu přepíší. Záznamy změn se zpracovávají v pořadí od začátku seznamu argumentů do konce a pozdější hodnoty vlastnosti přepisují ty dřívější.

Návratovou hodnotou funkce Patch je záznam, který jste upravili nebo vytvořili. Pokud jste záznam vytvořili, návratová hodnota může obsahovat vlastnosti, které zdroj dat vygeneroval automaticky. Vrácená hodnota však neposkytuje hodnotu pro pole související tabulky.

Například použijete Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name")); a pak MyAccount.'Primary Contact'.'Full Name'. V tomto případě získat celé jméno. Místo toho pro přístup k polím související tabulky použijte samostatné vyhledávání, například:

LookUp(Accounts, Account = MyAccount.Account).'Primary Contact'.'Full Name'

Když zdroj dat aktualizujete, mohou se vyskytnout problémy. Použijte IfError a IsError s návratovou hodnotou z Patch k detekci chyb a reakci na ně, jak popisuje Zpracování chyb. Pokud chcete problémy identifikovat a zkontrolovat, můžete podle tématu o práci se zdroji dat použít funkci Errors.

Mezi související funkce patří funkce Update k nahrazení celého záznamu, a funkce Collect k vytvoření záznamu. Pro úpravu konkrétních vlastností u více záznamů na základě podmínky použijte funkci UpdateIf.

Úprava nebo vytvoření sady záznamů ve zdroji dat

Funkci Patch můžete také použít k vytvoření nebo úpravě více záznamů jedním voláním.

Místo předání jednoho základního záznamu je možné v druhém argumentu poskytnou tabulku základních záznamů. Záznamy změn se také poskytují v tabulce, aby identicky odpovídaly základním záznamům. Počet záznamů v každé tabulce změn musí být stejný jako počet záznamů v základní tabulce.

Když funkci Patch používáte tímto způsobem, návratová hodnota je také tabulkou, ve které každý záznam identicky odpovídá základním záznamům a záznamům změn.

Sloučení záznamů mimo zdroj dat

Určete dva nebo více záznamů, které chcete sloučit. Záznamy se zpracovávají v pořadí od začátku seznamu argumentů do konce a pozdější hodnoty vlastnosti přepisují ty dřívější.

Funkce Patch vrátí sloučený záznam, aniž by změnila jeho argumenty nebo záznamy v kterémkoli zdroji dat.

Syntaxe

Úprava nebo vytvoření záznamu ve zdroji dat

Patch( ZdrojDat, ZákladníZáznam, ZáznamZměny1 [, ZáznamZměny2, …])

  • ZdrojDat – povinné. Zdroj dat obsahující záznam, který chcete upravit, nebo zdroj dat, který bude záznam obsahovat, jakmile ho vytvoříte.
  • ZákladníZáznam – povinné. Záznam, který chcete upravit nebo vytvořit. Pokud záznam pochází ze zdroje dat, bude nalezen a upraven. Pokud se použil výsledek funkce Defaults, záznam se vytvoří.
  • ZáznamZměny – povinné. Jeden nebo více záznamů obsahující vlastnosti, které se mají upravit v záznamu ZákladníZáznam. Záznamy změn se zpracovávají v pořadí od začátku seznamu argumentů do konce a pozdější hodnoty vlastnosti přepisují ty dřívější.

Úprava nebo vytvoření sady záznamů ve zdroji dat

Patch( ZdrojDat, TabulkaZákladníchZáznamů, TabulkaZáznamůZměn1, [, TabulkaZáznamůZměn2, …] )

  • ZdrojDat – povinné. Zdroj dat obsahující záznamy, které chcete upravit, nebo zdroj dat, který bude záznamy obsahovat, jakmile je vytvoříte.
  • TabulkaZákladníchZáznamů – povinné. Tabulka záznamů, které chcete upravit nebo vytvořit. Pokud záznam pochází ze zdroje dat, bude nalezen a upraven. Pokud se použil výsledek funkce Defaults, záznam se vytvoří.
  • TabulkaZáznamůZměn – povinné. Jedna nebo více tabulek záznamů obsahující vlastnosti, které chcete u každého záznamu tabulky TabulkaZákladníchZáznamů upravit. Záznamy změn se zpracovávají v pořadí od začátku seznamu argumentů do konce a pozdější hodnoty vlastnosti přepisují ty dřívější.

Sloučení záznamů

Patch( Záznam1, Záznam2 [, …] )

  • Záznam – povinné. Alespoň dva záznamy, které chcete sloučit. Záznamy se zpracovávají v pořadí od začátku seznamu argumentů do konce a pozdější hodnoty vlastnosti přepisují ty dřívější.

Příklady

Úprava nebo vytvoření záznamu (ve zdroji dat)

V těchto příkladech upravíte nebo vytvoříte záznam ve zdroji dat s názvem IceCream, který obsahuje data z této tabulky, a automaticky vygenerujete hodnoty ve sloupciID:

Příklad IceCream.

Vzorec Description Result
Patch( IceCream,
LookUp( IceCream, Flavor = "Chocolate" ), { Quantity: 400 } )
Upravení záznamu ve zdroji dat s názvem IceCream:
  • Záznam, který chcete upravit, má ve sloupci ID hodnotu 1. (Je to záznam Chocolate.)
  • Hodnota ve sloupci Quantity se změní na 400.
{ ID: 1, Flavor: "Chocolate", Quantity: 400 }

Změnila se položka Chocolate ve zdroji dat IceCream.
Patch( IceCream, Defaults( IceCream ), { Flavor: "Strawberry" } ) Vytvoření záznamu ve zdroji dat s názvem IceCream:
  • Sloupec ID obsahuje hodnotu 3, kterou zdroj dat vygeneruje automaticky.
  • Sloupec Quantity obsahuje hodnotu 0, což je pro tento sloupec ve zdroji dat IceCream výchozí hodnotou, kterou určuje funkce Defaults.
  • Sloupec Flavor obsahuje hodnotu Strawberry.
{ ID: 3, Flavor: "Strawberry", Quantity: 0 }

Vytvořila se položka Strawberry ve zdroji dat IceCream.

Po vyhodnocení předchozích vzorců vypadají hodnoty zdroje dat takto:

Příklad zmrzliny po.

Sloučení záznamů (mimo zdroj dat)

Vzorec Popis Výsledek
Patch( { Name: "James", Score: 90 }, { Name: "Jim", Passed: true } ) Sloučení dvou záznamů mimo zdroj dat:
  • Hodnoty ve sloupci Name (Jméno) se u jednotlivých záznamu neshodují. Výsledek obsahuje hodnotu (Jim) v záznamu, který je blíž ke konci seznamu argumentů místo hodnoty (James) v záznamu, který je blíž k začátku.
  • První záznam obsahuje sloupec (Score), který ve druhém záznamu neexistuje. Výsledek obsahuje tento sloupec s hodnotou (90).
  • Druhý záznam obsahuje sloupec (Passed), který v prvním záznamu neexistuje. Výsledek obsahuje tento sloupec s hodnotou (true).
{ Name: "Jim", Score: 90, Passed: true }

Použití As nebo ThisRecord

Použití klíčového slova As nebo ThisRecord ve vzorci zabrání nejednoznačnému kontextu hodnocení.

V níže uvedeném příkladu zvažte první vyhledávání v příkazu If. U (OrderID = A[@OrderID]) se očekává srovnání OrderId v oboru vyhledávání s OrderId kolekce A v oboru ForAll rozsah. V tomto případě pravděpodobně budete chtít A[@OrderId] analyzovat jako místní parametr. Ale je to nejednoznačné.

Power Apps v současné době interpretuje obě levé strany OrderId a pravou stranu A[@OrderId] jako pole v oboru vyhledávání. Proto vyhledávání vždy najde první řádek v [dbo].[Orders1], protože podmínka je vždy pravdivá (tj. libovolný řádek OrderId se rovná sám sobě.)

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žití As nebo ThisRecord

Kdykoli je to možné, použijte operátor As nebo ThisRecord k odlišení levé strany. As je doporučeno pro výše uvedený scénář.

Když váš vzorec používá více oborů s ForAll, Filter a Lookup ve stejném zdroji dat nebo tabulce, je možné, že parametry oboru mohou kolidovat se stejným polem jinde. Proto se doporučuje používat operátor As nebo ThisRecord k analýze názvu pole a za účelem vyhnutí se nejednoznačnosti.

Můžete například použít operátor As k rozlišení v příkladu níže.

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"
       }
   )
    )
)

Případně můžete použít ThisRecord ze stejného důvodu.

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"
       }
   )
    )
)

Chcete-li se dozvědět více o použití operátoru AsThisRecord, viz článek Operátory.