Megosztás a következőn keresztül:


Power FxYAML képletek nyelvtana

Feljegyzés

A Microsoft Power Fx a vászonalapú alkalmazások képletnyelvének új neve. Ezek a cikkek még nem véglegesek; miközben kinyerjük a vászonalapú alkalmazás nyelvét, integráljuk más Microsoft Power Platform-termékekkel, és nyílt forráskódúként elérhetővé tesszük. A nyelv megismeréséhez először olvassa el A Microsoft Power Fx áttekintése című cikket.

A Microsoft Power Fx bevált nyelvtant használ az Excel-alapú kifejezésekhez. Ha azonban a Power Apps-ben és más hosztokban használják, ahol a felhasználói felület a képletek név-kifejezés kötését biztosítja, a képletkötést nem lehet szabványos módon szövegként szerkeszteni.

A kötés nyelveként az iparági standard megoldást, a YAML-t választottuk. Már számos szerkesztő, eszköz és függvénytár van a YAML használatához. Ez a cikk ismerteti, hogyan reprezentáljuk a képleteket a YAML-ben.

Jelenleg a YAML nyelvnek csak egy korlátozott készletét támogatjuk. Csak a cikkben ismertetett konstrukciók támogatottak.

Itt nem szerepel minden, vászonalapú alkalmazásnak minősülő megoldás; a további információk az eszköz által előállított és felhasznált egyéb fájlokon keresztül mozognak.

Bevezető egyenlőségjel

Mindenekelőtt minden kifejezésnek egyenlőségjellel (=) kell kezdődnie:

Visible: =true
X: =34
Text: |
	="Hello, " &
	"World"

Az = jelt három okból használjuk így:

  • Az Excel ugyanezt a megoldást használja: a kifejezések cellákhoz kötéséhez bevezető = karaktert kell használni.
  • Ez hatékonyan megkerüli a képletnyelv szintaxisát, így a YAML nem próbálja meg elemezni. Normál körülmények között a YAML a text: 1:00 kifejezést percekként és másodpercekként kezelné, és számmá konvertálná. Ha beszúr egy = karaktert, akkor a YAML nem használja majd az implicit beírási szabályait, és a képletek nem sérülnek. Az = ugyan a legtöbb esetben használható – azonban nem mindig. Ezeket a kivételeket az Egysoros képletek rész ismerteti.
  • A jövőben ugyanabban a fájlban képletet (ami = karakterrel kezdődik) és nem képletet (= nélkül) is lehet majd használni, akárcsak az Excel esetében. Ez a YAML-fájlokra és a nem YAML-fájlokra is érvényes lesz a Microsoft Power Platform-forrásfájlokban. Bárhol, ahol egy képlet támogatott a sorlejei = megkülönböztet egy Power Apps képletkifejezést egy statikus skálaértékről.

Egysoros képletek

Az egysoros képletek formátuma a következő:

Név:SPACE=kifejezés

A YAML-kompatibilitáshoz a kettőspont és az egyenlőségjel között szóköznek kell lennie. Az egyenlőségjel megszakítja a kifejezés normál YAML-értelmezését, így a rendszer a sor további részét Power Fx-ként értelmezheti majd. Például:

Text1: ="Hello, World"
Text2: ="Hello " & ", " & "World"
Number1: =34
Boolean1: =true
Time1: =1:34

Kettőskereszt (#) és kettőspont (:) még akkor sem használható a képletben, ha idézett szöveges karakterláncban vagy azonosító nevében szerepel. Kettőskereszt vagy kettőspont használatához többsoros képletként kell kifejezni a képletet. A YAML a kettőskeresztet hozzászólásként, a kettőspontot pedig új névleképzésként értelmezi. Ha egysoros megjegyzéshez szeretne megjegyzést felvenni, használja a Power Fx-sor // kezdetű megjegyzését.

A YAML normál escape-karaktereinek aposztrófokkal és fordított C-perjelekkel való használata nem támogatott; használjon többsoros képletet. Ez a konzisztencia biztosítása, illetve a Power Apps Studio képletsávja és a YAML-forrásfájlok közötti kivágás/beillesztés művelet elősegítése érdekében van így.

Az engedélyezett nevekre és a kifejezések szerkezetére vonatkozó részleteket a vászonalapú alkalmazás operátorai és az azonosítói dokumentáció tartalmazza.

Többsoros képletek

A képletek – a YAML blokkskaláris mutatóit használva – több sorba is feloszthatók:

Név:SPACE ( | vagy |+ vagy |- ) =Kifejezés-sorKifejezés-sor ...

A blokk részét képező minden sort be kell húzni legalább egy szóközzel az első sor szintjétől.

Például:

Text1: |
    ="Hello, World"
Text2: |
    ="Hello" &
    "," &
    "World"

A rendszer a YAML többsoros skalárjelöléseinek valamennyi formáját elfogadja (többek között a >+ jelölést is). A térközkarakterek megfelelő megőrzésének biztosítása érdekében viszont csak |, |+ vagy |- létrehozására kerül sor.

Összetevőpéldány

Az összetevők példányainak készítése YAML-objektumjelöléssel történik. Az objektum típusának megállapítása az As operátor bal oldali YAML-címke részeként való használatával történik. Tárolóvezérlők esetén az objektumok egymásba ágyazhatóak.

NévAsComponent-Type [ .Component-Template ] : ( Egysoros képlet vagy többsoros képlet vagy objektumpéldány ) ...

A blokk részét képező minden sort be kell húzni legalább egy szóközzel az első sor szintjétől.

Például:

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
            ) 

