Оператори и идентификатори в Power Apps

Отнася се за: Приложения за платно Приложения , задвижвани от модели

Някои от тези оператори зависят от езика на автора. За повече информация относно езиковата поддръжка в приложенията за платно вижте Глобални приложения.

Символ Тип Пример Описание
'...' Идентификатор „Име на клиент” Идентификаторите, които съдържат специални знаци, включително интервали, са затворени в единични кавички
"..." Текстов низ „Здравей, свят” Текстовите низове са затворени в двойни кавички
$"..." Интерполация на низове $"Dear {FirstName}," Формули, вградени в текстов низ
. Селектор за свойства Slider1.Value
Color.Red
Acceleration.X
Извлича свойство от таблица, контрола, сигнал или изброяване. За обратна съвместимост може също да се използва !.
.
[зависимо от езика]
Десетичен разделител 1,23 Разделител между цели и частични части на число. Знакът зависи от езика.
( ) Скоби Filter(T, A < 10)

(1 + 2) * 3
Прилага реда на приоритета и групира подизрази в по-голям израз
+ Аритметични оператори 1 + 2 Събиране
-   2 - 1 Изваждане и знак
*   2 * 3 Умножение
/   2 / 3 Деление (виж също функция Mod)
^   2 ^ 3 Експоненция, еквивалентна на функцияPower
%   20% Процент (еквивалентен на "* 1/100")
= Оператори за сравнение Цена = 100 Равно на
>   Цена > 100 Е по-голямо от
>=   Цена >= 100 По-голямо или равно на
<   Цена < 100 Е по-малко от
<=   Цена <= 100 По-малко или равно на
<>   Цена <> 100 Не е равно на
& Оператор за свързване на низове "здравей" & " " &; "свят" Прави множеството низове да се появяват непрекъснато
&& и Логически оператори Цена < 100 & Slider1.Value = 20
или Цена < 100 и Slider1.Value = 20
Логическо свързване, еквивалентно на функцията And
|| или Или   Price < 100 || Slider1.Value = 20 или Price < 100 Or Slider1.Value = 20 Логическо прекъсване на връзката, еквивалентно на функцията Or
! или Не   !(Цена < 100) или Не (Цена < 100) Логическо отрицание, еквивалентно на функцията Not
exactin Оператори за членство Gallery1.Selected exactin SavedItems Принадлежност към колекция или маса
exactin   "Windows" exactin “To display windows in the Windows operating system...” Тест на подниза (чувствителен към регистър)
в   Gallery1.Selected в SavedItems Принадлежност към колекция или маса
в   "The" в "The keyboard and the monitor..." Тест на подниза (нечувствителен към регистър)
@ Оператор за разграничаване MyTable[@fieldname] Разграничаване на поле
@   [@MyVariable] Глобално разграничение
,
[зависимо от езика]
Разделител на списък If( X < 10, "Low", "Good" )
{ X: 12, Y: 32 }
[ 1, 2, 3 ]
Разделя:
  • аргументи във функционални обаждания
  • полета в запис
  • полета в таблица
Този знак зависи от езика.
;
[зависимо от езика]
Верижно свързване на формули Collect(T, A); Navigate(S1, "") Отделни извиквания на функции в свойства на поведение. Операторът за верижно свързване зависи от езика.
Като Като оператор AllCustomers като клиент Замества ThisItem и ThisRecord в галериите и функциите за обхват на запис. Като е полезно за предоставяне на по-добро, конкретно име и е особено важно при вложени сценарии.
От себе си Оператор Self Self.Fill Достъп до свойства на текущото управление
Родител Родителски оператор Parent.Fill Достъп до свойства на контролен контейнер
ThisItem Оператор ThisItem ThisItem.FirstName Достъп до полета на галерия или контрол на формуляри
ThisRecord ThisRecord operator ThisRecord.FirstName Достъп до пълния запис и отделните полета на записа в ForAll, Sum, With и другите функции на обхват на запис. Може да се замени с оператора Като.

Бележка

