Power FxYAML-formelgrammatik
Kommentar
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.
Microsoft Power Fx har en väletablerad grund för sitt grundande i Excel. När den används i Power Apps och andra värdar där UI tillhandahåller namn-till-uttryck-bindningen för en formel, det finns inget standard sätt att redigera formelbindningen som text.
Vi har valt branschstandarden YAML som vårt språk för den här bindningen. Det finns redan ett stort antal redigerare, verktyg och bibliotek för att arbeta med YAML. I den här artikeln beskrivs hur vi representerar formeln i YAML.
För den här gången stöder vi endast en begränsad delmängd YAML. Endast de konstruktioner som beskrivs i den här artikeln stöds.
Allt som definierar en mobilapp representeras inte här. ytterligare information passerar andra filer som verktyget tillverkar och använder.
Likhetstecken för inledande
För det första måste alla likhetstecken börja med ett inledande likhetstecken =
:
Visible: =true
X: =34
Text: |
="Hello, " &
"World"
Vi använder detta =
på det här sättet av tre skäl:
- Den är konsekvent med Excel, där ett uttryck som leder
=
till att ett uttryck binds till en cell. - Formelspråkets syntax undviks så att YAML inte parsar det. Normalt sett räknas YAML
text: 1:00
som minuter och sekunder och konverteras till ett tal. Genom att infoga ett=
använder YAML inte sina inmatningsregler och formeln skadas inte. Med=
omfattar de flesta fall, men inte alla, och dessa undantag beskrivs i följande avsnitt Enradiga formler. - I framtiden kommer vi att stödja båda formlerna (börjar med
=
) och icke formler (nej=
) i samma fil, precis som Excel gör. Vi kan göra detta i YAML- och icke-YAML-filer i Microsoft Power Platform källfiler. Var en formel stöds särskiljer den inledande=
ett Power Apps formeluttryck från ett statiskt skalvärde..
Formler med en rad
Formler med en rad skrivs i formuläret:
Namn:
SPACE
=
Uttryck
Utrymmet mellan kolon och likhetstecken krävs för att vara YAML-kompatibelt. Likhetstecknet stör YAML: s normala tolkning av uttrycket, vilket gör att resten av raden kan tolkas som Power Fx. Till exempel:
Text1: ="Hello, World"
Text2: ="Hello " & ", " & "World"
Number1: =34
Boolean1: =true
Time1: =1:34
Nummertecken #
och kolon :
är inte tillåtna någonstans i enradsformler, även om de finns i ett numreringsnamn med textsträngar eller identifierare. Om du vill använda ett taltecken eller kolon måste du uttrycka formeln som en flerradsformel. Taltecknet används som en kommentar i YAML och kolonet används som en ny namnmappning i YAML. För att lägga till en kommentar till en enradskommentar använder du Power Fx-radkommentaren från och med //
.
Användning av vanliga YAML-undantag med enkla offerter och C-liknande bakåttecken stöds inte. I stället kan du använda en formel med flera rader. Detta är för enhetlighet och för att underlätta klippa ut/klistra in mellan formelfältet i Power Apps Studio och YAML-källfilerna.
Se dokumentationen för arbetsyteappen Operatorer och identifierare för information om tillåtna namn och uttrycksstrukturen.
Formler med flera rader
Formeln kan sträcka sig över flera rader med hjälp av YAML:s block skalär indikatorer:
Namn:
SPACE
( |
eller |+
eller |-
) =
Uttryck-LinjeUttryck-Linje ...
Alla rader som är en del av blocket måste dras in minst ett blanksteg från den första radens nivå.
Till exempel:
Text1: |
="Hello, World"
Text2: |
="Hello" &
"," &
"World"
Alla formulär med YAML-flerradiga skalära noteringar accepteras vid import inklusive >+
till exempel. Men för att säkerställa att det vita utrymmet bevaras korrekt, bara |
, |+
eller |-
skapas.
Komponentinstans
Komponenter instansas med hjälp av YAML-objekts notation. Objektets typ fastställs med As
operatorn som en del av YAML-taggen till vänster. För behållarkontroller kan objekt kapslas.
NamnAs
Component-Type [ .
Component-Template ] :
( Enradig-formel eller Multi-Line-Formula eller Object-instans ) ...
Alla rader som är en del av blocket måste dras in minst ett blanksteg från den första radens nivå.
Till exempel:
Gallery1 As Gallery.horizontalGallery:
Fill: = Color.White
Label1 As Label:
Text: ="Hello, World"
X: =20
Y: =40
Fill: |
=If( Lower( Left( Self.Text, 6 ) ) = "error:",
Color.Red,
Color.Black
)
Component-Type kan vara vilken arbetsytekomponent eller kontroll som helst. Grundtyper, till exempel Tal, stöds inte.
Component-Template är en valfri specificerare för komponenter som har olika mallar, till exempel Gallery. Alla komponenter har inte mallar.
Om namnet innehåller specialtecken och innehåller enkla citattecken måste hela frasen till vänster i kolonet användas. Detta kan göras på något av följande sätt:
- Använd enkla citattecken för att slå om hela vänster sida, vilket kräver att de befintliga enkla citattecken används två gånger:
'''A name with a space'' As Gallery':
- Använd dubbla citattecken om du vill slå in hela vänster sida, men se till att det inte finns några dubbla citattecken i namnet:
"'A name with a space' As Gallery":
Komponentdefinition
På samma sätt definieras komponenter genom att skapa en instans av en av de bastyper som stöds. Grundtyperna kan inte instansas direkt. Inom en objektdefinition kan du lägga till egenskaper i vad bastypen ger.
Bastyper som stöds är: CanvasComponent
Enkel definition för egenskap
Komponenter använder egenskaper för att kommunicera med det program de är värd för.
Namn:
( enradsuttryck eller flerradsuttryck )
Typen av formeln antyds av typen av uttrycket.
För indataegenskaper tillhandahåller uttrycket standardvärdet som ska infogas i programmet när komponenten instansas. Skaparen kan ändra det här uttrycket som de vill, men kan inte ändra typen.
För utdataegenskaper tillhandahåller uttrycket den beräkning som ska utföras. Tillverkaren kan inte ändra det här uttrycket, det är inkapslat i komponenten.
För just nu är alla egenskaper endast dataflöden och kan inte innehålla bieffekter.
För den här gången definieras inte ytterligare metadata om egenskapen här utan i stället i de andra filerna i .msapp
-filen, till exempel egenskapens beskrivning.
Till exempel:
DateRangePicker As CanvasComponent:
DefaultStart: |-
=// input property, customizable default for the component instance
Now()
DefaultEnd: |-
=// input property, customizable default for the component instance
DateAdd( Now(), 1, Days )
SelectedStart: =DatePicker1.SelectedDate // output property
SelectedEnd: =DatePicker2.SelectedDate // output property
YAML-kompatibilitet
YAML-kommentarer
YAML-radkommentarer som är avgränsade efter nummertecknet #
bevaras inte var som helst i källformatet. Istället avgränsa radkommentarer inom en formel //
tecken eller blockerar kommentarer med /*
och */
. Mer information: Kommentarer
Fel vid vanliga fallgropar
Det finns några platser där Power Fx och YAML-reglerna är inkompatibla eller förvirrande för en användare. I så fall uppstår ett fel.
Till exempel i följande:
Text: ="Hello #PowerApps"
Record: ={ a: 1, b: 2 }
nummertecknet #
behandlas som en kommentar av YAML, även om det är inbäddat i vad Excel betraktar som en textsträng (försedd med dubbla citattecken). För att undvika förvirring uppstår ett fel vid importen. Du kan använda ett YAML flerradsformulär i stället.
När det gäller värdet för record
överväger YAML a:
och b:
att vara en annan namnmappbindning. YAML tillåter att samma namnmappning kan återanvändas, och den sista, i ett tysta fall, åsidosätter alla tidigare definitioner. Eftersom detta kan vara förvirrande för en lågkodstillverkare och kan resultera i att en egenskapsformel förloras, uppstår ett fel om samma namn påträffas två gånger.