A Component-Type bármilyen vászon összetevő vagy vezérlő lehet. Az alaptípusok – például a Szám – nem támogatottak.

A Component-Template opcionális specifikátor a különböző sablonokkal rendelkező összetevőkhöz, például a katalógushoz. Nem minden összetevő tartalmaz sablonokat.

Ha a Név különleges karaktereket tartalmaz és aposztrófok között van, akkor a kifejezés kettősponttól balra lévő részét teljes egészében át kell léptetni. Ez az alábbi megoldások valamelyikével lehetséges:

  • A bal oldal egészét aposztrófok közé kell helyezni; ehhez a meglévő aposztrófokat kétszer kell használni:
    '''A name with a space'' As Gallery':
    
  • A bal oldal egészét dupla idézőjelek közé kell helyezni; ügyeljen arra, hogy a névben ne legyen dupla idézőjel:
    "'A name with a space' As Gallery":
    

Összetevődefiníció

Az összetevőket hasonlóképpen az egyik támogatott alaptípus példányának létrehozásával lehet definiálni. Az alaptípusok példányai nem hozhatók létre közvetlenül. Az objektumdefiníción belül az alaptípus által biztosított tulajdonságok adhatók hozzá.

A támogatott alaptípusok: CanvasComponent

Definíció egy tulajdonsággal

Az összetevők tulajdonságok használatával kommunikálnak azzal az alkalmazással, amelyben üzemelnek.

Név: ( Egysoros kifejezés vagy Többsoros kifejezés )

A képlet típusát a kifejezés típusa határozza meg.

A bemeneti tulajdonságok esetén a kifejezés biztosítja az alkalmazásba beszúrandó alapértéket az összetevő példányozása során. A készítő igény szerint módosíthatja ezt a kifejezést, a típust viszont nem tudja módosítani.

A kimeneti tulajdonságok esetén a kifejezés biztosítja az elvégzendő számítást. A készítő nem tudja módosítani ezt a kifejezést, mert a kifejezés az összetevőbe van beágyazva.

Jelenleg minden tulajdonság csak adatfolyam, és nem biztosíthat semmilyen mellékhatást.

Jelenleg a tulajdonságra vonatkozó további metaadatok definiálása nem itt, hanem a .msapp fájl másik fájljaiban történik (például a tulajdonság leírásában).

Például:

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-kompatibilitás

YAML-megjegyzések

A YAML-sor kettőskereszttel (#) elválasztott megjegyzéseit a rendszer a forrásformátum egyik részében sem őrzi meg. Ehelyett a képleteken belül a sorokban lévő megjegyzéseket // karakterekkel választhatja el, vagy a /* és a */ használatával blokkolhatja a megjegyzéseket. További információ: Megjegyzések

Hibák a gyakori buktatókhoz

Néhány helyen a Power Fx és a YAML nyelvtana nem kompatibilis, illetve nem egyértelmű a felhasználók számára. Ezekben az esetekben hibát jelez a rendszer.

Ez történik például a következő esetben:

Text: ="Hello #PowerApps"
Record: ={ a: 1, b: 2 }

a kettőskeresztet (#) a YAML még akkor is megjegyzésként kezeli, ha olyan elembe van beágyazva, amit az Excel szöveges karakterláncként érzékel (dupla idézőjelek közé téve). Hogy a helyzet egyértelmű legyen, a rendszer ilyen esetben hibát jelez az importálás során. Ehelyett használható többsoros YAML-űrlap.

A record értékeként a YAML úgy vesz, hogy az a: és a b: egy másik névleképezés-kötés. A YAML lehetővé teszi ugyanannak a névleképezésnek az újbóli felhasználását; az utolsó példány a háttérben felülírja az összes korábbi definíciót. Mivel ez zavaró lehet a minimális programozást igénylő kódokat készítők számára, illetve a tulajdonságok képleteinek elvesztését eredményezheti, a rendszer hibaüzenetet küld, ha kétszer találkozik egy adott névvel.