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 en textrutekontroll med namnet TextBox1, samt två textindatakontroller 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 Color i textrutan 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 textruta. 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 sammanhangsvariabel

För att kunna skapa vår tilläggsmaskin behöver vi en variabel som innehåller den löpande summan. De enklaste variablerna i PowerApps är sammanhangsvariabler.

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.
  • När användaren stänger en app, försvinner alla dess sammanhangsvariabler.

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 en textrutekontroll 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.

Skapa en samling

Om du vill referera till en variabel från någon skärm (inte bara den där den skapades), använder du en samling som innehåller en global variabel.

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 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
  • Alla formler har åtkomst till en samling från valfri skärm i appen.
  • När användaren stänger en app töms alla dess samlingar.

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:
    ClearCollect( RunningTotal, First( RunningTotal ).Value + TextInput1 )

    Med hjälp av ClearCollect med ett enstaka värde, skapas en post i samlingen med fältet Value. Första gången användaren väljer knappen Lägg till och ClearCollect anropas är RunningTotal tom. Dessutom kommer First att returnera ett tomt värde och behandlas 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:
    ClearCollect( RunningTotal, 0 )

    Återigen används ClearCollect med formeln ClearCollect( RunningTotal, 0 ).

  5. Om du vill visa den löpande summan lägger du till en textrutekontroll och anger egenskapen Text till denna formel:
    First(RunningTotal).Value

    Den här formeln extraherar fältet Value för den första posten i samlingen RunningTotal. Textrutan visar automatiskt värdet för RunningTotal när det ändras, baserat på knapparna som användaren väljer.

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

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

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