Zdieľať cez


Power FxGramatika vzorcov YAML

Poznámka

Microsoft Power Fx je nový názov jazyka vzorcov pre aplikácie plátna. Tieto články sú rozpracované, pretože jazyk extrahujeme z aplikácií plátna a integrujeme ho s ostatnými produktmi Microsoft Power Platform, aby sme ho sprístupnili ako open source. Začnite s prehľadom Microsoft Power Fx ako úvod do jazyka.

Microsoft Power Fx má dobre zavedenú gramatiku pre výrazy založené na programe Excel. Pri použití v Power Apps a v ďalších hostiteľoch, kde používateľské rozhranie poskytuje väzbu medzi názvom a výrazom pre vzorec, neexistuje štandardný spôsob úpravy väzby vzorca ako textu.

Vybrali sme si priemyselný štandard YAML ako náš jazyk pre túto väzbu. Na prácu s YAML už existuje veľké množstvo editorov, nástrojov a knižníc. Tento článok popisuje, ako reprezentujeme vzorce v YAML.

V súčasnosti podporujeme iba obmedzenú podmnožinu YAML. Podporované sú iba konštrukcie opísané v tomto článku.

Nie je tu znázornené všetko, čo definuje aplikáciu plátna; ďalšie informácie prechádzajú ďalšími súbormi, ktoré nástroj produkuje a spotrebúva.

Počiatočný znak rovnosti

Všetky výrazy musia v prvom rade začínať počiatočným znamienkom rovnosti =:

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

Používame = týmto spôsobom z troch dôvodov:

  • Je to v súlade s programom Excel, ktorý používa počiatočný znak = na viazanie výrazu na bunku.
  • Účinne ukončuje syntax vzorcového jazyka, aby sa YAML nepokúšal o jeho analýzu. Za normálnych okolností by YAML považovala text: 1:00 za minúty a sekundy a prevádzala ich na číslo. Vložením = YAML nepoužije svoje implicitné pravidlá pre písanie a vzorce nebudú poškodené. Použitie = sa týka väčšiny prípadov, ale nie všetkých, a tieto výnimky sú popísané v nasledujúcej časti, Jednoriadkové vzorce.
  • V budúcnosti budeme podporovať vzorce (začínajú na =) a iné výrazy ako vzorce (bez =) v rovnakom súbore, rovnako ako Excel. Môžeme to robiť v súboroch YAML a súboroch iných ako YAML v rámci zdrojových súborov Microsoft Power Platform. Kdekoľvek je podporovaný vzorec, úvodné = rozlišuje vyjadrenie vzorca Power Apps od statickej skalárnej hodnoty.

Jednoriadkové vzorce

Jednoriadkové vzorce sú napísané vo forme:

Názov:SPACE=Výraz

Medzera medzi dvojbodkou a znamienkom rovnosti musí vyhovovať YAML. Znamienko rovnosti narúša normálnu interpretáciu výrazu YAML, čo umožňuje interpretáciu zvyšku riadka ako Power Fx. Napríklad:

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

Znak čísla # a dvojbodky : nie sú povolené kdekoľvek v jednoriadkových vzorcoch, aj keď sú v úvodzovkách s textom alebo názvom identifikátora. Ak chcete použiť číselný znak alebo dvojbodku, musíte vzorec vyjadriť ako viacriadkový. Znak s číslom sa interpretuje ako komentár v YAML a dvojbodka sa interpretuje ako nová mapa mien v YAML. Ak chcete pridať komentár k jednoriadkovému komentáru, použite riadkový komentár Power Fx začínajúci na //.

Používanie normálneho ukončenia YAML s jednoduchými úvodzovkami a spätnými lomkami typu C nie je podporované; namiesto toho použite viacriadkový vzorec. Je to kvôli konzistencii a uľahčeniu vystrihnutia/vloženia medzi riadkom vzorcov v Power Apps Studio a zdrojovými súbormi YAML.

Pozrite si dokumentáciu o operátoroch a identifikátoroch aplikácií plátna, kde sú uvedené podrobnosti o povolených názvoch a štruktúre výrazu.

Viacriadkové vzorce

Vzorce môžu obsahovať viac riadkov pomocou blokových skalárnych ukazovateľov YAML:

Názov:SPACE ( | alebo |+ alebo |- ) =Riadka výrazu Výraz-riadok ...

Všetky riadky, ktoré sú súčasťou bloku, musia byť odsadené najmenej o jedu medzeru od úrovne prvého riadka.

Napríklad:

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

