Sdílet prostřednictvím


Power FxGramatika vzorců YAML

Poznámka:

Microsoft Power Fx je nový název jazyka vzorců pro aplikace plátna. Práce na těchto článcích stále probíhá, jak extrahujeme jazyk z aplikací plátna, integrujeme jej s ostatními produkty Microsoft Power Platform a zpřístupňujeme jako open source. Začněte v části Přehled jazyka Microsoft Power Fx obsahující úvod do jazyka.

Microsoft Power Fx má dobře zavedenou gramatiku výrazů založenou na aplikaci Excel. Při použití v Power Apps a další hostitelích, kde uživatelské rozhraní poskytuje vazbu vzorce na název výrazu, však neexistuje standardní způsob úpravy vazby vzorce jako textu.

Pro tuto vazbu jsme jako náš jazyk zvolili průmyslový standard YAML. Pro práci s YAML již existuje velké množství editorů, nástrojů a knihoven. Tento článek popisuje, jak reprezentujeme vzorce v YAML.

V tuto chvíli podporujeme pouze omezenou podmnožinu jazyka YAML. Podporovány jsou pouze konstrukce popsané v tomto článku.

Není zde vše, co definuje aplikaci plátna; další informace tečou dalšími soubory, které nástroj vytváří a spotřebovává.

Znaménko Rovná se na začátku řádku

V první řadě musí všechny výrazy začínat znaménkem rovnítka =:

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

Znaménko = používáme tímto způsobem ze tří důvodů:

  • Je to v souladu s Excelem, který na začátku řádku používá znaménko =, kterým váže výraz na buňku.
  • Účinně uvozuje syntaxi jazyka vzorců, takže se jej YAML nepokouší analyzovat. Za normálních okolností by YAML chápal řetězec text: 1:00 jako minuty a sekundy a převedl jej na číslo. Vložením znaménka = YAML nepoužije svá implicitní pravidla psaní a vzorce zůstanou nedotčeny. Použití znaménka = pokrývá většinu případů, ale ne všechny, a tyto výjimky jsou popsány v následující části Jednořádkové vzorce.
  • V budoucnu budeme podporovat jak vzorce (uvozené znaménkem =), tak ne-vzorce (bez znaménka =) ve stejném souboru, stejně jako Excel. Můžeme to udělat v souborech YAML i jiných než YAML ve zdrojových souborech Microsoft Power Platform. Kdekoli je vzorec podporován, počáteční = rozlišuje výraz vzorce Power Apps ze statické skalární hodnoty.

Jednořádkové vzorce

Jednořádkové vzorce jsou psány ve formě:

Název:SPACE=Výraz

Mezera mezi dvojtečkou a rovnítkem musí odpovídat jazyku YAML. Rovnítko narušuje normální interpretaci výrazu jazykem YAML, což umožňuje interpretovat zbytek řádku jako Power Fx. Příklad:

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

Znaky mřížky # a dvojtečky : nejsou povoleny nikde v jednořádkových vzorcích, i když jsou v uvozovkách nebo v názvu identifikátoru. Chcete-li použít znak mřížky nebo dvojtečky, musíte vzorec vyjádřit jako víceřádkový vzorec. Znak mřížky je v YAML interpretován jako komentář a znak dvojtečky je interpretován jako nová mapa názvů. Chcete-li přidat komentář do jednořádkového komentáře, použijte řádkový komentář Power Fx uvozený znaky //.

Použití normálního uvození jazyka YAML jednoduchými uvozovkami a zpětnými lomítky jako v jazyce C není podporováno; místo toho použijte víceřádkový vzorec. Je to z důvodu konzistence a usnadnění vyjmutí/vložení mezi lištou vzorců v Power Apps Studio a zdrojovými soubory YAML.

Podívejte se do dokumentace o operátorech a identifikátorech aplikací plátna, kde najdete podrobnosti o povolených názvech a struktuře výrazu.

Víceřádkové vzorce

Vzorce mohou zahrnovat více řádků pomocí blokových skalárních indikátorů YAML:

Název:SPACE ( | nebo |+ nebo |- ) =Řádek výrazu Výrazová čára ...

Všechny řádky, které jsou součástí bloku, musí být odsazeny alespoň o jednu mezeru od úrovně prvního řádku.

