Patch-funktion
Gäller för: Arbetsyteappar Modellbaserade appar Power Platform CLI Datorflöden
Ändrar eller skapar en eller flera poster i en datakälla, eller sammanfogar poster utanför en datakälla.
Använd funktionen Patch för att ändra poster i komplexa situationer, till exempel när du utför uppdateringar som inte kräver användaråtgärder eller använder formulär som sträcker sig över flera skärmar.
Om du vill uppdatera poster i en datakälla enklare att göra enklare ändringar kan du använda kontrollen Edit form istället. När du lägger till kontrollen Redigeringsformulär ger du användarna ett formulär som de kan fylla i för att spara ändringarna till en datakälla. För mer information se Understand data forms (Förstå dataformulär).
Titta på det här videoklippet och lär dig hur du använder Patch-funktionen:
Översikt
Använd funktionen Patch för att ändra en eller flera poster i en datakälla. Värdena för specifika fält ändras utan att påverka andra egenskaper. Den här formeln ändrar till exempel telefonnumret för en kund med namnet Contoso:
Patch( Customers, First( Filter( Customers, Name = "Contoso" ) ), { Phone: "1-212-555-1234" } )
Använd Patch med funktionen Defaults för att skapa poster. Du kan använda den här metoden för att skapa en enda skärm som både skapar och redigerar poster. Den här formeln skapar en post för en kund med namnet Contoso:
Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )
Även om du inte arbetar med en datakälla kan du använda Patch till att sammanfoga två eller flera poster. Den här formeln sammanfogar till exempel två poster i en som identifierar både telefonnumret och platsen för Contoso:
Patch( { Name: "Contoso", Phone: "1-212-555-1234" }, { Name: "Contoso", Location: "Midtown" } )
Beskrivning
Ändra eller skapa en post i en datakälla
Använd den här funktionen med en datakälla, ange datakällan och sedan en baspost:
- Om du vill ändra en post måste basposten komma från en datakälla. Basposten har kanske kommit via galleriegenskapen Items, har placerats i en sammanhangsvariabel, eller kommit via någon annan sökväg. Men du bör kunna spåra basposten tillbaka till datakällan. Detta är viktigt eftersom posten innehåller ytterligare information för att kunna hitta posten igen vid ändringar.
- Skapa en post genom att använda funktionen Defaults för att skapa en baspost med standardvärden.
Ange sedan en eller flera ändringsposter, där var och en innehåller nya egenskapsvärden som åsidosätter egenskapsvärden i basposten. Ändringsposter bearbetas i ordning från argumentlistans början till slutet, där senare egenskapsvärden åsidosätter tidigare värden.
Returvärdet för Patch är den post som du har ändrat eller skapat. Om du har skapat en post kan returvärdet innehålla egenskaper som datakällan genererat automatiskt. Returvärdet ger emellertid inte något värde för fält i en relaterad tabell.
Du kan t.ex. Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name"));
. använda och sedan MyAccount.'Primary Contact'.'Full Name'
. Du kan inte ge ett fullständigt namn i det här fallet. Om du vill komma åt fälten i en relaterad tabell kan du använda en separat sökning, t.ex. följande:
LookUp(Accounts, Account = MyAccount.Account).'Primary Contact'.'Full Name'
Ett eller flera problem kan uppstå när du uppdaterar en datakälla. Använd IfError och IsError med returvärdet från Patch för att identifiera och svara på fel, i enlighet med vad som beskrivs i Felhantering. Du kan även använda funktionen Fel för att identifiera och undersöka problem, enligt beskrivningen i Arbeta med datakällor.
Relaterade funktioner innefattar funktionen Update som du kan använda för att ersätta en hel post, och funktionen Collect som du kan använda för att skapa en post. Du kan använda funktionen UpdateIf till att ändra egenskaper för flera poster baserat på ett villkor.
Ändra eller skapa en uppsättning poster i en datakälla
Patch kan också användas för att skapa eller ändra flera poster med ett enda anrop.
I stället för att överföra en enda baspost kan en tabell med basposter anges i det andra argumentet. Ändringsposter finns även i en tabell, motsvarande ett-till-ett med basposterna. Antalet poster i varje ändringstabell måste vara samma som antalet poster i bastabellen.
När du använder Patch på detta sätt är returvärdet också en tabell där varje post motsvarar ett-till-ett med bas- och ändringsposterna.
Sammanslagning av poster utanför en datakälla
Ange två eller flera poster som du vill sammanfoga. Poster bearbetas i ordning från argumentlistans början till slutet, där senare egenskapsvärden åsidosätter tidigare värden.
Patch returnerar den sammanfogade posten och ändrar inte dess argument eller poster i några datakällor.
Syntax
Ändra eller skapa en post i en datakälla
Patch(DataSource,BaseRecord,ChangeRecord1 [, ChangeRecord2 , ... ])
- DataSource – Obligatoriskt. Datakällan som innehåller den post som du vill ändra, eller som kommer att innehålla den post som du vill skapa.
- BaseRecord – Obligatoriskt. Posten som ska ändras eller skapas. Om posten kom från en datakälla hittas posten och ändras. Om resultatet av Defaults används, skapas en post.
- ChangeRecords – Obligatoriskt. En eller flera poster som innehåller egenskaper som ska ändras i BaseRecord. Ändringsposter bearbetas i ordning från argumentlistans början till slutet, där senare egenskapsvärden åsidosätter tidigare värden.
Ändra eller skapa en uppsättning poster i en datakälla
Patch ( DataSource, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, ... ] )
- DataSource – Obligatoriskt. Datakällan som innehåller de poster som du vill ändra, eller som kommer att innehålla de poster som du vill skapa.
- BaseRecordTable – Obligatoriskt. En tabell med poster som ska ändras eller skapas. Om posten kom från en datakälla hittas posten och ändras. Om resultatet av Defaults används, skapas en post.
- ChangeRecordTables – Obligatoriskt. En eller flera tabeller med poster som innehåller egenskaper som ska ändras för varje post i BaseRecordTable. Ändringsposter bearbetas i ordning från argumentlistans början till slutet, där senare egenskapsvärden åsidosätter tidigare värden.
Koppla poster
Patch( Record1, Record2 [, ...] )
- Poster – obligatoriskt. Minst två poster som du vill sammanfoga. Poster bearbetas i ordning från argumentlistans början till slutet, där senare egenskapsvärden åsidosätter tidigare värden.
Exempel
Ändra eller skapa en post i en datakälla
I det här exemplet ändrar eller skapar du en post i en datakälla med namnet IceCream , som innehåller data i den här tabellen och som automatiskt genererar värdena i ID-kolumnen:
Formel | Beskrivning | Result |
---|---|---|
Plåster( Glass, LookUp( IceCream, Flavor = "Chocolate" ), { Quantity: 400 } ) |
Ändrar en post i datakällan IceCream:
|
{ ID: 1, Flavor: "Chocolate", Quantity: 400 } Posten Chocolate i datakällan IceCream har ändrats. |
Patch( IceCream, Defaults( IceCream ), { Smak: "Strawberry" } ) | Skapar en post i datakällan IceCream:
|
{ ID: 3, Flavor: "Strawberry", Quantity: 0 } Posten Strawberry i datakällan IceCream har skapats. |
När tidigare formler har utvärderats avslutas datakällan med följande värden:
Sammanslagning av poster utanför en datakälla
Formel | Beskrivning | Resultat |
---|---|---|
Patch ( { Namn: "James", Poäng: 90 }, { Namn: "Jim", Godkänd: true } ) | Sammanfogar två poster utanför en datakälla:
|
{ Name: "Jim", Score: 90, Passed: true } |
Användning av Som eller ThisRecord
Om du använder nyckelordet Som eller ThisRecord i formeln undviker du en tvetydig utvärderingskontext.
I exemplet nedan bör du tänka på det första uppslaget i If
-instruktionen. (OrderID = A[@OrderID])
förväntas jämföra uppslagsomfånget med samlingen OrderId
i omfånget OrderId
A
. ForAll
I det här fallet vill du troligen att A[@OrderId]
ska lösas som en lokal parameter. Men det är tvetydigt.
Power Apps tolkar för närvarande både vänster OrderId
och höger A[@OrderId]
som ett fält i uppslagsomfånget. Därför hittar uppslag alltid den första raden i [dbo].[Orders1]
eftersom villkoret alltid är sant (det vill säga att varje rads OrderId
är lika med sig själv).
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"
}
)
)
)
Användning av Som eller ThisRecord
När det är möjligt kan du använda operatören Som eller ThisRecord för att göra vänster sida entydig. Som rekommenderas för ovanstående scenario.
När en formel använder flera omfång med ForAll
, Filter
och Lookup
i samma datakälla eller tabell, kan det hända att omfångsparametrarna kolliderar med samma fält någon annanstans. Därför bör du använda operatören Som eller ThisRecord för att lösa fältnamnet och undvika tvetydighet.
Du kan till exempel använda operatören Som för att skapa entydighet i exemplet nedan.
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"
}
)
)
)
Du kan också använda ThisRecord för samma ändamål.
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"
}
)
)
)
Om du vill veta mer om användningen av operatören Som och ThisRecord läser du artikeln Operatörer.