Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: Arbetsyteappar
Copilot Studio
Desktop-flöden
Modelldrivna appar
Power Platform CLI
Dataverse-funktioner
Ändrar eller skapar en eller flera poster i en datakälla, eller sammanfogar poster utanför en datakälla.
Patch Använd funktionen för att ändra poster i komplexa situationer, till exempel när du gör uppdateringar som inte kräver någon användarinteraktion 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å den här videon om du vill lära dig hur du Patch använder funktionen:
Översikt
Använd funktionen Patch för att ändra en eller flera poster för 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, LookUp( 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" } )
Anmärkning
När du uppdaterar en samling med hjälp av en post från en datakälla med standardvärden uppdaterar korrigeringsåtgärden samlingen med både de angivna korrigeringsvärdena och standardvärdena från datakällan. DataKällan för korrigeringsinstrukmentet och DataSource för funktionen Defaults måste matcha för att skapa en ny post.
Även om du inte arbetar med en datakälla kan du använda Patch för 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 kan ha kommit via ett galleris objektegenskap , placerats i en kontextvariabel eller kommit igenom 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 som hjälper dig att hitta posten igen för ändring.
- 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 Patch för är den post som du ändrade eller skapade. Om du har skapat en post kan returvärdet innehålla egenskaper som datakällan genererade 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'
När du uppdaterar en datakälla kan ett eller flera problem uppstå. Använd IfError och IsError med returvärdet från Patch för att identifiera och svara på fel, som felhantering beskriver. 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å det här sättet är returvärdet också en tabell med varje post som motsvarar en-för-en 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 – Krävs. 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. DataKällan för korrigeringsinstrukmentet och DataSource för funktionen Defaults måste matcha för att skapa en ny 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 – Krävs. 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. DataKällan för korrigeringsinstrukmentet och DataSource för funktionen Defaults måste matcha för att skapa en ny 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 |
|---|---|---|
|
Patch( IceCream, LookUp( IceCream, Flavor = "Chocolate" ), { Quantity: 400 } ) |
Ändrar en post i datakällan IceCream:
|
{ ID: 1, Smak: "Choklad", Kvantitet: 400 } Posten Chocolate i datakällan IceCream har ändrats. |
| Patch( IceCream, Defaults( IceCream ), { Flavor: "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 | Result |
|---|---|---|
| Patch( { Namn: "James", Poäng: 90 }, { Namn: "Jim", Godkänd: true } ) | Sammanfogar två poster utanför en datakälla:
|
{ Namn: "Jim", Poäng: 90, Godkänd: 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 OrderIdA . 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.