Operadores e identificadores en Power Apps

Aplícase a: Aplicacións de lona Aplicacións dirixidas por modelo

Algúns destes operadores dependen do idioma do autor. Para obter máis información sobre a compatibilidade de idiomas nas aplicacións de lenzo, consulte Aplicacións globais.

Símbolo Tipo Exemplo Descripción
'...' Identificador 'Nome da conta' Os identificadores que conteñen caracteres especiais, incluídos os espazos, están entre comiñas simples
"..." Cadea de texto "Ola, mundo" As cadeas de texto están situadas entre comiñas dobres
$"..." Interpolación de cadeas $"Dear {FirstName}," Fórmulas incrustadas nunha cadea de texto
. Seleccionar de propiedades Slider1.Value
Color.Red
Acceleration.X
Extrae unha propiedade dunha táboa, control, sinal ou enumeración. Para unha compatibilidade retroactiva, pódese usar tamén !
.
[dependente do idioma]
Separador decimal 1.23 Separador entre partes enteiras e fraccionarias dun número. O carácter depende do idioma.
( ) Parénteses Filter(T, A < 10)

(1 + 2) * 3
Aplica a orde de precedencia e agrupa subexpresións nunha expresión maior
+ Operadores aritméticos 1 + 2 Adición
-   2 - 1 Subtracción e signo
*   2 * 3 Multiplicación
/   2 / 3 División (ver tamén a función Mod)
^   2 ^ 3 Potenciación, equivalente á función Power
%   20 % Porcentaxe (equivalente a "* 1/100")
= Operadores de comparación Prezo = 100 Igual que
>   Prezo > 100 Superior a
>=   Prezo >= 100 Maior ou igual que
<   Prezo < 100 Inferior a
<=   Prezo <= 100 Menor ou igual que
<>   Prezo <> 100 Non igual que
& Operador de concatenación de cadeas "Ola" & "Mundo" Fai que varias cadeas aparezan de forma continua
&ou e Operadores lóxicos Prezo < 100 & Slider1.Valor = 20
ou Prezo < 100 And Slider1.Value = 20
Conxunción lóxica, equivalente á función And
|| ou Or   Prezo < 100 || Slider1.Value = 20 ou Prezo < 100 Or Slider1.Value = 20 Disxunción lóxica, equivalente á función Or
! ou Not   !(Prezo < 100) ou Not (Prezo < 100) Negación lóxica equivalente á función Not
exactin Operadores de afiliación Gallery1.Selected exactin SavedItems Pertencente a unha colección ou unha táboa
exactin   "Windows" exactin “Para mostrar ventás no sistema operativo de Windows...” Proba de subcadea (distingue maiúsculas de minúsculas)
en   Gallery1.Selected in SavedItems Pertencente a unha colección ou unha táboa
en   "The" en "Teclado e monitor..." Proba de subcadea (non distingue maiúsculas de minúsculas)
@ Operador de desambiguación MyTable[@fieldname] Desambiguación de campos
@   [@MyVariable] Desambiguación global
,
[dependente do idioma]
Separador de lista Se ( X < 10, "Baixo", "Bo" )
{ X: 12, Y: 32 }
[ 1, 2, 3 ]
Separa:
  • argumentos nas chamadas de función
  • campos nun rexistro
  • rexistros nunha táboa
Este carácter depende do idioma.
;
[dependente do idioma]
Encadeamento de fórmulas Collect(T, A); Navigate(S1, "") Invocacións separadas de funcións nas propiedades de comportamento. O operador de encadeamento depende do idioma.
Como Operador As AllCustomers como cliente Anula ThisItem e ThisRecord en galerías e funcións co ámbito do rexistro. As é útil para ofrecer un nome mellor e específico e é especialmente importante en escenarios aniñados.
Automático Operador automático Self.Fill Acceso ás propiedades do control actual
Principal Operador principal Parent.Fill Acceso ás propiedades dun contedor de controis
ThisItem Operador ThisItem ThisItem.FirstName Acceso aos campos dun control de formulario ou galería
ThisRecord Operador ThisRecord ThisRecord.FirstName Acceso ao rexistro completo e campos individuais do rexistro en ForAll, Sum, With e outras funcións do ámbito do rexistro. Pódese anular co operador As.

Nota