Příklad:

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

Při importu jsou akceptovány všechny formy víceřádkových skalárních zápisů YAML, včetně >+. Aby však bylo zajištěno správné zachování mezer, ve výsledku se použijí pouze znaky |, |+ nebo |-.

Instance komponent

Komponenty jsou instancovány pomocí zápisu objektu YAML. Typ objektu je vytvořen pomocí operátoru As jako součásti značky YAML na levé straně. U ovládacích prvků kontejneru mohou být objekty vnořeny.

NázevAsTyp komponenty [ .Šablona komponenty ] : ( Jednořádkový vzorec nebo Víceřádkový vzorec nebo Instance objektu ) ...

Všechny řádky, které jsou součástí bloku, musí být odsazeny alespoň o jednu mezeru od úrovně prvního řádku.

Pří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 být jakákoliv komponenta plátna nebo ovládací prvek. Základní typy, například Číslo, nejsou podporovány.

Component-Template je volitelný specifikátor pro komponenty, které mají různé šablony, jako je galerie. Ne všechny komponenty mají šablony.

Obsahuje-li Název speciální znaky a je uzavřen v jednoduchých uvozovkách, celou frázi nalevo od dvojtečky je třeba uvést. To lze provést jedním z následujících způsobů:

  • Pomocí jednoduchých uvozovek uzavřete celou levou stranu, což vyžaduje, aby byly jednoduché uvozovky použity dvakrát:
    '''A name with a space'' As Gallery':
    
  • K uzavření celé levé strany použijte uvozovky, ale v názvu nesmí být žádné dvojité uvozovky:
    "'A name with a space' As Gallery":
    

Definice komponenty

Podobně jsou komponenty definovány vytvořením instance jednoho z podporovaných základních typů. Základní typy nelze instancovat přímo. V definici objektu lze přidat vlastnosti k tomu, co poskytuje základní typ.

Podporované základní typy jsou: CanvasComponent

Jednoduchá definice vlastnosti

Komponenty používají vlastnosti ke komunikaci s aplikací, ve které jsou hostovány.

Název: ( Jednořádkový výraz nebo Víceřádkový výraz )

Typ vzorce je implikován typem výrazu.

Pro vstupní vlastnosti poskytuje výraz výchozí hodnotu, které je vložena do aplikace při vytvoření instance komponenty. Tvůrce může tento výraz upravit, jak uzná za vhodné, ale nemůže změnit typ.

U výstupních vlastností provede výraz požadovaný výpočet. Tvůrce nemůže tento výraz upravit, protože je zapouzdřen v komponentě.

V tuto chvíli jsou všechny vlastnosti pouze tokem dat a nemohou obsahovat vedlejší účinky.

V tuto chvíli zde nejsou definována další metadata o vlastnosti, ale jsou definována v ostatních souborech souboru .msapp, například v popisu vlastnosti.

Pří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 YAML

Komentáře YAML

Řádkové komentáře YAML oddělené znakem mřížky # nejsou zachovány nikde ve zdrojovém formátu. Místo toho ve vzorci oddělte komentáře řádků pomocí znaků // nebo je dejte do bloku pomocí znaků /* a */. Další informace: Komentáře

Chyby při obvyklých nástrahách

Existuje několik míst, kde je gramatika Power Fx a YAML nekompatibilní nebo může být pro uživatele matoucí. V těchto případech je vyvolána chyba.

Podívejme se na příklad:

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

Znak mřížky # je považuje YAML za komentář, i když je vložen do něčeho, co Excel považuje za textový řetězec (uzavřený ve dvojitých uvozovkách). Aby nedocházelo k nejasnostem, způsobí tento případ během importu chybu. Místo toho lze použít víceřádkovou formu jazyka YAML.

V případě hodnoty proměnné record považuje YAML a: a b: za další vazbu mapy názvů. YAML umožňuje opětovné použití stejné mapy názvů, přičemž poslední potichu přepíše všechny předchozí definice. Protože to může být pro tvůrce používajícího minimum kódu matoucí a může to mít za následek ztrátu vzorce vlastnosti, dojde k chybě, pokud je stejný název nalezen dvakrát.