Operatory i identyfikatory w Power Apps
Dotyczy: Aplikacje kanwy Aplikacje oparte na modelu Power Pages
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 konta" | Identyfikatory zawierające znaki specjalne, w tym spacje, są ujęte w pojedyncze cudzysłowy |
"..." | Ciąg tekstowy | "Witaj, świecie" | Ciągi tekstowe są zamknięte w cudzysłowach podwójnych |
$"..." | Interpolacja ciągów znaków | $"Szanowni Państwo {FirstName}," | Formuły osadzone w ciągu tekstowym |
. | Selektor właściwości | Suwak1.Wartość 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 | 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 Gallery lub kontrolki Form |
To rekord | Operator ThisRecord | ThisRecord.FirstName (To rekord.Imię) | 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:
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 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
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 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 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ą 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 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ż ł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:
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ę:
Po wybraniu sugestii „Pole niestandardowe” jest wyowietlane na pasku formuł i pobierane są następujące dane:
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:
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:
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[@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.