Förstå variabler för appar för arbetsytor

Om du har använt ett annat programmeringsverktyg, till exempel Visual Basic eller JavaScript, kanske du undrar: Var är variablerna? Power Apps är lite annorlunda och kräver ett annat synsätt. I stället för att leta efter en variabel när du skapar en app för arbetsytor kan du fråga: Vad skulle jag göra i Excel?

I andra verktyg kan du ha utfört en uttrycklig beräkning och lagrat resultatet i en variabel. Power Apps och Excel beräknar dock automatiskt om formler när indatan ändras, så normalt sett behöver du inte skapa eller uppdatera några variabler. Genom att använda den här metoden när det är möjligt, kan du enkelt skapa, förstå och underhålla din app.

I vissa fall kan du behöva använda variabler i Power Apps som utökar Excel-modellen genom att lägga till beteendeformler. Formlerna körs till exempel när en användare väljer en knapp. I en beteendeformel är det ofta bra att ange en variabel som ska användas i andra formler.

I allmänhet bör du undvika att använda variabler. Men ibland är det bara en variabel som kan ge dig den funktion du söker. Variabler skapas i implicit och anges som de visas i funktioner som anger deras värden.

Omvandla Excel till Power Apps

Excel

Låt oss se hur Excel fungerar. En cell kan innehålla ett värde, till exempel ett tal, en sträng eller en formel, som är baserad på värden i andra celler. När användaren anger ett annat värde i en cell, beräknar Excel automatiskt om alla formler som är beroende av det nya värdet. Du behöver inte utföra någon programmering för att aktivera det här beteendet.

I följande exempel anges cell A3 till formeln A1+A2. Om A1 eller A2 ändras A3 beräknas automatiskt för att återspegla ändringen. Det här beteendet kräver ingen kod utanför själva formeln.

Animering av omberäkning av summan av två nummer i Excel.

Excel har inte några variabler. Värdet för en cell som innehåller en formel ändras baserat på dess indata, men det finns inget sätt att komma ihåg resultatet av en formel och lagra den i en cell eller någon annanstans. Om du ändrar en cells värde kan hela kalkylbladet ändras och eventuella tidigare beräknade värden försvinner. En Excel-användare kan kopiera och klistra in celler, men det sker med användarens manuella kontroll och är inte möjligt med formler.

Power Apps

Appar som du skapar i Power Apps fungerar ungefär som Excel. I stället för att uppdatera celler kan du lägga till kontroller var du vill på en skärm och ge dem ett namn som ska användas i formler.

Du kan till exempel replikera Excel-beteendet i en app genom att lägga till kontrollen Etikett med namnet Label1 och två Textinmatning kontroller med namnet TextInput1 och TextInput2. Om du sedan anger egenskapen Text för Label1 till TextInput1 + TextInput2, kommer den alltid visa summan av de tal som finns i TextInput1 och TextInput2 automatiskt.

Beräknar summan av två siffror i Power Apps.

Observera att kontrollen Label1 är markerad och visar text formeln i formelfältet överst på skärmen. Här hittar vi formeln TextInput1 + TextInput2. Den här formeln skapar ett beroende mellan dessa kontroller, precis som beroenden skapas mellan cellerna i en Excel-arbetsbok. Låt oss ändra värdet i TextInput1:

Animering för att beräkna summan av två siffror i Power Apps.

Formeln för Label1 har beräknats om automatiskt och visar nu det nya värdet.

Du kan använda formler i Power Apps för att fastställa både det primära värdet för en kontroll och egenskaper som till exempel formatering. I nästa exempel kommer en formel för egenskapen Färg i etiketten automatiskt visa negativa värden i rött. Funktionen If bör se bekant ut från Excel:

If( Value(Label1.Text) < 0, Red, Black )

Animering av villkorlig formatering.

