Operadors i identificadors al Power Apps

Alguns d'aquests operadors depenen de la llengua de l'autor. Vegeu Aplicacions globals per obtenir més informació.

Símbol Type Sintaxi Descripció
. Selector de propietats Slider1.Value
Color.Red
Acceleration.X
Extreu una propietat d'una taula, d'un control, d'un senyal o d'una enumeració. Per a la compatibilitat amb versions anteriors, ! també es pot utilitzar.
.
[depèn de la llengua]
Separador decimal 1.23 Separador entre nombres sencers i fraccionats d'un nombre. El caràcter depèn de la llengua.
( ) Parèntesis Filter(T, A < 10)

(1 + 2) * 3
Aplica l'ordre de prioritat i agrupa subexpressions en una expressió més gran
+ Operadors aritmètics 1 + 2 Suma
-   2 - 1 Resta i signe
*   2 * 3 Multiplicació
/   2 / 3 Divisió (vegeu també la funció Mod)
^   2 ^ 3 Exponenciació, equivalent a la funció Power
%   20% Percentatge (equivalent a "* 1/100")
= Operadors de comparació Preu = 100 Igual a
>   Preu > 100 Major que
>=   Preu >= 100 Major o igual que
<   Preu < 100 Menor que
<=   Preu <= 100 Menor o igual que
<>   Preu <> 100 No és igual que
& Operador de concatenació de cadena "hola" & " " & "món" Fa que diverses cadenes apareguin contínues
&& o And Operadors lògics Preu < 100 && Slider1.Value = 20
o Preu < 100 And Slider1.Value = 20
Conjunció lògica, equivalent a la funció And
|| o Or   Preu < 100 || Slider1.Value = 20 o Preu < 100 Or Slider1.Value = 20 Disjunció lògica, equivalent a la funció Or
! o Not   !(Preu < 100) o Not (Preu < 100) Negació lògica, equivalent a la funció Not
exactin Operadors de pertinença Gallery1.Selected exactin SavedItems Pertinença a una col·lecció o a una taula
exactin   "Windows" exactin "Per mostrar finestres al sistema operatiu Windows..." Prova de subcadena (distingeix entre majúscules i minúscules)
a   Gallery1.Selected in SavedItems Pertinença a una col·lecció o a una taula
a   "El" in "El teclat i el monitor..." Prova de subcadena (no distingeix entre majúscules i minúscules)
@ Operador de desambiguació MyTable[@fieldname] Desambiguació de camp
@   [@MyVariable] Desambiguació global
,
[depèn de la llengua]
Separador de llista If( X < 10, "Baix", "Bé" )
{ X: 12, Y: 32 }
[ 1, 2, 3 ]
Separa:
  • arguments de trucades de funció
  • camps d'un registre
  • registres d'una taula
Aquest caràcter depèn de la llengua.
;
[depèn de la llengua]
Encadenament de fórmules Collect(T, A); Navigate(S1, "") Separeu les invocacions de funcions en propietats de comportament. L'operador d'encadenament depèn de la llengua.
Com a Operador As AllCustomers As Client Substitueix ThisItem i ThisRecord en galeries i funcions d'àmbit de registre. Com a és útil per proporcionar un nom millor i específic i que tingui especial importància en escenaris incrustats.
Propi Operador Self Self.Fill Accés a les propietats del control actual
Parent Operador Parent Parent.Fill Accés a les propietats d'un contenidor de control
ThisItem Operador ThisItem ThisItem.FirstName Accés a camps d'un control de formulari o Galeria
ThisRecord Operador ThisItem ThisRecord.FirstName Accediu al registre complet i als camps individuals del registre amb ForAll, Sum, With i altres funcions d'àmbit de registre. Es poden substituir per l'operador As.

Nota