Операторът @ може също да се използва за валидиране на типа на обекта на запис срещу източник на данни. Например, Collect(coll,Account@{'Account Number: 1111')

в и точно оператори

Използвайте операторите in и exactin за търсене на низ в източник на данни, като колекция или импортирана таблица. Операторът в идентифицира съвпадения независимо от случая и exactin операторът идентифицира съвпадения, само ако са написани с главни букви по същия начин. Ето един пример:

  1. Създайте или импортирайте колекция с име Инвентар, и го покажете в галерия, както първата процедура в Показвайте изображения и текст в галерия описва.

  2. Задайте свойството Елементи на галерията на тази формула:
    Filter(Inventory, "E" in ProductName)

    Галерията показва всички продукти с изключение на Callisto, тъй като името на този продукт е единственото, което не съдържа буквата, която сте посочили.

  3. Променете свойството Елементи на галерията на тази формула:
    Filter(Inventory, "E" exactin ProductName)

    Галерията показва само Европа, защото само нейното име съдържа буквата, която сте посочили в случая, който сте посочили.

Оператори ThisItem, ThisRecord и As

Няколко контроли и функции прилагат формули за отделни записи в таблица. За да видите отделния запис във формула, използвайте някой от следните:

Оператор Приложимо за Описание
ThisItem Галерия контрола
Редактиране на формуляр контрола
Показване на формуляр контрола
Името по подразбиране за текущия запис в контрола на галерия или формуляр.
ThisRecord ForAll, Filter, With, Sum и други обхват на запис функции Името по подразбиране за текущия запис във ForAll и други функции за обхват на запис.
Катоиме Галерия контрола
ForAll, Filter, With, Sum и други функции от обхвата на записа
Определя име за текущия запис, като замества името по подразбиране ThisItem или ThisRecord. Използвайте As, за да улесните разбирането на формулите и да отстраните двусмислеността при влагане.

Оператор ThisItem

Например по-долу Галерия контрола, Елементи свойството е зададено на Служители източник на данни (като Служители таблица, включена в Проба от търговци на Northwind):

Employees

Служители, показани в галерия.

Първият елемент в галерията е шаблон, който се репликира за всеки служител. В шаблона формулата за снимката използва ThisItem за препратка към текущия елемент:

ThisItem.Picture

Формула за картината на служител.

По същия начин формулата за името също използва ThisItem:

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

Формула за първия и фамилно име на служител.

Оператор ThisRecord

ThisRecord се използва във функции, които имат обхват на записа. Например можем да използваме функцията Филтър със свойството Елементи на галерията, за да се показват само собствените имена, които започват с М:

Filter( Employees, StartsWith( ThisRecord.Employee.'First Name', "M" ) )

Филтриране на служителите въз основа на името, като се използва ThisRecord.

ThisRecord е по избор и се подразбира чрез директно използване на полетата, например в този случай можем да напишем:

Filter( Employees, StartsWith( 'First Name', "M" ) )

Въпреки, че е по избор, използването на ThisRecord може да направи формулите по-лесни за разбиране и може да се изисква в двусмислени ситуации, когато име на поле може да бъде и име на релация. ThisRecord е по избор, а ThisItem винаги е задължителен.

Използвайте ThisRecord за препратка към целия запис Patch, Collect и други функции за обхват на записа. Например следващата формула задава състоянието на всички неактивни служители като активно:

With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
      ForAll( InactiveEmployees,
              Patch( Employees, ThisRecord, { Status: 'Status (Employees)'.Active } ) ) )

Като оператор

Използвайте оператора As за наименоване на запис в галерия или функция за обхват на запис, като заместите имената по подразбиране ThisItem или ThisRecord. Наименуването на записа може да направи формулите по-лесни за разбиране и може да е необходимо в ситуации с влагане за достъп до записи в други обхвати.

Например може да промените свойството Елементи на галерията да използва As за определяне, че работим със служител:

Employees As Employee

Галерия от служители, използващи оператора As.

Формулите за снимката и името са коригирани, за да се използва това име за текущия запис:

Employee.Picture

Изображение на служител, използващ името на служител, зададено с оператора As.

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

Първо и фамилно име на служител, използващ името на служителя, зададено с оператора As.

As може да се използва и с функциите за обхват на запис, за да замести името по подразбиране ThisRecord. Можем да приложим това към предишния ни пример, за да поясним записа, с който работим:

With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
      ForAll( InactiveEmployees As Employee,
              Patch( Employees, Employee, { Status: 'Status (Employees)'.Active } ) ) )

