Power FxGramatyka formuły YAML
Uwaga
Microsoft Power Fx to nowa nazwa języka formuł dla aplikacji kanw. Te artykuły są pracą w toku, gdyż stale wyodrębniamy język z aplikacji kanw, integrujemy go z innymi produktami Microsoft Power Platform i udostępniamy jako rozwiązanie open source. Zacznij od przeglądu Microsoft Power Fx, aby znaleźć wprowadzenie do języka.
Microsoft Power Fx używa dobrze znanej gramatyki wyrażeń z Excel. Jednak gdy są używane w Power Apps i innych hostach, gdzie interfejs użytkownika zawiera powiązanie nazwy z wyrażeniem dla formuły, nie istnieje standardowy sposób edytowania formuły wiążącej jako tekst.
Wybraliśmy znany w branży standard YAML jako język tego powiązania. Jest już wiele edytorów, narzędzi i bibliotek do pracy z zestawem YAML. W tym artykule opisano, w jaki sposób reprezentujemy formuły w technologii YAML.
W tym momencie obsługujemy tylko ograniczony podzbiór zestawu YAML. Obsługiwane są tylko konstruktory opisane w tym artykule.
Nie wszystko, co definiuje aplikację kanw, jest tutaj reprezentowane; więc dodatkowe informacje spływają za pośrednictwem innych plików, które narzędzie generuje i zużywa.
Wiodący znak równości
Wszystkie wyrażenia muszą rozpoczynać się od znaku równości =
:
Visible: =true
X: =34
Text: |
="Hello, " &
"World"
Korzystamy z =
z trzech powodów:
- Jest to zachowanie spójne z programem Excel, który używa wiodącej
=
do wiązania wyrażenia z komórką. - W praktyce oznacza to, że składnia języka umożliwia YAML zignorowanie formuły i brak jej analizy. Zwykle YAML traktuje
text: 1:00
jako minuty i sekundy, konwertując to na liczbę. Dzięki wstawianiu=
YAML nie będzie używać niejawnych reguł zapisu i formuła pozostanie niezmieniona. Używanie=
rozwiązuje większość problemów (ale nie wszystkie). Wyjątki opisano w następnej sekcji pt. formuły jednowierszowe. - W przyszłości będziemy obsługiwać zarówno formuły (zaczynające się od
=
) jak i ciągi inne niż formuły zaczynające się od=
w tym samym pliku, tak jak w przypadku programu Excel. Możemy to zrobić zarówno w plikach YAML, jak i w plikach źródłowych innych niż YAML w Microsoft Power Platform. Tam, gdzie obsługiwana jest formuła, otwierający znak=
odróżnia wyrażenie formuły Power Apps od statycznej wartości skalarnej.
Formuły jednowierszowe
Formuły jednowierszowe są zapisane w formularzu:
Wyrażenie nazwy:
SPACE
=
Spacja między dwukropkiem a znakiem równości jest wymagana, aby być zgodna ze standardem YAML. Znak równości zakłóci normalną interpretację wyrażenia przez YAML, co umożliwia interpretowanie pozostałej części wiersza jako Power Fx. Na przykład:
Text1: ="Hello, World"
Text2: ="Hello " & ", " & "World"
Number1: =34
Boolean1: =true
Time1: =1:34
Znak kratki (#
) i dwukropek (:
) nie są dozwolone w żadnym miejscu w formułach jednowierszowych, nawet jeśli są w cudzysłowie lub występują jako nazwa identyfikatora. Aby użyć kratki lub dwukropka, należy wyrazić formułę jako formułę wielowierszową. Znak kratki jest interpretowany jako komentarz w YAML, a dwukropek jest interpretowany jako nowe mapowanie nazwy. Aby dodać komentarz do komentarza jednowierszowego, użyj komentarza wiersza Power Fx zaczynającego się od //
.
Używanie normalnej ucieczki YAML z pojedynczym cudzysłowem i ukośnikami nie jest obsługiwane. Skorzystaj z formuły wielowierszowej. Ma to zapewnić spójność i ułatwić wycinanie/wklejanie między paskami formuł w Power Apps Studio i plikach źródłowych YAML.
Szczegółowe informacje na temat dozwolonych nazw i struktury wyrażenia można znaleźć w dokumentacji aplikacji kanw dotyczącej operatorów i identyfikatorów.
Formuły wielowierszowe
Formuły mogą obejmować wiele wierszy przy użyciu blokowych wskaźników skalarnych YAML.
Nazwa:
SPACE
( |
lub |+
lub |-
) =
Liniawyrażenia Linia wyrażenia...
Wszystkie wiersze, które są częścią bloków, muszą być wcinane na co najmniej jedno miejsce na poziomie pierwszego wiersza.
Na przykład:
Text1: |
="Hello, World"
Text2: |
="Hello" &
"," &
"World"
Wszystkie notacje skalarne YAML są akceptowane podczas importu, w tym na przykład >+
. Aby jednak upewnić się, że spacja została poprawnie zachowana, tworzone są tylko |
, |+
i |-
.
Wystąpienie składnika
Składniki są wystąpieniem przy użyciu notacji obiektu YAML. Typ obiektu jest ustalany przez operator As
jako część znacznika YAML po lewej. W przypadku formantów kontenerów obiekty mogą być zagnieżdżone.
Nazwa Typ-komponentuAs
[ Szablon-komponentu .
] ( :
Formuła-jednowierszowa lub formuła-wielowierszowa lub instancja obiektu ) ...
Wszystkie wiersze, które są częścią bloków, muszą być wcinane na co najmniej jedno miejsce na poziomie pierwszego wiersza.
Na przykład:
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 może być dowolnym składnikiem kanwy lub kontrolką. Typy podstawowe, takie jak Liczba, nie są obsługiwane.
Component-Template jest opcjonalnym specyfikatorem dla składników, które mają różne szablony, takie jak Galeria. Nie wszystkie składniki mają szablony.
Jeśli nazwa zawiera znaki specjalne i zostanie otoczona pojedynczymi cudzysłowami, trzeba będzie przechować całą frazę po lewej stronie dwukropka. Można to osiągnąć w dowolny z wymienionych sposobów:
- Do owinięcia całej lewej strony wykorzystać pojedyncze cudzysłowy. Wymaga to, aby istniejące cudzysłowy pojedyncze używane były dwa razy:
'''A name with a space'' As Gallery':
- Do owinięcia całej lewej strony należy użyć cudzysłowów podwójnych, ale należy się upewnić, że w nazwie nie ma cudzysłowów:
"'A name with a space' As Gallery":
Definicja składnika
Składniki są definiowane przez utworzenie wystąpienia jednego z obsługiwanych typów podstawowych. Nie można tworzyć wystąpienia typów podstawowych bezpośrednio. W definicji obiektu można dodać właściwości do zawartości typu podstawowego.
Obsługiwane typy podstawowe to: CanvasComponent
Definicja właściwości prostej
Składniki używają właściwości do komunikowania się z aplikacją, w której są hostowane.
Nazwa:
( wyrażenie jednowierszowe lub wyrażenie wielowierszowe)
Typ formuły zostanie poszukany przez typ wyrażenia.
W przypadku właściwości wejściowych to wyrażenie umożliwia domyślne wstawiane do aplikacji podczas wystąpienia składnika. Producent może zmodyfikować to wyrażenie zgodnie z ustawieniami, ale nie może zmienić typu.
W przypadku właściwości wyjściowych wyrażenie zawiera obliczenia, które należy wykonać. Producent nie może zmodyfikować tego wyrażenia, ale jest ono schowane w składniku.
Obecnie wszystkie właściwości są tylko właściwościami przepływu danych i nie mogą zawierać efektów ubocznych.
W tym momencie dodatkowe metadane dotyczące właściwości nie są tutaj opisane, ale są zdefiniowane w innych plikach pliku .msapp
, na przykład w opisie właściwości.
Na przykład:
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
Zgodność z YAML
Komentarze YAML
Komentarze wiersza YAML rozdzielane znakiem kratki #
nie są zachowywane w formacie źródłowym. Zamiast tego w formule ogranicz komentarze w wierszu za pomocą znaków //
lub zablokuj dodawanie komentarzy przy użyciu /*
oraz */
. Więcej informacji: Komentarze
Często występujące błędy
Istnieje kilka miejsc, w których gramatyki Power Fx i YAML są niekompatybilne lub mogą być mylące. W tych przypadkach jest wyświetlany błąd.
Na przykład w poniższym przykładzie:
Text: ="Hello #PowerApps"
Record: ={ a: 1, b: 2 }
Znak kratki #
jest traktowany jak komentarz przez YAML, mimo że jest osadzony w czymś, co program Excel uzna za ciąg tekstowy (otoczone przez cudzysłów podwójny). Aby uniknąć nieporozumień, ta sytuacja zgłosi błąd podczas importowania. Należy zamiast tego użyć formularza wielowierszowego YAML.
W przypadku wartości dla record
, YAML uznaje a:
oraz b:
za inne powiązanie mapowania nazw. YAML pozwala wielokrotnie używać tego samego mapowania nazw, a ostatnie zastępuje wszystkie poprzednie definicje. Ponieważ może to być mylące dla twórcy o niskich umiejętnościach koderskich i może spowodować utratę formuły właściwości, zgłaszany jest błąd, jeśli dwukrotnie pojawia się ta sama nazwa.