L'operador @ també es pot utilitzar per validar el tipus d'objecte de registre contra una font de dades. Per exemple, Collect(coll,Account@{'Account Number: 1111')

operadors in i exactin

Utilitzeu els operadors in i exactin per trobar una cadena en una font de dades, com ara una col·lecció o una taula importada. L'operador in identifica les coincidències independentment del cas, mentre que l'operador exactin identifica les coincidències només si coincideixen les majúscules. Aquest és un exemple:

  1. Creeu o importeu una col·lecció anomenada Inventari i mostreu-la en una galeria, tal com es descriu al primer procediment de Mostrar imatges i text en una galeria .

  2. Definiu la propietat Items de la galeria a aquesta fórmula:
    Filter(Inventari, "E" in ProductName)

    A la galeria es mostren tots els productes tret de Callisto, ja que el nom d'aquest producte és l'únic que no conté la lletra que heu especificat.

  3. Canvieu la propietat Items de la galeria a aquesta fórmula:
    Filter(Inventari, "E" exactin ProductName)

    A la galeria només es mostra Europa, perquè només el seu nom conté la lletra que heu especificat en el format de majúscules que heu especificat.

Operadors ThisItem, ThisRecord i As

Alguns controls i funcions apliquen fórmules a registres individuals d'una taula. Per referir-vos al registre individual d'una fórmula, utilitzeu una de les opcions següents:

Operador S'aplica a Descripció
ThisItem Control Galeria
Control Edita el formulari
Control Mostra el formulari
El nom per defecte del registre actual en un control Galeria o de formulari.
ThisRecord ForAll, Filter, With, Sum i altres funcions d'àmbit de registre El nom per defecte del registre actual a ForAll i altres funcions d'àmbit de registre.
Nom d'As Control Galeria
ForAll, Filter, With, Sum i altres funcions d'àmbit de registre
Defineix un nom per al registre actual, on substitueix ThisItem o ThisRecord per defecte. Utilitzeu As per fer que les fórmules siguin més fàcils d'entendre i resoldre l'ambigüitat en incrustar.

Operador ThisItem

Per exemple, al control Galeria següent, la propietat Elements està definida com a font de dades Empleats (com ara la taula Empleats inclosa amb la mostra de Northwind Traders):

Employees

Empleats que es mostren en una galeria

El primer element de la galeria és una plantilla replicada per a cada empleat. A la plantilla, la fórmula de la imatge utilitza ThisItem per referir-se a l'element actual:

ThisItem.Picture

Fórmula de la imatge d'un empleat.

De la mateixa manera, la fórmula del nom també utilitza ThisItem:

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

Fórmula del nom i cognoms d'un empleat.

Operador ThisRecord

ThisRecord s'utilitza en funcions que tenen un àmbit de registre. Per exemple, podem utilitzar la funció Filter amb la propietat Items de la galeria per mostrar només els noms que comencen per M:

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

Filtrar els empleats segons el nom amb ThisRecord.

ThisRecord és opcional i implica utilitzar els camps directament; per exemple, en aquest cas, podríem haver escrit:

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

Tot i que és opcional, l'ús de ThisRecord pot fer que les fórmules siguin més fàcils d'entendre i pot ser necessari en situacions ambigües on un nom de camp també pot ser un nom de relació. ThisRecord és opcional, mentre que ThisItem sempre és obligatori.

Utilitzeu ThisRecord per fer referència a tot el registre amb Patch, Collect i altres funcions d'àmbit de registre. Per exemple, la fórmula següent defineix l'estat de tots els empleats inactius com a actiu:

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

Operador As

Utilitzeu l'operador As per anomenar un registre d'una funció d'àmbit de registre o galeria, que substituirà ThisItem o ThisRecord per defecte. Anomenar el registre pot fer que les fórmules siguin més fàcils d'entendre i pot ser necessari en situacions incrustades per accedir als registres d'altres àmbits.

Per exemple, podeu modificar la propietat Items de la galeria per utilitzar As per tal d'identificar que treballem amb un empleat:

Employees As Employee

Galeria d'empleats amb l'operador As

Les fórmules de la imatge i el nom s'ajusten per utilitzar aquest nom per al registre actual:

Employee.Picture

Imatge d'un empleat amb el nom de l'empleat definit amb l'operador As

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

Nom i cognoms d'un empleat amb el nom de l'empleat definit amb l'operador As

As també es pot utilitzar amb les funcions d'àmbit de registre per substituir ThisRecord del nom per defecte. Ho podem aplicar a l'exemple anterior per aclarir el registre amb el qual treballem:

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

En incrustar galeries i funcions d'àmbit de registre, ThisItem i ThisRecord sempre fan referència a l'àmbit més intern, de manera que els registres dels àmbits externs no estan disponibles. Utilitzeu As per fer que tots els àmbits de registre estiguin disponibles. Per fer-ho, assigneu a cada àmbit un nom únic.

Per exemple, aquesta fórmula produeix un patró de tauler d'escacs com a cadena de text mitjançant la incrustació de dues funcions 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 
)

Si definiu la propietat Text d'un control Etiqueta amb aquesta fórmula, es mostrarà el següent:

Text del tauler d'escacs que es mostra en un control d'etiqueta.