O operadpr @ tamén se pode usar para validar o tipo de obxecto de rexistro nunha orixe de datos. Por exemplo, Collect(coll,Account@{'Account Number: 1111')

Operadores in e exactin

Use os operadores in e exactin para atopar unha cadea nunha orixe de datos, como unha colección ou unha táboa importada. O operador in identifica as coincidencias independentemente do caso e o operador exactin identifica as coincidencias só se usan as mesmas maiúsculas. Este é un exemplo:

  1. Cree ou importe unha colección nomeada Inventario e móstrea nunha galería, como se describe no primeiro procedemento en Mostrar imaxes e texto nunha galería.

  2. Axuste a propiedade Elementos da galería nesta fórmula:
    Filter(Inventory, "E" in ProductName)

    A galería mostra todos os produtos, excepto Callisto, porque o nome dese produto é o único que non contén a letra que especificou.

  3. Modifique a propiedade Elementos da galería nesta fórmula:
    Filter(Inventory, "E" exactin ProductName)

    A galería só mostra Europa porque só o seu nome contén a letra que especificou no caso especificado.

Operadores ThisItem, ThisRecord e As

Algúns controis e funcións aplican fórmulas aos rexistros individuais dunha táboa. Para referirse ao rexistro individual nunha fórmula, use un dos seguintes:

Operador Aplícase a Descripción
ThisItem Control Galería
Control Editar formulario
Control Mostrar formulario
O nome predeterminado do rexistro actual nunha Galería ou control de formulario.
ThisRecord ForAll, Filter, With, Sum e outras funcións do ámbito de rexistro O nome predeterminado para o rexistro actual en ForAll e outras funcións do ámbito do rexistro.
Comonome Control Galería
ForAll, Filter, With, Sum e outras funcións do ámbito do rexistro
Define un nome para o rexistro actual, substituíndo o valor de ThisItem ou ThisRecord predeterminado. Usa As para facilitar as fórmulas para comprender e resolver a ambigüidade ao aniñar.

Operador ThisItem

Por exemplo, no seguinte control de Galería, a propiedade Items establécese na orixe de datos Empregados (como a táboa Empregados incluída co exemplo de Northwind Traders):

Employees

Empregados que se mostran nunha galería.

O primeiro elemento da galería é un modelo que se replica para cada empregado. Na plantilla, a fórmula da imaxe usa ThisItem para referirse ao elemento actual:

ThisItem.Picture

Fórmula para a imaxe dun empregado.

Do mesmo xeito, a fórmula do nome tamén usa ThisItem:

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

Fórmula para o primeiro e apelidos dun empregado.

Operador ThisRecord

ThisRecord úsase en funcións que teñen un ámbito de rexistro. Por exemplo, podemos usar a función Filter coa propiedade Elementos da nosa galería para que só mostre os nomes que comezan por M:

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

Filtrar os empregados en función do nome, usando ThisRecord.

ThisRecord é opcional e está implicado usando directamente os campos. Por exemplo, neste caso, puidemos escribir:

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

Aínda que sexa opcional, empregar ThisRecord pode facer que as fórmulas sexan máis fáciles de entender e poden ser necesaria en situacións ambiguas onde un nome de campo tamén pode ser un nome de relación. ThisRecord é opcional mentres que ThisItem sempre se require.

Use ThisRecord para facer referencia a todo o rexistro con Patch, Collect e outras funcións do ámbito do rexistro. Por exemplo, a seguinte fórmula establece o estado de todos os empregados inactivos en activos:

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

Operador As

Use o operador As para dar nome a un rexistro nunha función de galería ou do ámbito do rexistro, que anule o valor predeterminado de ThisItem ou ThisRecord. Dar nome ao rexistro pode facer que as súas fórmulas sexan máis fáciles de entender e pode ser necesario en situacións aniñadas para acceder a rexistros noutros ámbitos.

Por exemplo, pode modificar o a propeidade Elementos da nosa galería para usar As para identificar que estamos a traballar cun empregado:

Employees As Employee

Galería de empregados, utilizando o operador As.

As fórmulas para a imaxe e o nome axústanse para usar este nome para o rexistro actual:

Employee.Picture

Imaxe dun empregado que usa o nome do empregado establecido co operador As.

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

Primeiro e apelidos dun empregado que usa o nome do empregado establecido co operador As.

As tamén se pode usar con funcións do ámbito do rexistro para substituír o nome por defecto ThisRecord. Podemos aplicar isto ao noso exemplo anterior para aclarar o rexistro co que estamos a traballar:

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

Ao aniñar galerías e funcións do ámbito do rexistro, ThisItem e ThisRecord refírense sempre ao ámbito máis interno, deixando os rexistros en ámbitos externos non dispoñibles. Use As para facer que todos os ámbitos do rexistro estean dispoñibles dándolle a cada un un nome único.

Por exemplo, esta fórmula produce un padrón de taboleiro de xadrez como unha cadea de texto ao aniñar dúas funcións 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
)

