Funktionerna Update och UpdateIf

Gäller appar: Arbetsyteappar Modellbaserade program

Uppdaterar poster i en datakälla.

Description

Funktionen Update

Använd funktionen Update för att ersätta en hel post i en datakälla. Funktionerna UpdateIf och Patch kan i stället ändra ett eller flera värden i en post och låta de andra värdena vara orörda.

I en samling måste hela posten matcha. Samlingar tillåter dubblettposter, så flera poster kanske matchar. Du kan använda argumentet RemoveFlags.All för att uppdatera alla kopior av en post, annars uppdateras bara en kopia av posten.

Om datakällan genererar ett kolumnvärde automatiskt, måste värdet för den kolumnen bekräftas på nytt.

Funktionen UpdateIf

Använd funktionen UpdateIf för att ändra ett eller flera värden i en eller flera poster som matchar ett eller flera villkor. Villkoret kan vara en formel som resulterar i true eller false och kan referera till kolumner i datakällan efter namn. Funktionen utvärderar villkoret för varje post och ändrar de poster där resultatet är true.

Ange en ändring genom att använda en ändringspost som innehåller nya egenskapsvärden. Om du skriver den här ändringsposten mellan klammerparenteser kan egenskapsformlerna referera till egenskaper för den post som ändras. Du kan använda det här beteendet för att ändra poster baserat på en formel.

Precis som med UpdateIf kan du också använda funktionen Patch för att ändra vissa kolumner i en post utan att påverka övriga kolumner.

Både Update och UpdateIf returnerar den ändrade datakällan som en tabell. Du måste använda någon av funktionerna i en beteendeformel.

Delegering

Det går inte att delegera funktionerna när de används tillsammans med en datakälla. Endast den första delen av datakällan hämtas och sedan tillämpas funktionen. Detta kan inte representerar en fullständig överblick. En varning kan visas vid redigeringstiden för att påminna dig om den här begränsningen.

Delegeringsstöd (experimentellt)

Delegeringssupport för UpdateIf och RemoveIf finns nu i Experimentell förhandsvisning (standard AV) för datakällor som har stöd för det. Om en datakälla inte stöder den här funktionen, kommer Power Apps nu att skicka en fråga till servern och hämta all data som matchar filteruttrycket upp till max. antingen 500, 2 000 eller datasidans storlek. Posterna uppdateras sedan och alla skickas tillbaka till servern för uppdatering.

Syntax

Update( DataSource, OldRecord, NewRecord [, RemoveFlags.All ] )

  • DataSource – Krävs. Den datakälla som innehåller posten som du vill ersätta.
  • OldRecord – Krävs. Posten som ska ersättas.
  • NewRecord – Krävs. Ersättningsposten. Detta är inte en ändringspost. Hela posten ersätts och saknade egenskaper kommer att vara blank.
  • RemoveFlags.All – Valfritt. I en samling kan samma post visas mer än en gång. Ange argumentet RemoveFlags.All för att uppdatera alla kopior av posten.

UpdateIf( DataSource, Condition1, ChangeRecord1 [, Condition2, ChangeRecord2, ... ] )

  • DataSource – Krävs. Den datakälla som innehåller posten eller posterna som du vill ändra.
  • Condition(s) – Krävs. En formel som utvärderar till true för den eller de poster som du vill ändra. Du kan använda kolumnnamnen för DataSource i formeln.
  • ChangeRecord(s) – Krävs. För varje motsvarande villkor kommer en ändringspost för nya egenskapsvärden tillämpas på poster i DataSource som uppfyller villkoret. Om du skriver posten inom klammerparenteser kan egenskapsvärden för den befintliga posten användas i egenskapsformlerna.

Exempel

I det här exemplet ersätter eller ändrar du poster i en datakälla med namnet IceCream som börjar med datan i den här tabellen:

IceCream-exempel.

Formel Beskrivning Resultat
Update( IceCream ,
First( Filter( IceCream , Flavor="Chocolate" ) ), { ID: 1, Flavor: "Mint Chocolate", Quantity:150 } )
Ersätter en post från datakällan. Ersätt en post.

Datakällan IceCream har ändrats.
UpdateIf( IceCream , Quantity > 175, { Quantity: Quantity + 10 } ) Ändrar poster som har en Quantity som är större än 175. Fältet Quantity ökas med 10 och inga andra fält ändras. Ändra poster.

Datakällan IceCream har ändrats.
Update( IceCream ,
First( Filter( IceCream , Flavor="Strawberry" ) ),
{ ID: 3, Flavor: "Strawberry Swirl"} )
Ersätter en post från datakällan. Egenskapen Quantity har inte angetts i ersättningsposten, så egenskapen i resultatet blir blank. Ersätt post när kvantitet inte levereras.

Datakällan IceCream har ändrats.
UpdateIf( IceCream , true, { Quantity: 0 } ) Anger värdet för egenskapen Quantity för alla poster i datakällan till 0. Ställ in kvantitet för alla till 0.

Datakällan IceCream har ändrats.

Steg-för-steg

  1. Importera eller skapa en samling med namnet Inventory och visa den i ett galleri enligt beskrivningen i Visa data i ett galleri.

  2. Ge galleriet namnet ProductGallery.

  3. Lägg till ett skjutreglage med namnet UnitsSold och ange egenskapen Max till det här uttrycket:
    ProductGallery.Selected.UnitsInStock

  4. Lägg till en knapp och ge dess egenskap OnSelect följande formel:
    UpdateIf(Inventory, ProductName = ProductGallery.Selected.ProductName, {UnitsInStock:UnitsInStock-UnitsSold.Value})

  5. Tryck på F5, välj en produkt i galleriet, ange ett värde med skjutreglaget och välj sedan knappen.

    Antal enheter i lager för den produkt som du har angett minskar med det antal som du har angett.