Variabler
Anteckning
Microsoft Power Fx är det nya namnet på formelspråket för arbetsyteappar. Dessa artiklar är ett arbete som pågår när vi extraherar språket från program, integrerar det med andra Microsoft Power Platform produkter och gör det tillgängligt som öppen källkod. Börja med Microsoft Power Fx översikten för en introduktion till språket.
Om du har använt ett annat programmeringsverktyg, till exempel Visual Basic eller JavaScript, kanske du undrar: Var är variablerna? Microsoft Power Fx är lite annorlunda och kräver ett annat förhållningssätt. I stället för att leta efter en variabel när du skapar en formel kan du fråga: Vad skulle jag göra i ett kalkylark?
I andra verktyg kan du ha utfört en uttrycklig beräkning och lagrat resultatet i en variabel. Power Fx 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 ditt program.
I vissa fall kan du behöva använda variabler i Power Fx 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.
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.
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.
Logic som du skapar i Power Fx 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.
Till exempel i Power Apps kan du replikera Excel-beteendet i ett program genom att lägga till kontrollen Etikett med namnet Label1 och två kontroller för Textinmatning med namnet TextInput1 och TextInput2. Om du sedan anger egenskapen Text för Label1 till TextInput1.Text + TextInput2.Text, kommer den alltid visa summan av de tal som finns i TextInput1 och TextInput2 automatiskt.
Observera att kontrollen Label1 är markerad och visar textformeln i formelfältet överst på skärmen. Här hittar vi formeln TextInput1.Text + TextInput2.Text. 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 Label1 har beräknats om automatiskt och visar nu det nya värdet.
Du kan använda formler i Power Fx 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, Color.Red, Color.Black )
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.
Att använda formler för att skapa appar har många fördelar:
- Om du kan Excel, kan du Power Fx. 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 Fx 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 Fx arbeta åt dig.
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 |
---|---|
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. |
|
Användaren väljer knappen Lägg till. | |
77 läggs då till i löpande total. Användaren väljer knappen Lägg till. |
|
77 återigen läggs till i den löpande summan, vilket resulterar i 154. Användaren väljer knappen Rensa. |
|
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 knprogrammen Lägg till och Rensa uppdatera summan. Om appen inte fungerar som förväntat, vilken knapp är det som orsakar problemet?
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 Fx är globala variabler.
Hur globala variabler fungerar:
- Du anger värdet för den globala variabeln med funktionen Set. Set( MyVar, 1 ) ställer in den globala variabeln MyVar till 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:
Lägg till en textindatakontroll med namnet TextInput1 och två knappar med namnen Button1 och Button2.
Ange egenskapen Text för Button1 till "Lägg till" och ange egenskapen Text för Button2 till "Rensa".
Uppdatera den löpande summan varje gång en användare väljer knappen Add genom att ange egenskapen OnSelect till den här formeln:
Set( RunningTotal, RunningTotal + TextInput1.Text )
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 programmet. När användaren öppnar programmet 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.
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 )
Lägg till kontrollen Label 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.
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.
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.
Om du vill se alla platser där våra variabler definieras och används, markerar du den.
Power Fx i finns två typer av variabler:
Variabeltyp | Definitionsområde | 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 programmet. | Ställa |
Samlingar | Program | Innehåller en tabell med referenser från var som helst i programmet. 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. | Samla ClearCollect (Rensa inkas) |
När de används i Power Apps finns det en tredje typ av variabel:
Variabeltyp | Definitionsområde | Beskrivning | Funktioner som fastställer |
---|---|---|---|
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 (på engelska) Navigera |
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 Button-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 programmet, 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.
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 programmet får alla variabler ett initialt värde som är tomt.
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].
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 programmet 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:
Lägg till en textindatakontroll med namnet TextInput1 och två knappar med namnen Button1 och Button2.
Ange egenskapen Text för Button1 till "Lägg till" och ange egenskapen Text för Button2 till "Rensa".
Uppdatera den löpande summan varje gång en användare väljer knappen Add genom att ange egenskapen OnSelect till den här formeln:
UpdateContext( { RunningTotal: RunningTotal + TextInput1.Text } )
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 programmet 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.
Om du vill ange den löpande summan till 0 när en användare väljer knappen Clear anger du egenskapen OnSelect till den här formeln:
UpdateContext( { RunningTotal: 0 } )
Återigen används UpdateContext används med formeln UpdateContext( { RunningTotal: 0 } ).
Lägg till kontrollen Label och ange dess 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.
Förhandsgranska programmet. 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.
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:
Navigera( Screen1, Ingen, { KörTotalt: -1000 } )
Håll ned Alt-tangenten medan du markerar den här knappen för att visa Screen1 och ange kontextvariabeln RunningTotal till -1000.
Om du vill se värdet för kontextvariabeln går du till Arkiv-menyn och väljer Variabler i den vänstra rutan.
Om du vill visa var kontextvariabeln definieras och används, så välj den.
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). Värde
Låt oss återskapa vår tilläggsmaskin med en samling:
Lägg till en Text input kontroll med namnet TextInput1 och två knappar med namnen Button1 och Button2.
Ange egenskapen Text för Button1 till "Lägg till" och ange egenskapen Text för Button2 till "Rensa".
Uppdatera den löpande summan varje gång en användare väljer knappen Add genom att ange egenskapen OnSelect till den här formeln:
Samla ( 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 programmet. När en användare öppnar programmet 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.
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:
Klar ( PaperTape )
Om du vill visa den löpande summan lägger du till en etikett och anger egenskapen Text till denna formel:
Summa( PaperTape, Värde )
Kör tilläggsmaskinen genom att trycka på F5 för att öppna Förhandsgranskning. Ange sedan talen i Text Input-kontrollen och välj knapp.
Återgå till standardarbetsytan genom att trycka på Esc.
Om du vill visa pappersremsan, så infoga en Data table-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.
Om du vill se värdena i samlingen väljer du Samlingar i menyn Arkiv.
Om du vill lagra och hämta samlingen, så lägg till två ytterligare Button-kontroller och ange deras Text-egenskaper till Load och Save. Ange egenskapen OnSelect för knappen Läs in till den här formeln:
Klar ( 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.
Ange egenskapen OnSelect för knappen Spara enligt den här formeln:
SaveData ( PaperTape, "StoredPaperTape" )
Förhandsgranska igen genom att trycka på F5, ange siffror i Text Input-kontrollen och välj knappar. Klicka på knappen Spara. Stäng och läs in ditt program igen, och läs in din samling igen genom att välja knappen Läs in.