Ao configurar a propiedade Texto dun control de Etiqueta nesta fórmula móstrase:

Texto de taboleiro de xadrez mostrado nun control de etiquetas.

Descifremos o que está pasando aquí:

  • Comezamos por repetir unha táboa sen nome de 8 rexistros numerados a partir da función Sequence. Este bucle é para cada liña do taboleiro, ao que se denomina comunmente Rango e así lle damos este nome.
  • Para cada liña, repetimos outra táboa sen nome de 8 columnas e dámoslle o nome común Ficheiro.
  • Se Rango.Valor + Ficheiro.Valor é un número impar, o cadrado obtén un X, se non, un punto. Esta parte da fórmula fai referencia a ambos bucles ForAll, posible mediante o uso do operador As.
  • Concat úsase dúas veces, primeiro para montar as columnas e logo as filas, con Char(10) engadida para crear unha nova liña.

Un exemplo similar é posible con controis de Galería aniñados en vez de funcións ForAll. Comecemos coa galería vertical para Rango. Este control da galería terá unha fórmula de Elementos de:

Sequence(8) as Rank

Ilustración da galería exterior que proporciona a iteración de Rank.

Dentro desta galería, colocaremos unha galería horizontal para Ficheiro, que se replicará para cada Rango, cunha propiedade de Elementos de:

Sequence(8) as File

Ilustración da galería interior que proporciona a iteración do ficheiro.

E finalmente, dentro desta galería, engadiremos un contorl de Etiqueta que se replicará para cada Ficheiro e cada Rango. Dimensionarémolo para cubrir todo o espazo e empregar a propiedade Encher para proporcionar a cor con esta fórmula:

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

Control de etiquetas dentro das dúas galerías que proporciona as cores alternas para o taboleiro de xadrez.

Operadores autónomos e principais

Hai tres xeitos de referirse a un control e ás súas propiedades dentro dunha fórmula:

Método Descripción
Por nome do control Pódese facer referencia a calquera control polo nome desde calquera parte da aplicación.

Por exemplo, Label1.Fill refírese á propiedade de recheo do control cuxo nome é Etiqueta1.
Operador automático Con frecuencia é conveniente facer referencia a outra propiedade do mesmo control cando se escribe unha fórmula. En lugar de usar unha referencia absoluta por nome, é máis sinxelo e portátil usar unha referencia relativa a unmesmo. O operador Auto ofrece acceso sinxelo ao control actual.

Por exemplo, Self.Fill fai referencia á cor de recheo do control actual.
Operador principal Algúns controis acollen outros controis, como os de Pantalla e Galería. O control de aloxamento dos controis interiores chámase principal. Como o operador Automático, o operador Principal ofrece unha referencia relativa doada ao control do contedor.

Por exemplo, Parent.Fill fai referencia á propiedade de recheo do control que é o recipiente para o control actual.

Auto e Principal son operadores e non propiedades dos propios controis. Non se admite facer referencia a Parent.Parent, Self.Parent ou Parent.Self.

Nomes de identificadores

Os nomes de variables, orixes de datos, columnas e outros obxectos poden conter calquera Unicode.

Empregue comiñas simples ao redor dun nome que conteña un espazo ou outro carácter especial.
Use dúas comiñas simples xuntas para representar unha única cita no nome. Os nomes que non conteñan caracteres especiais non precisan comiñas simples.

Aquí están algúns exemplos de nomes de columnas que pode atopar nunha táboa e como se representan nunha fórmula:

Nome de columna nunha base de datos Referencia de columna nunha fórmula
SimpleName SimpleName
NameWith123Numbers NameWith123Numbers
Nome con espazos 'Name with spaces'
Nome con comiñas "dobres" 'Name with "double" quotes'
Nome con comiñas 'simples' 'Name with ''single'' quotes'
Nome cun signo @ 'Name with an @ at sign'

As comiñas dobres úsanse para designar cadeas de texto.

Nomes para mostrar e nomes lóxicos

