Funkce Patch
Platí pro: aplikace plátna modelem řízené aplikace Power Platform CLI toky na počítači
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
Patch lze také použít k vytvoření nebo úpravě více záznamů pomocí jediného 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.
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ší.
Patch vrací sloučený záznam a nemění jeho argumenty ani záznamy v žádných zdrojích dat.
Syntaxe
Úprava nebo vytvoření záznamu ve zdroji dat
Oprava( Zdroj dat, BaseRecord, ChangeRecord1 [, ChangeRecord2, … ])
- DataSource – 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ří.
- 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
Oprava( Zdroj dat, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, … ])
- DataSource – 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ří.
- 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ů
Oprava( 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 sloupci ID:
Vzorec | Description | Result |
---|---|---|
Patch (zmrzlina, 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 ), { Příchuť: "Jahoda" } ) | 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 | Výsledek |
---|---|---|
Patch( { Jméno: "James", Skóre: 90 }, { Jméno: "Jim", Splněno: 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.