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:
Přehled
Patch Pomocí funkce můžete upravit jeden 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, 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" } )
Poznámka:
Když opravíte kolekci pomocí záznamu ze zdroje dat s výchozími hodnotami, operace opravy aktualizuje kolekci o zadané hodnoty oprav i výchozí hodnoty ze zdroje dat. DataSource příkazu patch a DataSource funkce Defaults se musí shodovat, aby bylo možné vytvořit 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" } )
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 mohl projít vlastností Items galerie, byla umístěna do kontextové proměnné nebo prošla jinou cestou. Můžete však základní záznam vystopovat zpět ke zdroji dat. To je důležité, protože záznam obsahuje další informace, které vám pomůžou záznam znovu najít pro úpravy.
- 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
Patch lze také použít k vytvoření nebo úpravě více záznamů pomocí jednoho volání.
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.
Patch Při použití tímto způsobem je návratová hodnota také tabulka s každým záznamem odpovídajícím 1:1 se základními záznamy a záznamy 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ší.
Patch vrátí sloučený záznam a neupravuje jeho argumenty ani záznamy v žádném zdroji dat.
Syntaxe
Ú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 dat, bude nalezen a upraven. Pokud se použil výsledek funkce Defaults, záznam se vytvoří. 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. 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( 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 dat, bude nalezen a upraven. Pokud se použil výsledek funkce Defaults, záznam se vytvoří. 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. 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áznamy – 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:
| Vzorec | Popis | Result |
|---|---|---|
|
Patch( IceCream, LookUp( IceCream; Flavor = "Chocolate" ); { Quantity: 400 } ) |
Upravení záznamu ve zdroji dat s názvem IceCream:
|
{ 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:
|
{ 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:
Sloučení záznamů (mimo zdroj dat)
| Vzorec | Popis | Result |
|---|---|---|
| Patch( { Name: "James", Score: 90 }, { Name: "Jim", Passed: true } ) | Sloučení dvou záznamů mimo zdroj dat:
|
{ 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.
(OrderID = A[@OrderID]) očekává se, že porovná OrderId v rozsahu vyhledávání s OrderId kolekce A v rozsahu ForAll . 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. Jak se pro výše uvedený scénář doporučuje .
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 As a ThisRecord, viz článek Operátory.