Algunhas orixes de datos, como SharePoint e Microsoft Dataverse, teñen dous nomes diferentes para referirse á mesma táboa ou columna de datos:

  • Nome lóxico: nome que se garante que é único, non cambia despois de crealo, normalmente non permite espazos nin outros caracteres especiais e non está localizado en diferentes idiomas. Como resultado, o nome pode ser críptico. Estes nomes úsanos os programadores profesionais. Por exemplo, cra3a_customfield. Este nome tamén se pode denominar nome do esquema ou simplemente nome.

  • Nome para mostrar: nome descritivo e deseñado para que o vexan os usuarios finais. Este nome pode non ser único, pode cambiar co paso do tempo, pode conter espazos e calquera carácter Unicode e pode localizarse en diferentes idiomas. En correspondencia co exemplo anterior, o nome para mostrar pode ser un Campo personalizado con espazo entre as palabras.

Dado que os nomes para mostrar son máis fáciles de entender, as aplicacións de lenzo suxeriranos como opcións e non suxerirán nomes lóxicos. Aínda que os nomes lóxicos non se suxiren, poden usarse se se escriben indirectamente.

Por exemplo, imaxine que engadiu un Campo personalizado a unha táboa en Dataverse. O sistema asignaralle un nome lóxico que só pode modificar ao crear o campo. O resultado sería semellante ao seguinte:

Táboa de contas con Campo personalizado engadido, mostrando un nome de visualización de

Ao crear unha referencia a un campo de Contas, farase unha suxestión para usar "Campo personalizado", xa que este é o nome para mostrar. Débense empregar as comiñas simples porque este nome ten un espazo:

Barra de fórmulas de estudo que mostra suxestións para nomes de campo de Contas co nome de visualización

Despois de seleccionar a suxestión, "Campo personalizado" móstrase na barra de fórmulas e os datos recupéranse:

Barra de fórmulas de estudo que mostra o uso do nome de visualización

Aínda que non se suxire, tamén poderiamos usar o nome lóxico para este campo. Isto fará que se recuperen os mesmos datos. Non se requiren citas individuais xa que este nome non contén espazos nin caracteres especiais:

Barra de fórmulas de estudo que mostra o uso do nome lóxico cr5e3_customfield para o campo.

En segundo plano, mantense unha asignación entre os nomes para mostrar que aparecen nas fórmulas e os nomes lóxicos subxacentes. Dado que os nomes lóxicos deben usarse para interactuar coa orixe de datos, esta asignación úsase para converter automaticamente do nome para mostrar actual ao nome lóxico e iso é o que se ve no tráfico da rede. Esta asignación tamén se usa para volver converter en nomes lóxicos para cambiar a novos nomes para mostrar, por exemplo, se un nome para mostrar cambia ou un fabricante nun idioma diferente edita a aplicación.

Nota

Os nomes lóxicos non se traducen ao mover unha aplicación entre ambientes. Para as táboas de sistema e os nomes dos campos de Dataverse, isto non debería ser un problema xa que os nomes lóxicos son coherentes entre ambientes. No entanto, os campos personalizados, como cra3a_customfield neste exemplo anterior, poden ter un prefixo de ambiente diferente (cra3a neste caso). Os nomes para mostrar teñen preferencia, xa que poden coincidir cos nomes para mostrar do novo ambiente.

Desambiguación de nomes

Dado que os nomes para mostrar non son únicos, o mesmo nome para mostrar pode aparecer máis dunha vez na mesma táboa. Cando isto suceda, o nome lóxico engadirase ao final do nome para mostrar entre parénteses para un dos nomes en conflito. Baseándose no exemplo anterior, se houbese un segundo campo co mesmo nome para mostrar de Campo personalizado cun nome lóxico de cra3a_customfieldalt, mostraríanse as suxestións:

Barra de fórmulas de estudio que mostra o uso do nome lóxico cr5e3_customfieldalt para desambiguar as dúas versións de

As cadeas de desambiguación de nomes engádense noutras situacións nas que se producen conflitos de nomes, como os nomes da táboa, as eleccións e outros elementos de Dataverse.

Operador de desambiguación

Algunhas funcións crean ámbitos de rexistro para acceder aos campos da táboa ao procesar cada rexistro, como Filter, AddColumns e Sum. Os nomes de campos engadidos co ámbito de rexistro anulan os mesmos nomes doutros lugares da aplicación. Cando isto sucede, aínda pode acceder a valores desde fóra do ámbito de rexistro co operador de desambiguación @:

  • Para acceder a valores desde ámbitos de rexistro aniñados, use o operador @ co nome da táboa que se opera ao usar este padrón:
    Táboa[@FieldName]
  • Para acceder a valores globais, como orixes de datos, coleccións e variables de contexto, use o padrón [@ObjectName] (sen designación de táboa).

Para máis información e exemplos, consulte ámbitos de rexistro.