Du kan använda formler för en mängd olika scenarier:

  • Med hjälp av enhetens GPS kan en kartkontroll visa din aktuella plats med en formel som använder Location.Latitude och Location.Longitude. När du förflyttar dig spårar kartan automatiskt din plats.
  • Andra användare kan uppdatera datakällor. Andra i din grupp kan till exempel uppdatera objekt i en lista. När du uppdaterar en datakälla räknas automatiskt alla beroendeformler om för att återspegla den uppdaterade datan. Vidare i exemplet kan du ange galleriegenskapen Items till formeln Filter (SharePointList), som automatiskt kommer att visa den nyligen filtrerade uppsättningen med poster.

Förmåner

Att använda formler för att skapa appar har många fördelar:

  • Om du kan Excel, kan du Power Apps. Modellen och formelspråket är likadana.
  • Om du har använt andra programmeringsverktyg, kan du tänka på hur mycket kod som skulle krävas för att utföra dessa exempel. I Visual Basic skulle du behöva skriva en händelsehanterare för ändringshändelsen i varje Textinmatning-kontroll. Koden för att utföra beräkningar i var och en av dessa är redundant och kan bli osynkroniserad, eller du kan behöva skriva en gemensam subrutin. I Power Apps uppnår du alltihop med en enda formel på en enda rad.
  • Om du vill ta reda på var texten i Label1 kommer från, vet du exakt var du ska leta: i formeln i egenskapen Text. Det finns inte något annat sätt att påverka texten i den här kontrollen. I ett traditionellt programmeringsverktyg kan en händelsehanterare eller subrutin ändra värdet på etiketten från valfri plats i programmet. Det kan göra det svårt att spåra när och var en variabel har ändrats.
  • Om användaren ändrar en skjutreglagekontroll och sedan ångrar sig, går det att dra tillbaka skjutreglaget till det ursprungliga värdet. Och det är som om ingenting någonsin har ändrats, appen visar samma kontrollvärden som förut. Det finns inga hinder för att experimentera med ”Vad händer om?”, precis som i Excel.

I allmänhet är det bättre om du kan uppnå en effekt med hjälp av en formel. Låt formelmotorn i Power Apps arbeta åt dig.

Att veta när variabler ska användas

Låt oss ändra vårt enkla tilläggsverktyg till en gammalmodig tilläggsmaskin, med en löpande summa. Om du väljer knappen Lägg till, lägger du till ett tal till den löpande summan. Om du väljer knappen Rensa, återställer du den löpande summan till noll.

Visning Beskrivning
App med en Textinmatning-kontroll, en etikett och två knappar. När appen startas blir den löpande total summan 0.

Den röda punkten representerar användarens finger i textrutan, där användaren anger 77.
Textinmatning-kontrollen innehåller 77 och knappen Lägg till trycks in. Användaren väljer knappen Lägg till.
Totalt är 77 och ytterligare 77 läggs till. 77 läggs då till i löpande total.

Användaren väljer knappen Lägg till.
Summan blir 154 innan den töms. 77 återigen läggs till i den löpande summan, vilket resulterar i 154.

Användaren väljer knappen Rensa.
Summan tas bort. Löpande total återställs till 0.

Vår tilläggsmaskin använder något som inte finns i Excel, nämligen en knapp. I den här appen kan du inte använda enbart formler för att beräkna den löpande summan, eftersom dess värde beror på ett antal åtgärder som användaren vidtar. Vår löpande summa måste i stället registreras och uppdateras manuellt. De flesta programmeringsverktyg lagrar den här informationen i en variabel.