Когато влагате галерии и функции за обхват на запис, ThisItem и ThisRecord винаги посочват най-вътрешния обхват, като записите във външните обхвати остават недостъпни. Използвайте As, за да направите всички обхвати на записа достъпни, като им зададете уникално име.

Например тази формула създава модел на шахматна дъска като текстови низ чрез влагане на две функции 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
)

Задаването на свойството Текст на контролата Етикет към тази формула показва:

Текст на шахматна дъска, показан в контрола за етикет.

Нека да разопаковаме това, което се случва тук:

  • Започваме с итерация на таблица без име с 8 номерирани записа от функцията Sequence. Този цикъл е за всеки ред на таблото, който обикновено се нарича Ранг, затова му даваме това име.
  • За всеки ред итерираме друга таблица без име с 8 колони и въвеждаме общото име Файл.
  • Ако Rank.Value + File.Value е нечетно число, квадратчето получава X, в противен случай – точка. Тази част от формулата посочва и двата цикъла ForAll, които са възможни чрез оператора As.
  • Concat се използва два пъти, първо за сглобяване на колоните, а след това на редовете, с Char(10) за създаване на нов ред.

Подобен пример е възможен с вложени контроли за галерия вместо функции ForAll. Нека започнем с вертикалната галерия за ранга. Тази контрола на галерията ще има формула за елементи:

Sequence(8) as Rank

Илюстрация на външната галерия, която предоставя итерация на ранга.

В рамките на тази галерия поставяме хоризонтална галерия за файла, който ще се репликира за всеки ранг, със свойство Елементи:

Sequence(8) as File

Илюстрация на вътрешната галерия, която предоставя итерация на файла.

И накрая, в рамките на тази галерия ще добавим контрола Етикет, която ще се репликира за всеки файл и всеки ранг. Ще го оразмерим, за да запълним цялото пространство и да използваме свойството Запълване, за да предоставим цвета с тази формула:

If( Mod( Rank.Value + File.Value, 2 ) = 1, Green, Beige )

Контрол на етикетите в двете галерии, който осигурява редуващите се цветове за шахматната дъска.

Оператори Self и Parent

Има три начина за препращане към контрола и неговите свойства във формула:

Метод Описание
По име на контрола Всеки контрол може да се посочва по име от всяко място в приложението.

Например, Label1.Fill се отнася до свойството за запълване на контролата с името Label1.
Оператор Self Често е удобно да се посочва друго свойство на същия контрол, когато пишете формула. Вместо да използвате абсолютна препратка по име, е по-лесно и по-преносимо да използвате относителна препратка към self. Операторът Self осигурява лесен достъп до текущото управление.

Например Self.Fill се отнася до цвета на запълване на текущото управление.
Parent оператор Някои контроли съдържат други контроли, като например контролите Екран и галерия. Хостинг контролът на контролите в него се нарича родител. Подобно на Self оператора, операторът Parent осигурява лесна относителна препратка към контрола на контейнера.

Например, Parent.Fill се отнася до свойството за запълване на контрола, което е контейнерът за текущото управление.

Self и Parent са оператори, а не свойства на самите контроли. Отнасящи се до Parent.Parent, Self.Parent или Parent.Self не се поддържа.

Имената на идентификаторите

Имената на променливи, източници на данни, колони и други обекти могат да съдържат всякакъв Unicode.

Използвайте единични кавички около име, което съдържа интервал или друг специален символ.
Използвайте две единични кавички заедно, за да представите един единствен цитат в името. Имената, които не съдържат специални символи, не изискват единични кавички.

Ето някои примерни имена на колони, които може да срещнете в таблица и как са представени във формула:

Име на колоната в база данни Позоваване на колона във формула
SimpleName SimpleName
NameWith123Numbers NameWith123Numbers
Име с интервали 'Name with spaces'
Наименование с "двойни" кавички 'Name with "double" quotes'
Наименование с 'единични' кавички 'Name with ''single'' quotes'
Име със знак @ при знак 'Name with an @ at sign'

Двойните кавички се използват за посочване на текстови низове.

Показване на имена и логически имена

