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

I andra verktyg kan du ha utfört en uttrycklig beräkning och lagrat resultatet i en variabel. PowerApps 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 PowerApps 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.

Omvandla Excel till PowerApps

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.

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.

PowerApps

Appar som du skapar i PowerApps 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 TextBox1, samt två kontroller för Textindata** med namnen TextInput1 och TextInput2. Om du sedan anger egenskapen **Text för TextBox1 till TextInput1 + TextInput2, kommer den alltid visa summan av de tal som finns i TextInput1 och TextInput2 automatiskt.

Observera att kontrollen TextBox1 är markerad och visar textformeln 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:

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

Du kan använda formler i PowerApps 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(TextBox1.Text) < 0, Red, Black )

Om resultatet av vår beräkning i TextBox1.Text nu är negativt, visas talet i rött:

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 SharePoint-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.

Erbjudande

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

  • Om du kan Excel, kan du PowerApps. 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 textinmatningskontroll. 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 PowerApps uppnår du alltihop med en enda formel på en enda rad.
  • Om du vill ta reda på var texten i TextBox1 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 PowerApps 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.

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?

Skapa 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 PowerApps ä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 + Text1 )

    Första gången en användare väljer knappen Add och Set anropas, skapas RunningTotal med ett tomt standardvärde. Dessutom behandlas det som noll.

  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 )

  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.

  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.

  7. Om du vill se vår globala variabels värde går du till Arkiv-menyn och väljer Variabler i den vänstra rutan.

  8. Om du vill se alla platser där våra variabler definieras och används, markerar du den.

Typer av variabler

Det finns tre typer av variabler i PowerApps:

Variabeltyp Omfång Beskrivning Funktioner
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. Set
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
Navigera
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
Patch
Update
Remove
SaveData
LoadData
osv.

Alla variabler skapas implicit när de används i funktionerna Set, UpdateContext, Navigate eller Collect. Det finns ingen explicit deklaration av variabler, eftersom detta görs i andra programeringsverktyg. Typer av variabler härleds också implicit från de värden som är placerade i dem.

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 eller, som när det gäller samlingar, då du kan lagra på den lokala enheten med funktionen SaveData. När appen läses första gången får alla variabler ett tomt värde.

Du kan läsa värdet genom att använda variabelns. När du t.ex. en gång har definierat med Set( MyColor, Red) kan du använda MyVar var som helst där ett färgvärde kan användas och ersättas med Red. Det är möjligt att ha en global variabel eller en samling med samma namn som en kontextvariabel. I det här fallet har kontextvariabeln företräde. Du kan fortfarande referera till den globala variabeln eller samlingen med hjälp av disambigueringsoperatorn @[MyColor].

Skapa en sammanhangsvariabel

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 skapar och ställer in sammanhangsvariabler med hjälp av funktionen UpdateContext. Om en sammanhangsvariabel inte redan finns när den uppdateras första gången, skapas den med ett tomt standardvärde.
  • Du skapar och 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 använder du dess namn direkt.
  • Du kan också ange en sammanhangsvariabel när en skärm visas, med hjälp av funktionen Navigate. Om du tänker på en skärm som en sorts procedur eller subrutin, liknar detta 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 + Text1 } )

    Första gången en användare väljer knappen Lägg till och UpdateContext anropas, skapas RunningTotal med ett tomt standardvärde. Dessutom behandlas det som noll.

  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 med formeln UpdateContext( { RunningTotal: 0 } ).

  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.

  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.

  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. Om du vill se detta, så infoga en ny skärm och infoga en knapp där egenskapen OnSelect har värdet:

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

    Om du väljer den här knappen på Screen2 (som du kan göra när du redigerar om du väljer knappen) visas Screen1. Ge även kontextvariabeln RunningTotal värdet -1000.

  8. Om du vill se vår kontextvariabels värde går du till Arkiv-menyn och väljer Variabler i den vänstra rutan.

  9. Om du vill se var kontextvariabeln definieras och används, så välj den.

Skapa 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 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:

    Collect( PaperTape, TextInput1.Text )

    Den här formeln lägger 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.

  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 )

  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 )

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

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

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

    PaperTape

    Du måste också markera de kolumner som ska visas i den högra rutan. I vårt fall visas kolumnen Value:

  9. Om du vill se värdena i samlingen väljer du Samlingar i menyn Arkiv.

  10. Lägga till två ytterligare kontroller för Om du vill lagra och hämta samlingen, så lägg till två ytterligare knappkontroller och ange deras text till Load och Save. Ställ in egenskapen OnSelect för Load på:

    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.

  11. Ställ in egenskapen OnSelect för Save på:

    SaveData( PaperTape, "StoredPaperTape" )

  12. Förhandsgranska igen genom att trycka på F5, ange siffror i textinmatningskontrollen och välj knappar. Välj knappen Save. Stäng och läs in din app igen, och läs in din samling igen genom att välja knappenLoad.

    Obs: SaveData och LoadData fungerar inte när de körs i en webbläsare. Du måste använda studion som installerats på Windows eller någon av spelarna för mobila enheter.