Ibland måste du ha en variabel för att din app ska fungera som du vill. Men metoden har sina nackdelar:

  • Du måste uppdatera den löpande summan manuellt. Det görs inte med en automatisk omberäkning.
  • Den löpande summan kan inte längre beräknas baserat på värdena i andra kontroller. Det beror på hur många gånger användaren valt knappen Lägg till och vilket värde som fanns i textindatakontrollen varje gång. Har användaren angett 77 och valt Lägg till två gånger, eller 24 respektive 130 de båda gångerna? Du kan inte se skillnaden förrän summan har uppnått 154.
  • Ändringar i summan kan komma från olika platser. I det här exemplet kan båda knapparna Lägg till och Rensa uppdatera summan. Om appen inte fungerar som förväntat, vilken knapp är det som orsakar problemet?

Använd en global variabel

För att kunna skapa vår tilläggsmaskin behöver vi en variabel som innehåller den löpande summan. De enklaste variablerna att arbeta med i Power Apps är globala variabler.

Hur globala variabler fungerar:

  • Du anger värdet för den globala variabeln med funktionen Set. Set( MyVar, 1 ) ger den globala variabeln MyVar värdet 1.
  • Du använder den globala variabeln genom att referera till det namn som används med funktionen Set. I det här fallet returnerar MyVar 1.
  • Globala variabler kan innehålla valfritt värde, inklusive strängar, tal, poster och tabeller.

Låt oss återskapa vår tilläggsmaskin med hjälp av en global variabel:

  1. Lägg till en textindatakontroll med namnet TextInput1 och två knappar med namnen Button1 och Button2.

  2. Ange egenskapen Text för Button1 till "Lägg till" och ange egenskapen Text för Button2 till "Rensa".

  3. Uppdatera den löpande summan varje gång en användare väljer knappen Lägg till genom att ange egenskapen OnSelect till den här formeln:

    Set( RunningTotal, RunningTotal + TextInput1 )

    Förekomsten av den här formeln fastställer RunningTotal som en global variabel som har ett nummer på grund av + operatorn. Du kan referera till RunningTotal var som helst i appen. När användaren öppnar appen RunningTotal har ett initialt värde som är blank.

    Första gången en användare väljer knappen Lägg till och Set körningen, RunningTotal anges värdet RunningTotal + TextInput1.

    OnSelect-egenskapen för Lägg till-knappen är inställd på Set-funktionen.

  4. Om du vill ange den löpande summan till 0 när en användare väljer knappen Rensa anger du egenskapen OnSelect till den här formeln:

    Set( RunningTotal, 0 )

    OnSelect-egenskapen för Clear-knappen är inställd på Set-funktionen.

  5. Lägg till kontrollen Etikett och ange egenskapen Text till RunningTotal.

    Den här formeln omberäknas automatiskt och visar användaren värdet för RunningTotal när det ändras, baserat på knapparna som användaren väljer.

    Etikettens textegenskap är inställd på variabelns namn.

  6. Förhandsgranska appen. Nu har vi vår tilläggsmaskin enligt beskrivningen ovan. Ange ett värde i textrutan och tryck på knappen Lägg till knappen några gånger. När du är klar kan du återgå till redigeringen genom att trycka på Esc.

    Textinmatning-kontroll innehåller ett värde och etiketten innehåller den totala körningen.

  7. Om du vill visa värdet för den globala variabeln gör du något av följande:

    • Om du använder förhandsversionen av Power Apps Studio väljer du Variable i programmets författandemeny.

      Meny för variabler och samlingar.

    • Om du använder den klassiska versionen av Power Apps Studio väljer du menyn Arkiv och sedan Variabler i det vänstra fönstret.

  8. Om du vill se alla platser där variabeln definieras och används, markerar du den under Globala variabler.

    Lista över plats där variabel används.

Typer av variabler

Power Apps i finns tre typer av variabler:

Variabeltyp Scope Beskrivning Funktioner som fastställer
Globala variabler App Enklast att använda. Innehåller en siffra, en textsträng, ett booleskt värde, en post, en tabell osv, som kan vara referenser från var som helst i appen. Ställ in
Kontextvariabler Skärm Bra för att skicka värden till en skärm, ungefär som parametrar till en procedur på andra språk. Kan endast refereras från en skärm. UpdateContext
Navigate
Samlingar App Innehåller en tabell med referenser från var som helst i appen. Tillåter att innehållet i tabellen kan ändras, snarare än att den anges i sin helhet. Kan sparas på den lokala enheten för senare användning. Collect
ClearCollect