Vegem què passa aquí:

  • Per començar, iterem una taula sense nom de 8 registres numerats a partir de la funció Sequence. Aquest bucle és per a cada fila del tauler, que es coneix habitualment com a Classificació i, per tant, li donem aquest nom.
  • Per a cada fila, s'iterarà una altra taula sense nom de 8 columnes i hi donem el nom comú Fitxer.
  • Si Rank.Value + File.Value és un valor senar, el quadrat obté una X; si no ho és, obté un punt. Aquesta part de la fórmula fa referència a tots dos bucles de ForAll, els quals són possibles mitjançant l'ús de l'operador As.
  • Concat s'utilitza dues vegades: primer, per muntar les columnes i, després, per les files, amb Char(10) que s'aplica per crear una línia nova.

Un exemple semblant és possible amb controls Galeria incrustats en comptes de funcions ForAll. Comencem amb la galeria vertical per a la Classificació. Aquest control Galeria tindrà una fórmula Items:

Sequence(8) as Rank

Il·lustració de la galeria externa que proporciona la iteració de Classificació.

Dins d'aquesta galeria, col·locarem una galeria horitzontal per a Fitxer, que es replicarà per a cada Classificació amb una propietat Items de:

Sequence(8) as File

Il·lustració de la galeria interna que proporciona la iteració de Fitxer.

I, finalment, dins d'aquesta galeria, afegirem un control Etiqueta que es replicarà per a cada Fitxer i cada Classificació. En canviarem la mida per omplir tot l'espai i utilitzarem la propietat Fill per proporcionar el color amb aquesta fórmula:

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

Control d'etiqueta dins de les dues galeries que proporciona els colors alterns per al tauler d'escacs.

Operadors Self i Parent

Hi ha tres maneres de referir-se a un control i a les seves propietats dins d'una fórmula:

Mètode Descripció
Per nom del control Es pot fer referència a qualsevol dels controls pel nom des de qualsevol part de l'aplicació.

Per exemple, Label1.Fill fa referència a la propietat d'emplenament del control amb el nom Label1.
Operador Self Sovint és pràctic referir-se a una altra propietat del mateix control en escriure una fórmula. En lloc d'utilitzar una referència absoluta pel nom, és més fàcil i més portàtil utilitzar una referència relativa a un mateix. L'operador Self proporciona aquest accés fàcil al control actual.

Per exemple, Self.Fill fa referència al color d'emplenament del control actual.
Operador Parent Alguns controls contenen altres controls, com ara els controls Pantalla i Galeria. El control que conté els controls de l'interior s'anomena principal. Igual que l'operador Self, l'operador Parent proporciona una referència relativa fàcil al control contenidor.

Per exemple, Parent.Fill fa referència a la propietat d'emplenament del control que és el contenidor per al control actual.

Self i Parent són operadors i no propietats en els mateixos controls. Referir-se a Parent.Parent, Self.Parent o Parent.Self no està admès.

Noms d'identificador

Els noms de les variables, fonts de dades, columnes i altres objectes poden contenir qualsevol caràcter Unicode.

Utilitzeu cometes simples al voltant d'un nom que inclogui un espai o un altre caràcter especial.
Utilitzeu dues cometes simples per representar una sola cometa al nom. Els noms que no continguin caràcters especials no necessiten cometes simples.

A continuació, trobareu alguns noms de columna d'exemple que podeu trobar en una taula i com es representen en una fórmula:

Nom de la columna en una base de dades Referència de la columna en una fórmula
NomSimple SimpleName
NomAmb123Nombres NameWith123Numbers
Nom amb espais 'Name with spaces'
Nom amb cometes "dobles" 'Name with "double" quotes'
Nom amb cometes 'simples' 'Name with ''single'' quotes'
Nom amb una arrova (@) 'Name with an @ at sign'

Les cometes dobles s'utilitzen per designar cadenes de text.

Noms de visualització i noms lògics

Algunes fonts de dades, com ara el SharePoint i el Microsoft Dataverse, tenen dos noms diferents per referir-se a la mateixa taula o columna de dades:

  • Nom lògic: un nom que està garantit que és únic, no canvia després de crear-se, normalment no permet espais ni altres caràcters especials i no està localitzat a diferents llengües. Com a resultat, el nom pot ser críptic. Els desenvolupadors professionals utilitzen aquests noms. Per exemple, cra3a_customfield. També es pot fer referència a aquest nom com a nom d'esquema o nom.

  • Nom de visualització: un nom fàcil d'entendre per l'usuari i que està pensat perquè el vegin els usuaris finals. Pot ser que el nom no sigui únic, pot canviar amb el temps, pot contenir espais i qualsevol caràcter Unicode i pot estar localitzat a diferents llengües. Corresponent a l'exemple anterior, el nom de visualització pot ser Camp personalitzat amb un espai entre les paraules.

