Operatory i identyfikatory w Power Apps

Dotyczy: aplikacje kanwy aplikacje oparte na modelu

Niektóre z tych operatorów są zależne od języka autora. Aby uzyskać więcej informacji na temat obsługi języków w aplikacjach kanwy, zobacz Aplikacje globalne.

Symbol Typ Przykład Opis
'...' Identyfikator 'Nazwa klienta' Identyfikatory zawierające znaki specjalne, w tym spacje, są ujęte w pojedyncze cudzysłowy
"..." Ciąg tekstowy "Hello, World" Ciągi tekstowe są zamknięte w cudzysłowach podwójnych
$"..." Interpolacja ciągów $"Witaj {FirstName}," Formuły osadzone w ciągu tekstowym
. Selektor właściwości Slider1.Value
Color.Red
Acceleration.X
Wyodrębnia właściwość z tabeli, kontrolki, sygnału lub wyliczenia. W ramach zgodności z poprzednimi wersjami można również użyć symbolu!.
.
[zależny 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 Filter(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 "hello" & " " & "world" Umożliwia połączenie wielu ciągów w jeden ciąg
&& lub I Operatory logiczne Price < 100 && Slider1.Value = 20
lub Price < 100 And Slider1.Value = 20
Logiczna koniunkcja, odpowiednik funkcji And
|| lub Or   Price < 100 || Slider1.Value = 20 or Price < 100 Or Slider1.Value = 20 Logiczna alternatywa, odpowiednik funkcji Or
! lub Not   !(Price < 100) lub Not (Price < 100) Logiczna negacja, odpowiednik funkcji Not
exactin Operatory członkostwa Gallery1.Selected exactin SavedItems Przynależność do kolekcji lub tabeli
exactin   „Windows” exactin “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 "The keyboard and the monitor..." Sprawdzenie występowania podciągu (bez uwzględniania wielkości liter)
@ Operator uściślania MyTable[@fieldname] Uściślanie pola
@   [@MyVariable] Uściślanie globalne
,
[zależny od języka]
Separator listy Jeśli( X < 10, "Niskie", "Dobre" )
{ X: 12, Y: 32 }
[ 1, 2, 3 ]
Oddziela: Ten znak zależy od języka.
;
[zależny od języka]
Łączenie formuł Collect(T, A); Navigate(S1, "") Umożliwia oddzielenie wywołań funkcji we właściwościach zachowania. Operator łączenia zależy od języka.
Jako Jako operator AllCustomers jako klient Zastępuje ThisItem i ThisRecord w galeriach i funkcje zakresu rekordów. As przydaje się do podania lepszej, konkretnej nazwy i jest szczególnie ważne w scenariuszach zagnieżdżonych.
Do siebie Operator Self Self.Fill Uzyskanie dostępu do właściwości bieżącej kontrolki
Nadrzędny Operator nadrzędny Parent.Fill Dostęp do właściwości kontenera kontrolki
ThisItem Operator ThisItem ThisItem.FirstName Dostęp do pól Gallery lub kontrolki Form
ThisRecord Operator ThisRecord ThisRecord.FirstName Dostęp do pełnych rekordów i pojedynczych pól rekordu w ForAll, Sum, With i innych funkcji zakresu rekordu. Może zostać zastąpiony operatorem As.

Uwaga

Operator @ może być również użyty do sprawdzenia poprawności typu obiektu rekordu względem źródła danych. Na przykład Collect(coll,Account@{'Account Number: 1111')

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
ThisItem Kontrolka Gallery
Kontrolka Edit form
Kontrolka Formularz wyświetlania
Domyślna nazwa bieżącego rekordu w kontrolce Galerii lub Form.
ThisRecord ForAll, Filter, With, Sum i inne funkcje zakresu rekordu Domyślna nazwa bieżącego rekordu w ForAll i innych funkcjach zakresu rekordu.
Jakonazwa Kontrolka Gallery
ForAll, Filter, With, Sum i inne funkcje zakresu rekordu
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 następującej kontrolce Gallery właściwość Items ma ustawioną wartość Pracownicy źródło danych (na przykład tabelę Pracownicy w przykładzie "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 mających zakres rekordów. 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 przy użyciu pól bezpośrednio, na przykład w tym przypadku można 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 opcjonalne, a ThisItem jest zawsze wymagany.

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żywane z funkcjami zakresu rekordów w celu zastąpienia nazwy domyślnej 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 dwa razy, najpierw w celu utworzenia kolumn, a następnie wierszy z dodanym Char(10), aby utworzyć nowy wiersz.

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.
Operator Self 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 nadrzędny W niektórych formantach są obsługiwane inne kontrolki, takie jak kontrolki Screen i Gallery. Kontrolka hostingu kontrolek w jej obrębie nosi nazwę element nadrzędny. 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 Parent są operatorami, a nie własnościami w samych kontrolkach. 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ą pojedynczych cudzysłowów.

Oto kilka przykładowych nazw kolumn, które możesz napotkać w tabeli, oraz 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 zapewnia unikatowość, nie zmienia się po utworzeniu, zazwyczaj nie zezwala na spacje lub 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 przewidziana do oglądania 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ż łatwiejsze jest zrozumienie nazw wyświetlanych, aplikacje kanwy sugerują je jako wybory i nie sugerują nazw logicznych. Chociaż nazwy logiczne nie są sugerowane, nadal można ich używać, jeśli są wpisywane pośrednio.

Załóżmy na przykład, że dodałeś Pole niestandardowe do tabeli 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:

Tabela kont z dodanym polem niestandardowym, pokazująca wyświetlaną nazwę „Pola niestandardowego” i nazwę logiczną „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ć pojedynczych cudzysłowów, 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.

Chociaż nie jest to sugerowane, można też użyć nazwy logicznej dla 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 tabel systemowych i pól Dataverse nie powinno to stanowić problemu, ponieważ nazwy logiczne są spójne w ś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ą niepowtarzalne, ta sama nazwa wyświetlana może pojawić się więcej niż raz w tej samej tabeli. 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 rozsyłania nazw są dodawane w innych sytuacjach, gdy występują konflikty nazw, na przykład nazwy tabeli, opcje i inne elementy 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[@FieldName]
  • 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.