Skapa och ta bort variabler

Alla variabler skapas implicit när de visas i en funktion Set, UpdateContext, Navigate, Collect eller ClearCollect. Om du vill deklarera en variabel och dess typ behöver du endast ta med den i någon av dessa funktioner var som helst i appen. Ingen av dessa funktioner skapar variabler. De fyller endast variabler med värden. Du deklarerar aldrig variabler som du kanske använder i ett annat programmeringsverktyg och all inmatning är implicit från användning.

Du kan till exempel ha en Knapp-kontroll med en OnSelect-formel som är lika med Set( X, 1 ). Med den här formeln upprättas X som en variabel med en typ av tal. Du kan använda X i formler som ett tal och variabeln får ett tomt när du har öppnat appen, men innan du har markerat knappen. När du väljer knappen ger du X värdet 1.

Om du har lagt till en ny knapp och ställt in dess egenskap OnSelect till Set( X, "Hello" ), uppstår ett fel eftersom typen (text strängen) inte matchar typen för föregående Uppsättning (nummer). Alla implicita definitioner för variabeln måste komma överens med typen. Allt detta hände på grund av att du nämnde X i formler, inte eftersom någon av dessa formler verkligen kördes.

Du tar bort en variabel genom att ta bort alla de funktioner för Set, UpdateContext, Navigate, Collect eller ClearCollect som implicit fastställer variabeln. Utan dessa funktioner finns inte variabeln. Du måste också ta bort alla referenser till variabeln eftersom de orsakar ett fel.

Variabelns livstid och ursprungliga värde

Alla variabler hålls kvar i minnet medan programmet körs. De värden som lagras i variablerna går förlorade när appen har stängts.

Du kan lagra innehållet i en variabel i en datakälla med hjälp av funktionerna Patch eller Collect. Du kan också lagra värden i samlingar på den lokala enheten med hjälp av funktionen SaveData.

När användaren öppnar appen får alla variabler ett initialt värde som är tomt.

Läser variabler

Du kan använda variabelns namn genom att läsa dess värde. Du kan till exempel definiera en variabel med följande formel:

Set( Radius, 12 )

Sedan kan du bara använda Radius på en plats där du kan använda ett tal och det ersätts med 12:

Pi() * Power( Radius, 2 )

Om du ger en kontextvariabel samma namn som en global variabel eller en samling har den sammanhangsberoende variabeln prioritet. Du kan fortfarande referera till den globala variabeln eller samlingen med hjälp av disambigueringsoperatorn [@Radius].

Använd kontextvariabel

Nu ska vi titta på hur vi kan lägga till en dator med hjälp av en kontextvariabel istället för en global variabel.

Så här fungerar sammanhangsvariabler:

  • Du fastställer och ställer implicit sammanhangsvariabler med hjälp av funktionerna UpdateContext eller Navigate. När appen startar är det initiala värdet för alla kontextvariabler tomt.
  • Du uppdaterar sammanhangsvariabler med poster. I andra programmeringsverktyg använder du ofta "=" vid tilldelning, som i "x = 1". Sammanhangsvariabler använder { x: 1 } i stället. När du använder en sammanhangsvariabel kan du använda dess namn direkt utan syntaxen för posten.
  • Du kan också ange en sammanhangsvariabel när du använder funktionen Navigate för att visa en skärm. Om du tänker på en skärm som en sorts procedur eller subrutin, liknar denna metod parametern som överförs i andra programmeringsverktyg.
  • Förutom Navigate är sammanhangsvariabler begränsade till sammanhanget på en enda skärm, vilket är platsen där de får sitt namn. Du kan inte använda eller ange dem utanför det här sammanhanget.
  • Sammanhangsvariabler kan innehålla valfritt värde, inklusive strängar, tal, poster och tabeller.

