Operatory i identyfikatory
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.
Operatory Microsoft Power Fx są opisane poniżej. Niektóre z tych operatorów są zależne od języka autora. Zobacz Aplikacje globalne, aby uzyskać więcej informacji.
Symbol | Typ | Składnia | Opis |
---|---|---|---|
. | Selektor właściwości | Suwak1.Wartość Color.Red |
Wyodrębnia właściwość z tabeli, kontrolki lub wyliczenia. W ramach zgodności z poprzednimi wersjami można również użyć symbolu !. |
. W zależności od języka |
Separator dziesiętny | 1.23 | Separator oddzielający część całkowitą od części ułamkowej liczby. Znak zależy od języka. |
( ) | Nawiasy | Filtr(T, A < 10) (1 + 2) * 3 |
Służy do wymuszania pierwszeństwa i grupowania wyrażeń podrzędnych w dłuższym wyrażeniu |
+ | Operatory arytmetyczne | 1 + 2 | Dodawanie |
- | 2 - 1 | Odejmowanie i znak | |
* | 2 * 3 | Mnożenie | |
/ | 2 / 3 | Znak dzielenia (zobacz też funkcję Mod) | |
^ | 2 ^ 3 | Zapis wykładniczy, odpowiednik funkcji Power | |
% | 20% | Wartość procentowa (odpowiednik „* 1/100”) | |
= | Operatory porównania | Cena = 100 | Równa się |
> | Cena > 100 | Większe niż | |
>= | Cena >= 100 | Większe niż lub równe | |
< | Cena < 100 | Mniejsze niż | |
<= | Cena <= 100 | Mniejsze niż lub równe | |
<> | Cena <> 100 | Nie równa się | |
& | Operator łączenia ciągów | "cześć" & " " & "świat" | Umożliwia połączenie wielu ciągów w jeden ciąg |
&lub oraz | Operatory logiczne | Cena < : 100 && Slider1.Value = 20 lub Price < 100 And Slider1.Value = 20 |
Logiczna koniunkcja, odpowiednik funkcji And |
|| lub lub | Cena < 100 || Slider1.Value = 20 lub Cena < 100 lub Slider1.Value = 20 | Logiczna alternatywa, odpowiednik funkcji Or | |
! lub Not | ! (Cena < 100) lub Nie (Cena < 100) | Logiczna negacja, odpowiednik funkcji Not | |
Dokładnie | Operatorzy członkostwa | Galeria1.Wybrane dokładniew ZapisaneElementy | Przynależność do kolekcji lub tabeli |
Dokładnie | "Windows" dokładnie w "Aby wyświetlić okna w systemie operacyjnym Windows..." | Sprawdzenie występowania podciągu (z uwzględnieniem wielkości liter) | |
w | Gallery1.Selected in SavedItems | Przynależność do kolekcji lub tabeli | |
w | "The" w "Klawiatura i monitor..." | Sprawdzenie występowania podciągu (bez uwzględniania wielkości liter) | |
@ | Operator uściślania | MójStół[@fieldname] | Uściślanie pola |
@ | [@MyVariable] | Uściślanie globalne | |
, [zależny od języka] |
Separator listy | If(X < 10, "Niski", "Dobry") { X: 12, Y: 32 } [ 1, 2, 3 ] |
Oddziela: Ten znak zależy od języka. |
; [zależny od języka] |
Łączenie formuł | Zbierać(T, A); Nawigacja(S1, "") | Umożliwia oddzielenie wywołań funkcji we właściwościach zachowania. Operator łączenia zależy od języka. |
Gdy | Jako operator | Wszyscy klienci jako klient | Zastępuje ThisItem i ThisRecord w galeriach i funkcje zakresu rekordów. Jest to przydatne do zapewnienia lepszej, konkretnej nazwy i jest szczególnie ważne w scenariuszach zagnieżdżonych. |
Jaźń | Własny operator | Samowypełnienie | Uzyskanie dostępu do właściwości bieżącej kontrolki |
element nadrzędny | Operator elementu nadrzędnego | Parent.Fill (Wypełnienie nadrzędne) | Dostęp do właściwości kontenera kontrolki |
Ten przedmiot | Operator ThisItem | ThisItem.FirstName (To Przedmiot.Imię) | Dostęp do pól galerii lub kontrolki formularza |
To rekord | Operator ThisItem | ThisRecord.FirstName (To rekord.Imię) | Dostęp do pełnych rekordów i pojedynczych pól rekordu w ForAll, Suma, With i innych funkcji zakresu rekordu. Może zostać zastąpiony operatorem As. |
operatory in i exactin
Za pomocą operatorów in i exactin można wyszukiwać ciągi w źródle danych, takim jak kolekcja lub zaimportowana tabela. Operator in określa dopasowania niezależnie od wielkości liter, a operator exactin określa dopasowania na podstawie tej samej wielkości liter. Oto przykład:
Utwórz lub zaimportuj kolekcję o nazwie Zapasy i wyświetl ją w galerii zgodnie z opisem w pierwszej procedurze zawartej w temacie Wyświetlanie obrazów i tekstu w galerii.
Ustaw właściwość Items galerii za pomocą tej formuły:
Filter(Inventory, "E" in ProductName)W galerii zostaną wyświetlone wszystkie produkty z wyjątkiem Callisto, ponieważ nazwa tego produktu jest jedyną, która nie zawiera wskazanej litery.
Zmień właściwość Items galerii za pomocą tej formuły:
Filter(Inventory, "E" exactin ProductName)W galerii pojawi się tylko Europa, ponieważ tylko w tej nazwie występuje wskazana wielka litera.
Operatory ThisItem, ThisRecord i As
Kilka kontrolek i funkcji stosuje formuły do poszczególnych rekordów tabeli. Aby odwołać się do konkretnego rekordu w formule, należy użyć jednej z następujących opcji:
Operator | Dotyczy | Opis |
---|---|---|
Ten przedmiot | Kontrolka galerii Formant Edytowanie formularza Kontrolka formularza wyświetlania |
Domyślna nazwa bieżącego rekordu w kontrolce Galerii lub Form. |
To rekord | ForAll, Filter, With, Sum i inne funkcje zakresu rekordów | Domyślna nazwa bieżącego rekordu w ForAll i innych funkcjach zakresu rekordu. |
Jakonazwa | Kontrolka galerii ForAll, Filter, With, Sum i inne funkcje zakresu rekordów |
Definiuje nazwę bieżącego rekordu, zastępując domyślny ThisItem lub ThisRecord. Użyj As, aby ułatwić zrozumienie i rozpoznawanie niejednoznacznych formuł podczas zagnieżdżania. |
Operator ThisItem
Na przykład w poniższej kontrolce Galeria właściwość Elementy ma ustawioną wartość Pracownicy źródła danych (na przykład encja Pracownicy uwzględniona w próbce Northwind Traders):
Employees
Pierwsza pozycja w galerii to szablon, który jest replikowany dla każdego pracownika. Formuła na tym szablonie używa narzędzia ThisItem, aby odwołać się do bieżącego elementu:
ThisItem.Picture
Podobnie formuła nazwy zawiera także ThisItem:
ThisItem.'First Name' & " " & ThisItem.'Last Name'
Operator ThisRecord
ThisRecord jest używany w funkcjach, które mają zakres rekordu. Można na przykład użyć funkcji Filter z właściwością Items galerii, aby były widoczne tylko imiona z M:
Filter( Employees, StartsWith( ThisRecord.Employee.'First Name', "M" ) )
ThisRecord jest opcjonalny i implikowany przez bezpośrednie użycie pól, na przykład w tym przypadku mogliśmy napisać:
Filter( Employees, StartsWith( 'First Name', "M" ) )
Mimo że jest to opcjonalne, użycie ThisRecord może poprawiać czytelność formuł i może być wymagane w niejednoznacznych sytuacjach, gdy nazwa pola może być również nazwą relacji. ThisRecord jest opcjonalna, podczas gdy ThisItem jest zawsze wymagana.
Użyj ThisRecord, aby odwołać się do całego rekordu za pomocą funkcji Patch, Collect i innych funkcji dotyczących zakresu rekordu. Na przykład poniższa formuła ustawia status wszystkich nieaktywnych pracowników na aktywny:
With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
ForAll( InactiveEmployees,
Patch( Employees, ThisRecord, { Status: 'Status (Employees)'.Active } ) ) )
Jako operator
Użyj operatora As jako nazwy rekordu w galerii lub funkcji zakresu rekordów zastępując je domyślne ThisItem lub ThisRecord. Nazwa rekordu może ułatwiać zrozumienie formuł i może być wymagana w sytuacjach zagnieżdżonych w celu uzyskania dostępu do rekordów w innych zakresach.
Można na przykład zmodyfikować właściwość Items w galerii, aby użyć As w celu zidentyfikowania pracy z Pracownikiem:
Employees As Employee
Formuły obrazu i nazwy są dostosowywane, aby używać tej nazwy dla bieżącego rekordu:
Employee.Picture
Employee.'First Name' & " " & Employee.'Last Name'
As może być również używany z funkcjami zakresu rekordów w celu zastąpienia domyślnej nazwy ThisRecord. Możemy zastosować to do naszego poprzedniego przykładu, aby wyjaśnić rekord, z którym pracujemy:
With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
ForAll( InactiveEmployees As Employee,
Patch( Employees, Employee, { Status: 'Status (Employees)'.Active } ) ) )
Zagnieżdżanie galerii i funkcji zakresu rekordów ThisItem i ThisRecord zawsze odnosi się do wewnętrznego najstarszego zakresu, natomiast pozostawienie rekordów w zakresach zewnętrznych nie jest dostępne. Użyj As, aby udostępnić wszystkie zakresy rekordów, nadając każdemu unikalną nazwę.
Na przykład ta formuła tworzy wzór szachownicy jako ciąg tekstowy, zagnieżdżając dwie funkcje ForAll:
Concat(
ForAll( Sequence(8) As Rank,
Concat(
ForAll( Sequence(8) As File,
If( Mod(Rank.Value + File.Value, 2) = 1, " X ", " . " )
),
Value
) & Char(10)
),
Value
)
Ustaw kontrolkę Label i ustaw dla jej właściwości Text, aby wyświetlała następującą formułę:
Przyjrzyjmy się teraz, co się tu dzieje:
- W tym celu należy zaszeregować nienazwanej tabeli z 8 ponumerowanych rekordów z funkcji Sequence. Pętla jest dla każdego wiersza planszy, która jest zwykle określana jako Ranga i dlatego nadamy jej taką nazwę.
- Dla każdego wiersza iterujemy kolejną nienazwaną tabelę z 8 kolumnami i podajemy wspólną nazwę Plik.
- Jeśli Rank.Value + File.Value to liczba nieparzysta, w polu jest wyświetlona X, a w innym przypadku kropka. Ta część formuły zawiera odwołanie do dwóch pętli ForAll, które można wykonać przy użyciu operatora As.
- Concat jest używany dwukrotnie, najpierw do złożenia kolumn, a następnie wierszy, z Char(10) wrzuconym w celu utworzenia nowej linii.
Podobny przykład jest możliwy w zagnieżdżonych kontrolkach Gallery zamiast funkcji ForAll. Zacznijmy od pionowej galerii Rangi. W tej kontrolce galerii elementy będą zawierać formułę Elementy z:
Sequence(8) as Rank
W tej galerii umieścimy poziomą galerię Pliku, która będzie replikowana dla każdej Rangi, dla której właściwość Items zawiera:
Sequence(8) as File
W tej galerii dodamy również kontrolkę Label, która będzie replikowana dla każdego Pliku i każdej Rangi. Dopasujemy rozmiar tak, aby wypełniał całą przestrzeń i użyjemy właściwości Fill, aby zapewnić kolor według tej formuły:
If( Mod( Rank.Value + File.Value, 2 ) = 1, Green, Beige )
Operatory Self i Parent
Istnieją trzy sposoby odwołania się do kontrolki i jego właściwości w formule:
Metoda | Opis |
---|---|
Według nazwy kontrolki | Do każdej kontrolki można odwoływać się za pomocą nazwy z dowolnego miejsca w aplikacji. Na przykład wartość Label1.Fill oznacza właściwość wypełnienia kontrolki, która ma nazwę Label1. |
Własny operator | Przy tworzeniu formuły często warto odwołać się do innej właściwości kontrolki. Zamiast korzystania z odwołania bezwzględnego przy użyciu nazwy nie jest łatwiejsze i bezpieczniejsze korzystanie z odwołania względnego do jednego samego siebie. Operator Self umożliwia łatwe uzyskanie dostępu do właściwości bieżącej kontrolki. Na przykład Self.Fill odnosi się do koloru wypełnienia bieżącej kontrolki. |
Operator elementu nadrzędnego | W niektórych formantach są obsługiwane inne kontrolki, takie jak kontrolki Screen i Gallery. Kontrolka hostingu kontrolek w nim jest nazywana nadrzędna. Podobnie jak operator Self, operator Parent zawiera łatwą względną referencję do kontrolki kontenera. Na przykład Parent.Fill odwołuje się do właściwości wypełnienie kontrolki, która jest kontenerem dla aktualnej kontrolki. |
Self i element nadrzędny są operatorami, a nie właściwościami samych kontrolek. Odwoływanie się do Parent.Parent, Self.Parent lub Parent.Self nie jest obsługiwane.
Nazwy identyfikatorów
Nazwy zmiennych, Yródeł danych, kolumn i innych obiektów mogą zawierać dowolny kod Unicode.
Użyj cudzysłowów pojedynczych w nazwie, która zawiera spację lub inny znak specjalny.
Użyj dwóch cudzysłowów pojedynczych razem, aby przedstawić pojedyńczy cudzysłów w nazwie. Nazwy, które nie zawierają znaków specjalnych, nie wymagają cudzysłowów pojedynczych.
Oto przykładowe nazwy kolumn, które można napotkać w tabeli i sposób ich reprezentowania w formule:
Nazwa kolumny w bazie danych | Odwołanie kolumny w formule |
---|---|
SimpleName | SimpleName |
NameWith123Numbers | NameWith123Numbers |
Nazwa ze spacjami | 'Name with spaces' |
Nazwa z cudzysłowem "podwójnym" | 'Name with "double" quotes' |
Nazwa z cudzysłowem 'pojedyńczym' | 'Name with ''single'' quotes' |
Nazwa ze znakiem małpy @ | 'Name with an @ at sign' |
Podwójne cudzysłowy są używane do oznaczania ciągów tekstowych.
Nazwy wyświetlane i nazwy logiczne
Niektóre źródła danych, takie jak SharePoint i Microsoft Dataverse mają dwie różne nazwy, aby odwołać się do tej samej tabeli lub kolumny z danymi:
Nazwa logiczna- Nazwa, która na pewno jest unikalna, nie zmienia się po utworzeniu, zwykle nie zezwala na spacje ani inne znaki specjalne i nie jest zlokalizowana w różnych językach. W rezultacie nazwa może być tajemnicza. Te nazwy są używane przez profesjonalnych deweloperów. Na przykład: cra3a_customfield. Nazwę tę może również nazywać Nazwa schematu lub nazwa.
Wyświetlana nazwa — nazwa, która jest przyjazna dla użytkownika i przeznaczona do wyświetlania przez użytkowników końcowych. Zmiana nazwy nie może być unikatowa, ale może zawierać spacje i dowolny znak Unicode oraz może być zlokalizowana w różnych językach. Zgodnie z powyższym przykładem, wyświetlaną nazwą może być Pole niestandardowe ze spacją między słowami.
Ponieważ nazwy wyświetlane są łatwiejsze do zrozumienia, Power Fx zasugeruje je jako wybór, a nie zasugeruje nazw logicznych. Chociaż nazwy logiczne nie są sugerowane, nadal można ich używać, jeśli zostaną wpisane pośrednio.
Załóżmy na przykład, że dodano Pole niestandardowe do encji w Dataverse. Nazwa logiczna zostanie dla Ciebie przypisana przez system, który możesz modyfikować tylko podczas tworzenia pola. Wyniki mogą wyglądać podobnie do następujących:
Podczas tworzenia odwołania do pola kont, sugestia zostanie wykorzystana jako Pole niestandardowe, ponieważ jest to wyświetlana nazwa. Należy użyć pojedynczego cudzysłowu, ponieważ ta nazwa zawiera spację:
Po wybraniu sugestii „Pole niestandardowe” jest wyowietlane na pasku formuł i pobierane są następujące dane:
Mimo że nie jest to zalecane, można również użyć nazwy logicznej tego pola. To spowoduje, że pobierane będą te same dane. Nie jest wymagany pojedynczy cudzysłów, ponieważ nazwa nie zawiera spacji ani znaków specjalnych:
W tle są zachowywane mapowania między wyświetlanymi nazwami używanymi w formułach i podstawowymi nazwami logicznymi. Ponieważ do interakcji ze źródłem danych muszą być używane nazwy logiczne, to odwzorowanie służy do automatycznej konwersji bieżącej nazwy wyświetlanej na nazwę logiczną i to właśnie widać w ruchu sieciowym. To mapowanie jest również używane do konwersji z powrotem na nazwy logiczne w celu przełączenia się na nowe nazwy wyświetlane, na przykład, jeśli nazwa wyświetlana ulegnie zmianie lub producent w innym języku edytuje aplikację.
Uwaga
Podczas przenoszenia aplikacji między środowiskami nie są tłumaczone nazwy logiczne. W przypadku nazw encji systemowych Dataverse i pól nie powinno to stanowić problemu, ponieważ nazwy logiczne są spójne w różnych środowiskach. Wszystkie pola niestandardowe, na przykład cra3a_customfield, mogą mieć inny prefiks środowiskowy ( cra3a w tym samym przykładzie). Wyświetlane nazwy są preferowane, ponieważ można je dopasować do nazw wyświetlanych w nowym środowisku.
Uściślanie nazwy
Ponieważ nazwy wyświetlane nie są unikatowe, ta sama wyświetlana nazwa może być wyświetlana więcej niż jeden raz w tym samym obiekcie. W takim przypadku nazwa logiczna zostanie dodana na końcu wyświetlana nazwa w nawiasach dla jednej z nazw, które kolidują ze sobą. Opierając się na powyższym przykładzie, jeśli istnieje drugie pole z tą samą wyświetlana nazwa Pola niestandardowego o nazwie logicznej cra3a_customfieldalt, zostałyby wyświetlona sugestia:
Ciągi dotyczące niejednoznaczności nazw są dodawane w innych sytuacjach, w których występują konflikty nazw, takie jak nazwy encji, zestawów opcji i innych elementów Dataverse.
Operator uściślania
Niektóre funkcje, takie jak Filter, AddColumns i Sum, tworzą zakresy rekordów umożliwiające uzyskiwanie dostępu do pól tabeli podczas przetwarzania poszczególnych rekordów. Nazwy pól dodane za pomocą zakresu rekordów przesłaniają te same nazwy z innych miejsc w aplikacji. W takim przypadku dostęp do wartości znajdujących się poza zakresem rekordów można uzyskać za pomocą operatora uściślania @:
- Aby uzyskać dostęp do wartości z zagnieżdżonych zakresów rekordów, zastosuj operator @ z nazwą używanej tabeli, korzystając ze wzorca:
Tabela[@nazwa_pola] - Aby uzyskać dostęp do wartości globalnych, takich jak źródła danych, kolekcje i zmienne kontekstowe, użyj wzorca [@NazwaObiektu] (bez oznaczenia tabeli).
Aby zapoznać się z dodatkowymi informacjami i przykładami, zobacz Zakresy rekordów.