Com que els noms de visualització són més fàcils d'entendre, les aplicacions de llenç els suggeriran com a opcions i no suggeriran noms lògics. Tot i que els noms lògics no se suggereixen, encara es poden utilitzar si s'escriuen de manera indirecta.

Per exemple, imagineu que heu afegit un Camp personalitzat a una taula del Dataverse. El sistema assignarà en lloc vostre el nom lògic, que podeu modificar només en crear el camp. El resultat tindria un aspecte semblant al següent:

Taula de comptes amb camp personalitzat afegit, que mostra un nom de visualització de "Camp personalitzat" i un nom lògic de "cr5e3_customfield".

Quan es crea una referència a un camp de Comptes, es suggerirà utilitzar 'Camp personalitzat', ja que aquest és el nom de visualització. Tingueu en compte que les cometes simples s'han d'utilitzar perquè aquest nom conté un espai:

Barra de fórmules de l'Studio on es mostren els suggeriments dels noms del camp de comptes amb el nom de visualització 'Camp personalitzat' ressaltat.

Després de seleccionar el suggeriment, es mostra 'Camp personalitzat' a la barra de fórmules i es recuperen les dades:

Barra de fórmules de l'Studio on es mostra l'ús del nom de visualització 'Camp personalitzat' per al camp.

Tot i que no se suggereix, també podríem utilitzar el nom lògic per a aquest camp. Això resultarà en la recuperació de les mateixes dades. Tingueu en compte que no calen les cometes simples, ja que el nom no conté espais ni caràcters especials:

Barra de fórmules de l'Studio on es mostra l'ús del nom lògic cr5e3_customfield per al camp.

En segon pla, es manté una assignació entre els noms de visualització de les fórmules i els noms lògics subjacents. Com que els noms lògics s'han d'utilitzar per interactuar amb la font de dades, aquesta assignació s'utilitza per convertir el nom de visualització actual al nom lògic de manera automàtica i això és el que es veu al tràfic de xarxa. Aquesta assignació també s'utilitza per tornar a convertir als noms lògics per canviar els noms de visualització nous; per exemple, si un nom de visualització canvia o un creador d'una altra llengua edita l'aplicació.

Nota

Els noms lògics no es tradueixen en desplaçar una aplicació entre entorns. Per als noms de taula i de camp del sistema del Dataverse, això no hauria de ser cap problema, ja que els noms lògics són coherents entre entorns. Però alguns camps personalitzats, com ara cra3a_customfield de l'exemple anterior, poden tenir un prefix de l'entorn diferent (cra3a en aquest cas). Es prefereix l'ús dels noms de visualització, ja que poden coincidir amb els noms de visualització de l'entorn nou.

Desambiguació de noms

Com que els noms de visualització no són únics, pot ser que el mateix nom de visualització aparegui més d'una vegada a la mateixa taula. Quan això passa, el nom lògic s'afegirà al final del nom de visualització entre parèntesis en un o més dels noms conflictius. En l'exemple anterior, si hi hagués un segon camp amb el mateix nom de visualització del Camp personalitzat amb un nom lògic cra3a_customfieldalt, els suggeriments que es mostrarien són:

Barra de fórmules de l'Studio on es mostra l'ús del nom lògic cr5e3_customfieldalt per desambiguar les dues versions de "Camp personalitzat".

Les cadenes de desambiguació de noms s'afegeixen en altres situacions en què es produeixen conflictes de noms, com ara els noms de la taula, les eleccions i altres elements del Dataverse.

Operador de desambiguació

Algunes funcions creen àmbits de registre per accedir als camps de la taula mentre processen cada registre, com ara Filter, AddColumns i Sum. Els noms de camp afegits amb l'àmbit de registre substitueixen els mateixos noms d'altres ubicacions de l'aplicació. Quan això succeeix, encara podeu accedir a valors fora de l'àmbit de registre amb l'operador de desambiguació @:

  • Per accedir als valors dels àmbits de registre incrustats, utilitzeu l'operador @ amb el nom de la taula que s'utilitza mitjançant aquest patró:
    Taula[@NomDelCamp]
  • Per accedir a valors globals, com ara fonts de dades, col·leccions i variables de context, utilitzeu el patró [@NomObjecte] (sense cap designació de taula).

Per obtenir més informació i exemples, vegeu Àmbits de registre.