Pri importe sú akceptované všetky formy viacriadkových skalárnych zápisov YAML vrátane napr. >+. Za účelom zaistenia správneho zachovania medzery sa generujú iba |,|+ alebo|-.

Inštancia komponentu

Komponenty sú inštancované pomocou notácie objektu YAML. Typ objektu je určený pomocou operátora As ako súčasť značky YAML na ľavej strane. V prípade ovládacích prvkov kontajnera môžu byť objekty vnorené.

NázovAsTyp komponentu [ .Šablóna komponentu ] : ( Jednoriadkový vzorec alebo Viacriadkový vzorec alebo Inštancia objektu ) ...

Všetky riadky, ktoré sú súčasťou bloku, musia byť odsadené najmenej o jedu medzeru od úrovne prvého riadka.

Napríklad:

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 môže byť akýkoľvek komponent plátna alebo ovládací prvok. Základné typy, ako napr. Číslo, nie sú podporované.

Component-Template je voliteľný špecifikátor pre komponenty, ktoré majú rôzne šablóny, ako napríklad Galéria. Nie všetky komponenty majú šablóny.

Ak názov obsahuje špeciálne znaky a je zabalený do jednoduchých úvodzoviek, bude potrebné ukončiť celú frázu naľavo od dvojbodky. To sa dá vykonať jedným z týchto spôsobov:

  • Pomocou jednoduchých úvodzoviek zabaľte celú ľavú stranu, čo vyžaduje, aby sa existujúce jednoduché úvodzovky používali dvakrát:
    '''A name with a space'' As Gallery':
    
  • Pomocou dvojitých úvodzoviek zabaľte celú ľavú stranu, nezabudnite však, aby v názve neboli dvojité úvodzovky:
    "'A name with a space' As Gallery":
    

Definícia komponentu

Podobne sú komponenty definované vytvorením inštancie jedného z podporovaných základných typov. Základné typy nemožno inštancovať priamo. V rámci definície objektu je možné pridať vlastnosti k tomu, čo poskytuje základný typ.

Podporované základné typy: CanvasComponent

Jednoduchá definícia vlastnosti

Komponenty používajú vlastnosti na komunikáciu s aplikáciou, v ktorej sú hosťované.

Názov: ( Jednoriadkový výraz alebo Viacriadkový výraz )

Typ vzorca je naznačený typom výrazu.

Pre vstupné vlastnosti poskytuje výraz predvolené nastavenie, ktoré sa má vložiť do aplikácie pri zaraďovaní komponentu do inštancie. Tvorca môže tento výraz upraviť, ako uzná za vhodné, ale nemôže zmeniť typ.

Pre výstupné vlastnosti poskytuje výraz výpočet, ktorý sa má vykonať. Tvorca nemôže tento výraz upravovať, je zapuzdrený v súčasti.

V súčasnosti sú všetky vlastnosti iba tokom údajov a nemôžu obsahovať vedľajšie účinky.

V súčasnosti tu nie sú definované ďalšie metaúdaje o vlastnosti, ale sú definované v iných súboroch súboru .msapp, napríklad popis vlastnosti.

Napríklad:

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

Kompatibilita s YAML

Komentáre v YAML

Komentáre riadkov YAML ohraničené znakom čísla # sa nezachovajú nikde v zdrojovom formáte. Namiesto toho vo vzorci ohraničte komentáre riadkov znakom // alebo blokujte komentáre pomocou/* a */. Ďalšie informácie: Komentáre

Chyby pre bežné úskalia

Existuje niekoľko miest, kde sú gramatiky Power Fx a YAML nekompatibilné alebo môžu byť pre používateľa mätúce. V týchto prípadoch dôjde k chybe.

Napr. v nasledujúcom príklade:

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

znak čísla# je považovaný za komentár YAML, aj keď je zakomponovaný do toho, čo Excel považuje za textový reťazec (zabalený do dvojitých úvodzoviek). Aby sa predišlo nejasnostiam, bude tento prípad počas importu spôsobovať chybu. Namiesto toho sa môže použiť viacriadkový formulár YAML.

V prípade hodnoty pre record považuje YAMLa: a b: za ďalšiu väzbu mapy mien. YAML umožňuje opätovné použitie mapy rovnakých mien, pričom posledná potichu prepíše všetky predchádzajúce definície. Pretože to môže byť pre tvorcu s minimálnou potrebou programovania mätúce a môže to mať za následok stratu vzorca vlastnosti, dôjde k chybe, ak dôjde k rovnakému názvu dvakrát.