Operatori și identificatori în Power Apps

Se aplică la: Aplicații proiectate pe pânză Aplicații proiectate pe bază de model

Unii dintre acești operatori depind de limba autorului. Pentru mai multe informații despre compatibilitatea lingvistică în aplicațiile pânză, consultați Aplicații globale.

Simbol Tipul Exemplu Descriere
'...' Identificator 'Nume Cont' Identificatorii care conțin caractere speciale, inclusiv spații, sunt încadrați între ghilimele simple
"..." Șir de text "Salut, lume” Șirurile de text sunt cuprinse între ghilimele duble
$"..." Interpolarea șirurilor $"Dragă {FirstName}," Formule încorporate într-un șir de text
. Selector de proprietate Slider1.Value
Color.Red
Acceleration.X
Extrage o proprietate dintr-un tabel, control, semnal sau enumerare. Pentru compatibilitate inversă, se poate, de asemenea, utiliza !.
.
[dependent de limbă]
Separator zecimal 1,23 Separator între partea întreagă și partea fracționară a unui număr. Caracterul depinde de limbă.
( ) Paranteze Filter(T, A < 10)

(1+2) *3
Execută ordinea de precedență și grupează subexpresiile într-o expresie mai mare
+ Operatori aritmetici 1 + 2 Adunare
-   2-1 Scădere și semn
*   2*3 Înmulțire
/   2/3 Împărțire (a se vedea și funcția Mod)
^   2^3 Ridicare la putere, echivalent cu funcția Power
%   20% Procent (echivalent cu „* 1/100")
= Operatori de comparație Preț = 100 Egal cu
>   Preț > 100 Mai mare decât
>=   Preț >= 100 Mai mare sau egal cu
<   Preț < 100 Mai mic decât
<=   Preț <= 100 Mai mic sau egal cu
<>   Preț <> 100 Nu este egal cu
& Operator de concatenare cu șiruri "Bună ziua" & " " &; "lume" Determină mai multe șiruri să pară continue
&&sau și Operatori logici Preț: < 100 &&; Slider1.Value = 20
sau Preț < 100 And Slider1.Value = 20
Conjuncție logică, echivalentă cu funcția And
|| sau Or   Preț < 100 || Slider1.Value = 20 sau Preț < 100 Or Slider1.Value = 20 Disjuncție logică, echivalentă cu funcția Or
! sau Not   !(Preț < 100) sau Not (Preț < 100) Negație logică, echivalentă cu funcția Not
exactin Operatori de membri Gallery1.Selected exactin SavedItems Aparțin unei colecții sau unui tabel
exactin   Winows exactin „Pentru a afișa ferestrele în sistemul de operare Windows...” Test subșir (sensibil la litere mari și mici)
în   Gallery1.Selected in SavedItems Aparțin unei colecții sau unui tabel
în   „a/ul” în „Tastatura și monitorul..." Test subșir (insensibil la litere mari și mici)
@ Operator de dezambiguizare MyTable[@fieldname] Dezambiguizare câmp
@   [@MyVariable] Dezambiguizare globală
,
[dependent de limbă]
Separator de listă If( X < 10, "Scăzut", "Bun" )
{ X: 12, Y: 32 }
[1,2,3]
Separă:
  • argumentele din apelurile la funcții
  • câmpurile dintr-o înregistrare
  • înregistrările dintr-un tabel
Acest caracter depinde de limbă.
;
[dependent de limbă]
Înlănțuire de formule Collect(T, A); Navigate(S1, "") Invocări separate de funcții în proprietățile comportamentului. Operatorul de înlănțuire depinde de limbă.
As Un operator AllCustomers drept Client Înlocuiește ThisItem și ThisRecord în galerii și în funcții ale domeniului de înregistrare. La fel de este util pentru furnizarea unui nume mai bun, specific și este deosebit de importantă în scenariile imbricate.
Eu Operator automat Self.Fill Acces la proprietățile controlului curent
Element principal Operator părinte Parent.Fill Acces la proprietățile unui container de control
ThisItem Operator ThisItem ThisItem.FirstName Acces la câmpurile unei galerii sau ale unui control de formular
ThisRecord Operatorul ThisRecord ThisRecord.FirstName Acces la înregistrările complete și la câmpurile individuale ale înregistrării din interior ForAll, Sum, With și alte funcții ale domeniului de înregistrare. Poate fi anulat cu operatorul As.

Notă

Operatorul @ poate fi, de asemenea, utilizat pentru a valida tipul obiectului de înregistrare împotriva unei surse de date. De exemplu, Collect(coll,Account@{'Account Number: 1111')

in și exactin

Utilizați operatorii in și exactin pentru a găsi un șir într-o sursă de date, cum ar fi o colecție sau un tabel importat. Operatorul in identifică potrivirile indiferent dacă sunt scrise cu litere mari sau mici, iar operatorul exactin identifică potrivirile numai utilizează în același mod majusculele și literele mici. Iată un exemplu:

  1. Creați sau importați o colecție numită Inventar și afișați-o într-o galerie, conform descrierii din prima procedură din secțiunea Afișați imagini și text într-o galerie.

  2. Setați proprietatea Items a galeriei la această formulă:
    Filter(Inventory, "E" in ProductName)

    Galeria afișează toate produsele, cu excepția lui Callisto, deoarece numele acelui produs este singurul care nu conține litera specificată.

  3. Modificați proprietatea Items a galeriei la această formulă:
    Filter(Inventory, "E" exactin ProductName)

    Galeria afișează numai Europa, deoarece numai acest nume conține litera pe care ați specificat-o, scrisă cu mărimea specificată.

Operatori ThisItem, ThisRecord și Ca

Câteva controale și funcții aplică formule la înregistrările individuale ale unui tabel. Pentru a face referire la înregistrarea individuală într-o formulă, utilizați una dintre următoarele:

Operator Se aplică la Descriere
ThisItem Control galerie
Control editare formular
Control afișare formular
Numele implicit pentru înregistrarea curentă dintr-un control Galerie sau formular.
ThisRecord ForAll, Filter, With, Sum și alte funcții cu domeniu de aplicare de înregistrare Numele implicit pentru înregistrarea curentă din ForAll și alte funcții ale domeniului de înregistrare.
Canume Control galerie
ForAll, Filter, With, Sum și alte funcții cu domeniu de aplicare de înregistrare
Definește un nume pentru înregistrarea curentă, înlocuind implicitul ThisItem sau ThisRecord. Utilizați As pentru a face formulele mai ușor de înțeles și de a rezolva ambiguitatea atunci când sunt imbricate.

Operator ThisItem

De exemplu, în cele ce urmează controlul Galerie, proprietatea Elemente este setată la sursa de date Angajații (cum ar fi tabelul Angajați inclus cu Eșantion Northwind Traders):

Employees

Angajați prezentați într-o galerie.

Primul element din galerie este un șablon care este reprodus pentru fiecare angajat. În șablon formula pentru imagine utilizează ThisItem pentru a face referire la elementul curent:

ThisItem.Picture

Formula pentru imaginea unui angajat.

De asemenea, formula pentru nume utilizează și ThisItem:

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

Formula pentru primul și nume de familie al unui angajat.

Operatorul ThisRecord

ThisRecord este utilizat în funcțiile care au un domeniul de aplicare al înregistrării. De exemplu, putem utiliza funcția Filter cu proprietatea Elemente a galeriei noastre pentru a afișa doar prenume care încep cu M:

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

Filtrarea angajaților după nume, utilizând ThisRecord.

ThisRecord este opțional și implicit utilizând câmpurile direct, de exemplu, în acest caz, am fi putut scrie:

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

Deși opțională, utilizarea ThisRecord poate face formulele mai ușor de înțeles și pot fi necesare în situații ambigue în care un nume de câmp poate fi și un nume de relație. ThisRecord este opțional în timp ce ThisItem este întotdeauna necesar.

Utilizați ThisRecord pentru a face referire la întreaga înregistrare cu Patch, Collect și alte funcții ale domeniului de înregistrare. De exemplu, următoarea formulă stabilește starea pentru toți angajații inactivi ca fiind activă:

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

Ca operator

Utilizați operatorul As pentru a numi o înregistrare într-o galerie sau funcția de aplicare a înregistrării, care trece peste valoarea implicită ThisItem sau ThisRecord. Denumirea înregistrării poate face formulele dvs. mai ușor de înțeles și poate fi necesar în situații imbricate pentru a accesa înregistrările din alte domenii.

De exemplu, puteți modifica proprietatea Elemente a galeriei noastre pentru a utiliza As pentru a identifica faptul că lucrăm cu un angajat:

Employees As Employee

Galerie de angajați, folosind operatorul As.

Formulele pentru imagine și nume sunt ajustate pentru a utiliza acest nume pentru înregistrarea curentă:

Employee.Picture

Imagine a unui angajat care utilizează numele angajatului setat cu operatorul As.

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

Primul și nume de familie unui angajat care utilizează numele angajatului setat cu operatorul As.

As poate fi, de asemenea, utilizat cu funcții de înregistrare pentru a înlocui numele implicit ThisRecord. Putem aplica acest lucru la exemplul nostru anterior pentru a clarifica înregistrarea cu care lucrăm:

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

Atunci când imbrică galerii și funcții de aplicare a înregistrării, ThisItem și ThisRecord se referă întotdeauna la domeniul de aplicare cel mai interior, lăsând înregistrările în scopuri exterioare nefiind disponibile. Utilizați As pentru a face disponibile toate scopurile înregistrării, dându-le fiecăruia un nume unic.

De exemplu, această formulă produce un model de tablă de șah ca șir de text prin imbricarea a două funcții 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
)

Setarea pentru un control Label a proprietății Text la această formulă afișează:

Textul tablei de șah afișat într-un control de etichetă.

Haideți să dezarhivăm ce se întâmplă aici:

  • Începem prin a itera un tabel fără nume cu 8 înregistrări numerotate din funcția Sequence. Această buclă este pentru fiecare rând al panoului, care este denumit în mod obișnuit Rang așa că îi dăm acest nume.
  • Pentru fiecare rând, vom itera un alt tabel fără nume din 8 coloane și vom da numele comun Fişier.
  • Dacă Rank.Value + File.Value este un număr impar, pătratul primește un X, altfel, un punct. Această parte a formulei face referire la ambele bucle ForAll, posibilă folosind operatorul As.
  • Concat este utilizat de două ori, mai întâi pentru asamblarea coloanelor și apoi a rândurilor, cu un Char(10) adăugat pentru a crea o nouă linie.

Un exemplu similar este posibil cu cel controale imbricate Gallery în loc de funcții ForAll. Să începem cu galeria verticală pentru Rang. Acest control de galerie va avea o formulă Elemente de:

Sequence(8) as Rank

Ilustrație a galeriei exterioare care oferă iterația Rank.

În cadrul acestei galerii, vom plasa o galerie orizontală pentru Fişier, care va fi replicat pentru fiecare Rang, cu o proprietate Elemente:

Sequence(8) as File

Ilustrație a galeriei interioare care oferă iterația fișierului.

Și în final, în cadrul acestei galerii, vom adăuga un control Label care va fi replicat pentru fiecare Fişier și fiecare Rang. Îl vom mări pentru a umple întregul spațiu și vom utiliza proprietatea Umplere pentru a oferi culoarea cu această formulă:

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

Controlul etichetelor în cadrul celor două galerii care oferă culorile alternative pentru tabla de șah.

Operatori automați și principali

Există trei moduri de a face referire la un control și la proprietățile sale într-o formulă:

Metodă Descriere
După nume de control Orice control poate fi menționat după nume de oriunde din aplicație.

De exemplu, Label1.Fill se referă la proprietatea de completare a controlului al cărui nume este Label1.
Operator automat Adesea se recomandă să faceți referire la o altă proprietate a aceluiași control atunci când scrieți o formulă. În loc să folosiți o referință absolută după nume, este mai ușor și mai convenabil să folosiți o referință relativă la una automată. Operatorul automat oferă acces la proprietățile controlului curent.

De exemplu, Self.Fill se referă la culoarea de umplere a controlului curent.
Operator părinte Unele controale găzduiesc alte controale, cum ar fi controalele Screen și Gallery. Controlul de găzduire al controalelor din cadrul acestuia se numește părinte. Asemenea operatorului Automat, operatorul Principal oferă o referință relativ ușoară la controlul containerului.

De exemplu, Parent.Fill se referă la proprietatea de umplere a controlului care este containerul pentru controlul curent.

Automat și Principal sunt operatori și nu proprietăți asupra controalelor în sine. Privind Parent.Parent, Self.Parent sau Parent.Self nu este acceptat.

Nume identificator

Numele variabilelor, ale surselor de date, coloanelor și altor obiecte pot conține orice caractere Unicode.

Utilizați ghilimele simple în jurul unui nume care conține un spațiu sau un alt caracter special.
Utilizați două ghilimele simple pentru a reprezenta un semn al citării individual în nume. Numele care nu conțin caractere speciale nu necesită ghilimele unice.

Iată câteva exemple de nume de coloană pe care le puteți întâlni într-un tabel și modul în care acestea sunt reprezentate într-o formulă:

Numele coloanei dintr-o bază de date Referință la coloană într-o formulă
SimpleName SimpleName
NameWith123Numbers NameWith123Numbers
Nume cu spații 'Name with spaces'
Nume cu ghilimele „duble” 'Name with "double" quotes'
Nume cu ghilimele 'simple' 'Name with ''single'' quotes'
Nume cu un semn at @ 'Name with an @ at sign'

Ghilimelele duble se utilizează pentru a desemna șiruri de text.

Nume afișate și nume logice

Unele surse de date, cum ar fi SharePoint și Microsoft Dataverse, au două nume diferite pentru același tabel sau coloană de date:

  • Nume logic – Un nume care este garantat ca fiind unic, nu se schimbă după creare, de obicei nu permite spații sau alte caractere speciale și nu este localizat în diferite limbi. Drept urmare, numele poate fi criptic. Aceste nume sunt utilizate de dezvoltatorii profesioniști. De exemplu, cra3a_customfield. Acest nume poate fi, de asemenea, denumit nume de schemă sau pur și simplu nume.

  • Nume afișat - Un nume ușor de utilizat și conceput să fie văzut de către utilizatorii finali. Acest nume nu poate fi unic, se poate modifica în timp, poate conține spații și orice caracter Unicode și poate fi localizat în diferite limbi. Corespunzător exemplului de mai sus, numele afișajului poate fi Câmp particularizat cu spațiu între cuvinte.

Deoarece numele afișate sunt mai ușor de înțeles, aplicațiile proiectate pe pânză le vor recomanda ca opțiuni și nu vor propune nume logice. Deși nu sunt sugerate nume logice, ele pot fi utilizate în continuare, dacă sunt tastate indirect.

De exemplu, imaginați-vă că ați adăugat un Câmp personalizat la un tabel din Dataverse. Sistemul vă va atribui un nume logic, pe care îl puteți modifica numai atunci când creați câmpul. Rezultatul este similar cu:

Tabel Conturi cu câmp personalizat adăugat, afișând un nume afișat

Atunci când autorizați o referință la un câmp de conturi, se va recomanda utilizarea 'Câmp personalizat', deoarece acesta este numele afișat. Trebuie folosite ghilimele simple, deoarece acest nume are un spațiu:

Bara de formule Studio care afișează sugestii pentru numele câmpurilor din Conturi cu numele afișat

După selectarea sugestiei, 'Câmp personalizat' este afișat în bara de formule și datele sunt preluate:

Bara de formule Studio care arată utilizarea numelui afișat

Deși nu este sugerat, am putea utiliza și numele logic pentru acest câmp. Aceasta va duce la regăsirea acelorași date. Ghilimelele simple nu sunt necesare, deoarece acest nume nu conține spații sau caractere speciale:

Bara de formule Studio care afișează utilizarea numelui logic cr5e3_customfield pentru câmp.

În fundal, se menține o corespondență între numele afișate din formule și numele logice subiacente. Deoarece numele logice trebuie utilizate pentru a interacționa cu sursa de date, această corespondență este utilizată pentru conversia automată de la numele afișat curent la numele logic, iar aceasta se observă în traficul de rețea. Această mapare este de asemenea folosită pentru a converti în nume logice pentru a schimba nume de afișare noi, de exemplu, dacă se schimbă un nume afișat sau un producător într-o altă limbă editează aplicația.

Notă

Numele logice nu se traduc la mutarea unei aplicații între medii. Pentru numele tabelelor și câmpurilor de sistem Dataverse, aceasta nu ar trebui să fie o problemă, deoarece numele logice sunt coerente între medii. Dar orice câmpuri personalizate, cum ar fi cra3a_customfield din acest exemplu de mai sus, pot avea un prefix de mediu diferit (cra3a în acest caz). Numele afișate sunt preferate, deoarece pot fi corelate cu numele afișate din noul mediu.

Dezambiguizarea numelor

Întrucât numele afișate nu sunt unice, același nume afișat poate apărea de mai multe ori în același tabel. Când se întâmplă aceasta, numele logic va fi adăugat la sfârșitul numelui afișat, în paranteză, pentru unul sau mai multe nume conflictuale. Pe baza exemplului de mai sus, dacă ar fi existat un al doilea câmp cu același nume afișat Câmp personalizat, cu un nume logic cra3a_customfieldalt, sugestiile vor arăta astfel:

Bara de formule Studio care arată utilizarea numelui logic cr5e3_customfieldalt pentru a dezambiguiza cele două versiuni ale

Șirurile de dezambiguizare a numelui sunt adăugate în alte situații în care apar conflicte de nume, cum ar fi numele tabelului, opțiunile și alte elemente Dataverse.

Operator de dezambiguizare

Unele funcții creează domenii de aplicare a înregistrărilor pentru accesarea câmpurilor tabelului în timpul procesării fiecărei înregistrări, cum ar fi Filter, AddColumns și Sum. Numele de câmp adăugate cu domeniul de aplicare a înregistrării înlocuiesc aceleași nume din alte părți ale aplicației. În această situație, puteți accesa în continuare valori din afara domeniului de aplicare a înregistrării cu ajutorul operatorului de dezambiguizare @:

  • Pentru a accesa valori din domenii de aplicare a înregistrării imbricate, utilizați butonul operator @ cu numele tabelului care este operat la utilizarea acestui model:
    Tabel[@FieldName]
  • Pentru a accesa valori globale, cum ar fi sursele de date, colecțiile și variabilele de context, utilizați modelul [@ObjectName] (fără denumire de tabel).

Pentru mai multe informații și exemple, consultați domeniile de aplicare a înregistrărilor.