Udostępnij za pośrednictwem


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:

  1. 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.

  2. 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.

  3. 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

Pracownicy widoczni w galerii.

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

Formuła na obraz pracownika.

Podobnie formuła nazwy zawiera także ThisItem:

ThisItem.'First Name' & " " & ThisItem.'Last Name'

formuła na imię i nazwisko pracownika.

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" ) )

Filtrowanie pracowników na podstawie imienia przy użyciu ThisRecord.

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

Galeria pracowników, korzystanie z operatora As.

Formuły obrazu i nazwy są dostosowywane, aby używać tej nazwy dla bieżącego rekordu:

Employee.Picture

Obraz pracownika z użyciem Imienia pracownika ustawionej za pomocą operatora As.

Employee.'First Name' & " " & Employee.'Last Name'

Imię i nazwisko pracownika z użyciem Imienia pracownika ustawionej za pomocą operatora As.

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łę:

Tekst szachownicy wyświetlany w kontrolce etykiety.

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

Ilustracja zewnętrznej galerii, która dostarcza iterację Rangi.

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

Ilustracja wewnętrznej galerii, która dostarcza iterację Pliku.

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 )

Kontrolka etykiety w dwóch galeriach, która zapewnia naprzemienne kolory szachownicy.

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:

Encja klienci z dodana polem niestandardowym, zawierająca wyświetlana nazwa „Pole niestandardowe” i logiczną nazwę „cr5e3_customfield”

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ę:

Pasek formuł Studio pokazujący sugestie dotyczące nazw pól kont z wyświetlana wyróżniona nazwa „Pole niestandardowe”.

Po wybraniu sugestii „Pole niestandardowe” jest wyowietlane na pasku formuł i pobierane są następujące dane:

Pasek formuł Studio pokazujący użycie nazwy wyświetlanej „Pola niestandardowego” dla pola.

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:

Pasek formuł Studio pokazujący użycie nazwy logicznej cr5e3_customfield dla pola.

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:

Pasek formuł Studio prezentujący użycie nazwy logicznej cr5e3_customfieldalt w celu odróżnienia dwóch wersji „Pola niestandardowego”.

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.