Låt oss återskapa vår tilläggsmaskin med hjälp av en sammanhangsvariabel:

  1. Lägg till en textindatakontroll med namnet TextInput1 och två knappar med namnen Button1 och Button2.

  2. Ange egenskapen Text för Button1 till "Lägg till" och ange egenskapen Text för Button2 till "Rensa".

  3. Uppdatera den löpande summan varje gång en användare väljer knappen Lägg till genom att ange egenskapen OnSelect till den här formeln:

    UpdateContext( { RunningTotal: RunningTotal + TextInput1 } )

    Förekomsten av den här formeln fastställer RunningTotal som en kontextvariabel som har ett nummer på grund av + operatorn. Du kan referera till RunningTotal var som helst i den här skärmen. När användaren öppnar appen RunningTotal har ett initialt värde som är blank.

    Första gången en användare väljer knappen Lägg till och UpdateContext körningen, RunningTotal anges värdet RunningTotal + TextInput1.

    OnSelect-egenskapen för knappen Lägg till med uppdateringskontext.

  4. Om du vill ange den löpande summan till 0 när en användare väljer knappen Rensa anger du egenskapen OnSelect till den här formeln:

    UpdateContext( { RunningTotal: 0 } )

    Återigen används UpdateContext används med formeln UpdateContext( { RunningTotal: 0 } ).

    OnSelect -egenskap för knappen Rensa uppdateringskontext.

  5. Lägg till kontrollen Etikett och ange egenskapen Text till RunningTotal.

    Den här formeln omberäknas automatiskt och visar användaren värdet för RunningTotal när det ändras, baserat på knapparna som användaren väljer.

    Textegenskap för etikett.

  6. Förhandsgranska appen. Nu har vi vår tilläggsmaskin enligt beskrivningen ovan. Ange ett värde i textrutan och tryck på knappen Lägg till knappen några gånger. När du är klar kan du återgå till redigeringen genom att trycka på Esc.

    Textinmatning-kontroll visar ett värde och etiketten visar den totala körningen.

  7. Du kan ange värdet för en kontextvariabel när du navigerar till en skärm. Detta är användbart för att skicka ”kontexten” eller ”parametrar” från en skärm till en annan. Du kan visa den här tekniken genom att infoga en skärm, infoga en knapp och ange dess OnSelect-egenskap till följande formel:

    Navigate( Screen1, None, { RunningTotal: -1000 } )

    OnVälj egenskap för en knapp.

    Håll ned Alt-tangenten medan du markerar den här knappen för att visa Screen1 och ange kontextvariabeln RunningTotal till -1000.

    Skärm1 är öppen.

  8. Om du vill visa värdet för sammanhangsvariabeln gör du något av följande:

    • Om du använder förhandsversionen av Power Apps Studio väljer du Variabler i programmets författandemeny.

    • Om du använder den klassiska versionen av Power Apps Studio väljer du menyn Arkiv och sedan Variabler i det vänstra fönstret.

  9. Om du vill visa var kontextvariabeln definieras och används väljer du den under Sammanhangsvariabler.

Använd en samling

Låt oss till sist ta en titt på hur vi kan lägga till en dator med en samling. Eftersom en samling innehåller en tabell som är lätt att ändra, ska vi lägga till datorn med ”papperstejp” för värde när det anges.

Så här fungerar samlingar:

  • Skapa och ange samlingar med funktionen ClearCollect. Du kan använda funktionen Collect i stället, men den kommer att kräva en annan variabel i stället för att ersätta den gamla.
  • En samling är en sorts datakälla och därför en tabell. Om du vill få åtkomst till ett enstaka värde i en samling kan du använda funktionen First och extrahera ett fält från den resulterande posten. Om du använde ett enstaka värde med ClearCollect, blir det fältet Value som i följande exempel:
    First( VariableName ).Value

