Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro: Aplikace
plátna Copilot Studio
Desktopové toky
modelem řízené aplikace
Power Platform CLI
– funkce Dataverse
Upravuje nebo vytváří jeden či více záznamů ve zdroji dat, nebo slučuje záznamy mimo zdroj dat.
Patch Pomocí funkce můžete upravovat záznamy v složitých situacích, například když provedete aktualizace, které nevyžadují žádnou interakci uživatele nebo používají formuláře, které pokrývají více 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ářů.
V tomto videu Patch se dozvíte, jak používat funkci:
Overview
Patch Pomocí funkce můžete upravit jeden nebo více záznamů zdroje dat. Aktualizuje hodnoty konkrétních polí , aniž by ovlivnila ostatní vlastnosti. Tento vzorec například změní telefonní číslo zákazníka Contoso:
Patch( Customers, LookUp( Customers, Name = "Contoso" ), { Phone: "1-212-555-1234" } )
Slouží Patch k vytváření záznamů pomocí funkce 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" } )
Note
Když opravíte kolekci pomocí záznamu ze zdroje dat s výchozími hodnotami, operace aktualizace aktualizace kolekce o specifikované hodnoty záplat i výchozí hodnoty ze zdroje. DataSource příkazu patch a DataSource funkce Defaults musí odpovídat, aby vznikl nový záznam.
I když nepracujete se zdrojem dat, můžete použít Patch ke sloučení dvou 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" } )
Description
Ú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:
- Pro úpravu záznamu musí základní záznam pocházet ze zdroje. Základní záznam můžete získat přes vlastnost Items v galerii, umístit ho do kontextové proměnné, nebo ho získat jinou cestou. Ale musíte být schopni vystopovat základní záznam zpět ke zdroji dat. Tento požadavek je důležitý, protože záznam obsahuje další informace, které vám pomohou záznam znovu najít pro úpravu.
- 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ávratová Patch hodnota je záznam, který jste upravili nebo vytvořili. Pokud jste vytvořili záznam, může návratová hodnota 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'
Při aktualizaci zdroje dat může dojít k jednomu nebo několika problémům. Použijte IfError a IsError s návratovou hodnotou, abyste Patch zjistili chyby a reagovali 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
Můžete také použít Patch k vytvoření nebo úpravě více záznamů jedním hovorem.
Místo předávání jednoho základního záznamu poskytněte tabulku základních záznamů ve druhém argumentu. Uveďte také záznamy o změnách v tabulce, odpovídající jeden na jednoho se základními záznamy. Počet záznamů v každé tabulce změn musí být stejný jako počet záznamů v základní tabulce.
Když použijete Patch tímto způsobem, návratová hodnota je také tabulka, kde každý záznam odpovídá jeden za jedním základnímu a change-záznamu.
Sloučení záznamů mimo zdroj dat
Určete dva nebo více záznamů, které chcete sloučit. Funkce zpracovává záznamy v pořadí od začátku seznamu argumentů až do konce, přičemž pozdější hodnoty vlastností přepisují ty předchozí.
Patch vrátí sloučený záznam a neupravuje jeho argumenty ani záznamy v žádném zdroji dat.
Syntax
Úprava nebo vytvoření záznamu ve zdroji dat
Patch( DataSource, BaseRecord, ChangeRecord1 [, ChangeRecord2, ... ])
- ZdrojDat – povinné. Zdroj dat obsahující záznam, který chcete upravit, nebo zdroj dat, který bude záznam obsahovat, jakmile ho vytvoříte.
- BaseRecord – Povinný. Záznam, který chcete upravit nebo vytvořit. Pokud záznam pochází ze zdroje, funkce záznam najde a upraví. Pokud je použit výsledek Defaults , funkce vytvoří záznam. DataSource příkazu patch a DataSource funkce Defaults se musí shodovat, aby bylo možné vytvořit nový záznam.
- ChangeRecords – Povinné. Jeden nebo více záznamů obsahující vlastnosti, které se mají upravit v záznamu ZákladníZáznam. Funkce zpracovává změny záznamů v pořadí od začátku seznamu argumentů až do konce, přičemž pozdější hodnoty vlastností přepisují ty předchozí.
Úprava nebo vytvoření sady záznamů ve zdroji dat
Patch( DataSource, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, ... ] )
- ZdrojDat – povinné. Zdroj dat obsahující záznamy, které chcete upravit, nebo zdroj dat, který bude záznamy obsahovat, jakmile je vytvoříte.
- BaseRecordTable – Povinné. Tabulka záznamů, které chcete upravit nebo vytvořit. Pokud záznam pochází ze zdroje, funkce záznam najde a upraví. Pokud je použit výsledek Defaults , funkce vytvoří záznam. DataSource příkazu patch a DataSource funkce Defaults se musí shodovat, aby bylo možné vytvořit nový záznam.
- ChangeRecordTables – 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. Funkce zpracovává změny záznamů v pořadí od začátku seznamu argumentů až do konce, přičemž pozdější hodnoty vlastností přepisují ty předchozí.
Merge records
Patch( Záznam1, Záznam2 [, ...] )
- Záznamy – Povinné. Alespoň dva záznamy, které chcete sloučit. Funkce zpracovává záznamy v pořadí od začátku seznamu argumentů až do konce, přičemž pozdější hodnoty vlastností přepisují ty předchozí.
Examples
Úprava nebo vytvoření záznamu (ve zdroji dat)
V těchto příkladech upravujete nebo vytváříte záznam ve zdroji dat nazvaném IceCream. Zdroj dat obsahuje data v této tabulce a automaticky generuje hodnoty ve sloupciID:
Pro vytvoření verze tohoto datového zdroje v paměti, abyste mohli vyzkoušet tyto pří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 } ) |
Upravení záznamu ve zdroji dat s názvem IceCream:
|
{ ID: 1, Příchuť: "Čokoláda", Množství: 400 } Záznam Čokoláda ve zdroji dat IceCream je upraven. |
| Patch( IceCream; Defaults( IceCream ); { Flavor: "Strawberry" } ) | Vytvoření záznamu ve zdroji dat s názvem IceCream:
|
{ ID: 3, Příchuť: "Jahoda", Množství: 0 } Záznam Strawberry ve zdroji dat IceCream je vytvořen. |
Po vyhodnocení předchozích vzorců končí zdroj dat těmito hodnotami:
Sloučení záznamů (mimo zdroj dat)
| Formula | Description | Result |
|---|---|---|
| Patch( { Jméno: "James", skóre: 90 }, { Jméno: "Jim", Splněno: pravda } ) | Sloučení dvou záznamů mimo zdroj dat:
|
{ Jméno: "Jim", skóre: 90, Splněno: pravda } |
Upravit nebo vytvořit sadu záznamů (ve zdroji dat)
Když používáte tabulky místo jednotlivých záznamů, můžete vytvořit nebo upravit Patch více záznamů během jednoho hovoru. Vrácená hodnota je tabulka záznamů, která odpovídá jeden za jedním vstupním tabulkám.
Tento příklad aktualizuje množství pro více příchutí ve zdroji dat IceCream současně:
Patch(
IceCream,
Table(
{ ID: 1, Flavor: "Chocolate", Quantity: 150 },
{ ID: 2, Flavor: "Vanilla", Quantity: 200 }
),
Table(
{ Quantity: 300 },
{ Quantity: 400 }
)
)
Výsledkem je tabulka s aktualizovanými záznamy: { ID: 1, Flavor: "Chocolate", Quantity: 300 } a { ID: 2, Flavor: "Vanilla", Quantity: 400 }.
Tento příklad vytváří více nových záznamů pomocí výchozích nastavení:
Patch(
IceCream,
Table( Defaults( IceCream ), Defaults( IceCream ) ),
Table(
{ Flavor: "Mint", Quantity: 60 },
{ Flavor: "Peach", Quantity: 80 }
)
)
Note
Při použití Patch s tabulkami musí počet záznamů v každé změnové tabulce odpovídat počtu záznamů v základní tabulce. V opačném případě dojde k chybě.
Pro detekci chyb při úpravě více záznamů použijte IfError.
IfError je preferovaný mechanismus a funguje napříč hostiteli Power Fx:
IfError(
Patch(
IceCream,
baseRecords,
changeRecords
),
Notify( "Some records failed to update: " & FirstError.Message, NotificationType.Error )
)
Patch s typy sloupců v Dataverse
Následující příklady se týkají konkrétně Microsoft Dataverse datových zdrojů. Tvary záznamů se liší podle zdroje dat (například SharePoint a SQL Server mají různé formáty).
Sloupec výběru: Pro nastavení sloupce Choice použijte přímo hodnotu enum. Tento příklad nastavuje sloupec volby Stav v tabulce Účty :
Patch(
Accounts,
LookUp( Accounts, 'Account Name' = "Contoso" ),
{ 'Status': 'Status (Accounts)'.Active }
)
Sloupec pro vyhledávání: Pro nastavení sloupce Lookup uveďte záznam s primárním klíčem příslušné tabulky. Tento příklad nastavuje vyhledávání Primárního kontaktu na záznam Účty :
Patch(
Accounts,
LookUp( Accounts, 'Account Name' = "Contoso" ),
{ 'Primary Contact': LookUp( Contacts, 'Full Name' = "John Smith" ) }
)
Note
Tyto příklady typu sloupců jsou specifické pro Dataverse. Jiné datové zdroje, jako je SharePoint nebo SQL Server, mohou vyžadovat odlišné tvary záznamů pro podobné typy sloupců. Podívejte se na dokumentaci vašeho konkrétního datového zdroje pro správný formát.
Delegace ve formulích, které používají Patch
Funkce Patch sama o sobě není předmětem delegace , protože zapisuje do zdroje dat místo dotazování. Varování před delegací se však mohou objevit ve formulích, které používají Patch , pokud část formule zaměřená na výběr záznamů (například Filter, LookUp nebo ForAll) zahrnuje dotaz, který překračuje limity delegace zdrojů dat.
Když uvidíte varování o delegaci ve vzorci, který zahrnuje Patch, zkontrolujte, zda se varování vztahuje na funkce pro vyhledávání dat místo Patch na sebe samotné. Pro více informací o delegování viz Pochopte delegaci v aplikaci Canvas.
Běžné chyby u Patch funkce
Při použití Patch této funkce mohou nastat chyby kvůli konektivitě zdrojů dat, oprávněním nebo konfliktům dat. Použijte IfError a IsError k detekci chyb a správné odpovědi.
"Chyba sítě při použití Patch funkce": Tato chyba obvykle znamená, že aplikace nemůže dosáhnout na zdroj dat. Mezi běžné příčiny patří ztráta internetového připojení, dočasná nedostupnost zdroje dat nebo nedostatečná oprávnění pro současného uživatele. Volání zabalte Patch do IfError , aby uživatelé dostali smysluplnou zprávu.
"Existují konflikty se změnami na serveru": Tato chyba nastává, když jiný uživatel nebo proces upraví stejný záznam mezi tím, než vaše aplikace záznam přečte a zapíše změnu. Obnovit zdroj dat voláním funkce Refresh a znovu zkusit operaci.
Chyby oprávnění: Pokud uživatel nemá oprávnění vytvářet nebo upravovat záznamy ve zdroji Patch dat, volání selže. Použijte IfError k zachycení chyb souvisejících s oprávněními a navigujte uživatele.
Pro obecné vzorce zpracování chyb viz Zpracování chyb.
Použití As nebo ThisRecord
Použijte klíčové slovo As nebo ThisRecord ve svém vzorci, abyste se vyhnuli nejasnému hodnotícímu kontextu.
V následujícím příkladu uvažujme první Lookup část tvrzení.If
(OrderID = A[@OrderID]) očekává se, že bude porovnávat v OrderIdLookup rozsahu s OrderId výběrem A v ForAll rozsahu. V tomto případě pravděpodobně budete chtít A[@OrderId] vyřešit jako lokální parametr. Ale je to nejednoznačné.
Power Apps v současnosti interpretuje jak levou stranu OrderId, tak pravou stranu A[@OrderId] jako pole v rozsahu Lookup. Proto vždy najde Lookup první řádek v , [dbo].[Orders1] protože podmínka je vždy pravdivá (tedy každý řádek OrderId je roven 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 klíčové slovo ThisRecord k rozlišení levé strany. Jak je doporučeno pro předchozí scénář.
Když váš vzorec používá více rozsahů s ForAll, Filter, a na stejném zdroji Lookup dat nebo tabulce, parametry rozsahu se mohou kolidovat se stejným polem jinde. Proto použijte operátor As nebo ThisRecord k vyřešení názvu pole a vyhněte se nejednoznačnosti.
Například můžete použít operátor As k rozcestníku v následujícím příkladu.
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"
}
)
)
)
Pro více informací o použití operátoru As a ThisRecord viz článek Operátory .