Някои източници на данни като SharePoint и Microsoft Dataverse имат две различни имена, за да се позовават на една и съща таблица или колона от данни:

  • Логическо име - Име, за което гарантирано е уникално, не се променя след създаването му, обикновено не позволява интервали или други специални символи и не е локализирано на различни езици. В резултат името може да е кодирано. Тези имена се използват от професионални разработчици. Например cra3a_customfield. Това име може също да бъде посочено като име на схемата или просто име.

  • Показвано име - Име, което е удобно за потребителите и е предназначено да бъде видяно от крайните потребители. Това име може да не е уникално, може да се променя с течение на времето, може да съдържа интервали и всеки Unicode символ и може да бъде локализирано на различни езици. Подобно на примера по-горе, показваното име може да бъде персонализирано поле с интервал между думите.

Тъй като показваните имена са по-лесни за разбиране, приложенията за платно ще ги предложат като избор, а не да предлагат логически имена. Въпреки че не се предлагат логически имена, те все пак могат да се използват, ако са не са въведени директно.

Например, представете си, че сте добавили Потребителско поле в таблица в Dataverse. Логическото име ще бъде присвоено от системата и можете да го променяте само при създаване на полето. Резултатът ще изглежда подобен на:

Таблица с акаунти с добавено поле по избор, показваща показвано име на

При създаване на препратка към поле на Акаунти, предложението ще бъде използвано „Персонализирано поле“, тъй като това е името за показване. Трябва да се използват единичните кавички, тъй като в това име има интервал:

Лента за формули на студио, показваща предложения за имена на полета на акаунти с осветено показвано име

След като изберете предложението, „Персонализирано поле“ се показва в лентата с формули и данните се извличат:

Лента за формули на студио, показваща използването на показваното име

Въпреки че не се предлага, бихме могли да използваме и логическото име за това поле. Това ще доведе до извличане на същите данни. Единични кавички не са задължителни, тъй като това име не съдържа интервали или специални знаци:

Лента за формули на студио, показваща използването на логическото име cr5e3_customfield за полето.

Зад кулисите се поддържа картографиране между показваните имена, видени във формули, и основните логически имена. Тъй като логичните имена трябва да се използват за взаимодействие с източник на данни, това картографиране се използва за автоматично преобразуване от текущото име на изображение в логическото име и това се вижда в мрежовия трафик. Това съпоставяне се използва и за преобразуване обратно в логически имена, за да превключите към нови показвани имена, например, ако показваното име се промени или създател редактира приложението на друг език.

Бележка

Логическите имена не се превеждат при преместване на приложение между среди. За Dataverse системни имена на таблици и полета, това не би трябвало да е проблем, тъй като логическите имена са последователни в различните среди. Но всякакви персонализирани полета, като например cra3a_customfield в този пример по-горе може да има различен префикс на средата (cra3a в такъв случай). За предпочитане са показваните имена, тъй като те могат да бъдат съпоставени с показваните имена в новата среда.

Пояснения за имената

Тъй като показваните имена не са уникални, едно и също име може да се появи повече от веднъж в една и съща таблица. Когато това се случи, логическото име ще бъде добавено в края на показваното име в скобите за едно от повече конфликтни имена. Въз основа на горния пример, ако имаше второ поле със същото име на Персонализирано поле с логично име на cra3a_customfieldalt, тогава предложенията ще покажат:

Лентата за формули на студиото, показваща използването на логическото име, cr5e3_customfieldalt да се разграничат двете версии на

Низовете за двузначност на имената се добавят в други ситуации, при които възникват конфликти на имена, като имената на таблица, избори и други елементи на Dataverse.

Оператор за разграничаване

Някои функции създават обхват на запис за достъп до полетата на таблицата, докато обработвате всеки запис, като например Filter, AddColumns и Sum. Имената на полета, добавени с обхвата на записа, отменят същите имена от други места в приложението. Когато това се случи, все още можете да получите достъп до стойности извън обхвата на записа с оператор за пояснение @:

  • За достъп до стойности от вложени области на запис, използвайте @ оператор с името на таблицата, която се използва при използване на този шаблон:
    Table[@FieldName]
  • За достъп до глобални стойности, като източници на данни, колекции и променливи на контекста, използвайте шаблона [@ObjectName] (без обозначение на таблицата).

За повече информация и примери вижте обхват на записа.