Låt oss återskapa vår tilläggsmaskin med en samling:

  1. Lägg till kontrollen Textinmatning som kallas TextInput1 och två knappar med namnen Button1 och Button2.

  2. Ange egenskapen Text för Button1 till "Lägg till" och ange egenskapen Text för Button2 till "Rensa".

  3. Uppdatera den löpande summan varje gång en användare väljer knappen Lägg till genom att ange egenskapen OnSelect till den här formeln:

    Collect( PaperTape, TextInput1.Text )

    Förekomsten av den här formeln består av PaperTape som en samling med en tabell med en kolumn med textsträngar. Du kan referera till PaperTape var som helst i appen. När en användare öppnar appen PaperTape en tom tabell.

    När den här formeln körs lägger den till det nya värdet i slutet av samlingen. Eftersom vi lägger till ett enda värde placerar Collect det automatiskt i en tabell med en kolumn med kolumnnamnet Value, som vi kommer att använda senare.

    OnSelect-egenskapen för knappen Lägg till med samla.

  4. Om vi vill ta bort ”pappersremsan” när användaren väljer knappen Clear, så ställ in dess egenskap OnSelect till följande formel:

    Clear( PaperTape )

    OnVälj egenskapen för knappen Rensa.

  5. Om du vill visa den löpande summan lägger du till en etikett och anger egenskapen Text till denna formel:

    Sum( PaperTape, Value )

    Etikettens textegenskap.

  6. Kör tilläggsmaskinen genom att trycka på F5 för att öppna Förhandsgranskning. Ange sedan talen i Textinmatning-kontrollen och välj knapp.

    Textinmatning-kontrollen visar ett värde och etiketten visar den totala körningen.

  7. Återgå till standardarbetsytan genom att trycka på Esc.

  8. Om du vill visa pappersremsan, så infoga en Datatabell-kontroll, och ställ in dess egenskap Items till följande formel:

    PaperTape

    Välj Redigera fält i högra fönstret och välj sedan Lägg till fält, välj kolumnen Värde och välj sedan Lägg till för att visa den.

    Datatabell som visar värdena som läggs till i samlingen.

  9. Gör något av följande om du vill se värdena i din samling:

    • Om du använder förhandsversionen av Power Apps Studio väljer du Variabler i programmets författandemeny och sedan Samlingar.

    • Om du använder den klassiska versionen av Power Apps Studio väljer du Samlingar i menyn Arkiv.

  10. Om du vill lagra och hämta samlingen, så lägg till två ytterligare Knapp-kontroller och ange deras Text-egenskaper till Load och Save. Ange egenskapen OnSelect för knappen Läs in till den här formeln:

    Clear( PaperTape ); LoadData( PaperTape, "StoredPaperTape", true )

    Vi behöver rensa samlingen först eftersom LoadData kommer att lägga till de lagrade värdena i slutet av samlingen.

    OnVälj egenskapen för Load-knappen.

  11. Ange egenskapen OnSelect för knappen Spara enligt den här formeln:

    SaveData( PaperTape, "StoredPaperTape" )

    OnSelect * -egenskapen för Spara-knappen.

  12. Förhandsgranska igen genom att trycka på F5, ange siffror i Textinmatning-kontrollen och välj knappar. Klicka på knappen Spara. Stäng och läs in din app igen, och läs in din samling igen genom att välja knappen Läs in.

Anteckning

Funktionerna SaveData och LoadData fungerar i Power Apps Mobile men inte i Power Apps Studio eller webbspelaren för Power Apps.

Anteckning

Kan du berätta om dina inställningar för dokumentationsspråk? Svara i en kort undersökning. (observera att undersökningen är på engelska)

Undersökningen tar ungefär sju minuter. Inga personuppgifter samlas in (sekretesspolicy).