Operadores e identificadores en Power Apps

Se aplica a: Aplicaciones de Canvas Aplicaciones basadas en modelos Power Pages

Algunos de estos operadores dependen del idioma del autor. Para obtener más información sobre el soporte de idioma en las aplicaciones de lienzo, consulte Aplicaciones globales.

Símbolo Tipo Ejemplo Descripción
'......' Identificador 'Nombre de la cuenta' Los identificadores que contienen caracteres especiales, incluidos espacios, se encierran entre comillas simples
"..." Cadena de texto "Hola Mundo" Las cadenas de texto están entre comillas dobles
"......" Interpolación de cadenas "Estimado {FirstName}," Fórmulas incrustadas dentro de una cadena de texto
. Selector de propiedad Control deslizante 1.Valor
Color.Red
Acceleration.X
Extrae una propiedad de una tabla, control, señal o enumeración. Para compatibilidad con versiones anteriores, ! también se puede utilizar.
.
[depende del idioma]
Separador decimal 1.23 Separador entre las partes entera y fraccionaria de un número. El carácter depende del idioma.
( ) Paréntesis Filtro(T, A < 10)

(1 + 2) * 3
Aplica el orden de prioridad y agrupa las subexpresiones en una expresión mayor
+ Operadores aritméticos 1 + 2 Suma
-   2 - 1 Resta y signo
*   2 * 3 Multiplicación
/   2 / 3 División (consulte también la función Mod)
^   2 ^ 3 Exponenciación, equivalente a la función Power
%   20% Porcentaje (equivalente a "* 1/100")
= Operadores de comparación Precio = 100 Igual a
>   Precio > 100 Mayor que
>=   Precio >= 100 Mayor o igual que
<   Precio < 100 Menor que
<=   Precio <= 100 Menor o igual que
<>   Precio <> 100 No igual a
& Operador de concatenación de cadenas "hola" y " " y "mundo" Hace que varias cadenas aparezcan continuas
&& o Y Operadores lógicos Precio < 100 && Slider1.Value = 20
o Price < 100 And Slider1.Value = 20
Conjunción lógica, equivalente a la función And
|| o O   Precio < 100 || Slider1.Value = 20 o Precio < 100 O Slider1.Value = 20 Disyunción lógica, equivalente a la función Or
! o Not   !(Precio < 100) o No (Precio < 100) Negación lógica, equivalente a la función Not
Exacto Operadores de membresía Galería 1. Elementos guardados seleccionados Perteneciente a una colección o una tabla
Exacto   "Windows" exactin "Para mostrar ventanas en el sistema operativo Windows..." Prueba de subcadena (distingue mayúsculas de minúsculas)
en   Galería 1. Seleccionado en Elementos guardados Perteneciente a una colección o una tabla
en   "El" en "El teclado y el monitor..." Prueba de subcadena (no distingue mayúsculas de minúsculas)
@ Desambiguación operador MiTabla[@nombredelcampo] Desambiguación de campo
@   [@MiVariable] Desambiguación global
,
[depende del idioma]
Separador de lista Si( X < 10, "Bajo", "Bueno")
{ X: 12, Y: 32 }
[ 1, 2, 3 ]
Separa:
  • argumentos en llamadas a funciones
  • campos de un registro
  • registros en una tabla
Este carácter depende del idioma.
;
[depende del idioma]
Encadenamiento de fórmulas Recopilar(T, A); Navegar(S1, "") Separar invocaciones de funciones en las propiedades del comportamiento. El operador de encadenamiento depende del idioma.
Como Como operador Todos los clientes como cliente Reemplace ThisItem y ThisRecord en galerías y funciones de ámbito de registros. Como es útil para proporcionar un nombre mejor y específico y es especialmente importante en escenarios anidados.
Ser Yo mismo operador Autocompletar Acceder a las propiedades del control actual
elemento primario elemento primario operador Padre.Rellenar Acceso a las propiedades de un contenedor de control
Este artículo Este artículo operador EsteElemento.Nombre Acceder a los campos de un control Form o Gallery
Este registro Este registro operador EsteRegistro.Nombre Ofrece acceso al registro completo y los campos individuales del registro en ForAll, Sum, With y otras funciones de ámbito de registros. Se puede reemplazar con el operador As.

Nota

El operador @ también se puede utilizar para validar el tipo de objeto de registro con un origen de datos. Por ejemplo, Collect(coll,Account@{'Account Number: 1111')

Operadores in y exactin

Use los operadores in y exactin para buscar una cadena en un origen de datos, como una colección o una tabla importada. El operador in identifica coincidencias, independientemente del caso, mientras que exactin identifica coincidencias solo si coinciden las mayúsculas. Mostramos ahora un ejemplo:

  1. Cree o importe una colección denominada Inventory y muéstrela en una galería, como se describe en el primer procedimiento en Mostrar imágenes y texto en una galería.

  2. Establezca la propiedad Items de la galería en esta fórmula:
    Filtro (Inventario, "E" en Nombre del producto)

    La galería muestra todos los productos, excepto Callisto, porque el nombre de ese producto es el único que no contiene la letra que ha especificado.

  3. Cambie la propiedad Items de la galería a esta fórmula:
    Filtro(Inventario, "E" exactin NombreProducto)

    La galería muestra solo Europa, porque es la única palabra que contiene la letra que ha especificado con el uso de mayúsculas y minúsculas que ha especificado.

Operadores ThisItem, ThisRecord y As

Algunos controles y funciones aplican fórmulas a registros individuales de una tabla. Para hacer referencia al registro individual de una fórmula, utilice uno de los siguientes:

Operador Se aplica a Descripción
Este artículo Galería control
Editar formulario control
Formulario de visualización control
El nombre predeterminado del registro actual en un control Gallery o Form.
Este registro ParaTodos, Filtro, Con, Suma y otras alcance de registro funciones El nombre predeterminado para el registro actual en ForAll y otras funciones de ámbito de registros.
Comonombre Control de la galería
ForAll, Filter, With, Sum y otras funciones de alcance de registro
Define un nombre para el registro actual, reemplazando los valores predeterminados ThisItem o ThisRecord. Use As para facilitar la comprensión de las fórmulas y resolver ambigüedades al anidar.

Operador ThisItem

Por ejemplo, en el siguiente control Gallery la propiedad Items se establece en el origen de datos Empleados (como la tabla Empleados incluida con la Muestra de Northwind Traders):

Employees

Empleados mostrados en una galería.

El primer elemento de la galería es una plantilla que se replica para cada empleado. En la plantilla, la fórmula de la imagen utiliza ThisItem para referirse al elemento actual:

ThisItem.Picture

Fórmula para la imagen de un empleado.

Asimismo, la fórmula para el nombre también usa ThisItem:

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

Fórmula para el nombre y el apellido de un empleado.

Operador ThisRecord

ThisRecord se utiliza en funciones que tienen un ámbito de registro. Por ejemplo, podemos usar la función Filter con la propiedad Items de la galería para mostrar únicamente los nombres que empiezan por M:

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

Filtrar los empleados por nombre mediante ThisRecord.

ThisRecord es opcional y está implícito al usar los campos directamente, por ejemplo, en este caso, podríamos haber escrito:

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

Aunque es opcional, el uso de ThisRecord puede hacer que las fórmulas sean más fáciles de entender y puede ser necesario en situaciones ambiguas en las que un nombre de campo también puede ser un nombre de relación. ThisRecord es opcional mientras que ThisItem siempre es obligatorio.

Use ThisRecord para hacer referencia al registro completo con Patch, Collect y otras funciones de ámbito de registros. Por ejemplo, la siguiente fórmula establece como activo el estado de todos los empleados inactivos:

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

Operador As

Utilizar el operador As para asignar nombre a un registro en una galería o función de ámbito de registros, reemplazando los valores predeterminados ThisItem o ThisRecord. Asignar un nombre al registro puede hacer que sus fórmulas sean más fáciles de entender y puede ser necesario en situaciones anidadas para acceder a registros de otros ámbitos.

Por ejemplo, puede modificar la propiedad Items de nuestra galería para usar As con el fin de identificar que estamos trabajando con un empleado:

Employees As Employee

Galería de empleados, con el operador As.

Las fórmulas para la imagen y el nombre se ajustan con el fin de usar este nombre para el registro actual:

Employee.Picture

Imagen de un empleado que usa el nombre de empleado establecido con el operador As.

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

Nombre y apellido de un empleado que usa el nombre de empleado establecido con el operador As.

As también se puede utilizar con funciones de alcance de registro para reemplazar el nombre predeterminado ThisRecord. Podemos aplicar esto a nuestro ejemplo anterior para aclarar el registro con el que estamos trabajando:

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

Al anidar galerías y funciones de ámbito de registros, ThisItem y ThisRecord siempre hacen referencia al ámbito más interno, dejando los registros de los ámbitos externos como no disponibles. Use As para hacer que todos los ámbitos de registros estén disponibles, dándole un nombre único a cada uno.

Por ejemplo, esta fórmula produce un patrón de tablero de ajedrez como una cadena de texto al anidar dos funciones 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
)

Al establecer como valor de la propiedad Text de un control Label esta fórmula, se muestra:

Texto con patrón de tablero de ajedrez mostrado en un control de etiqueta.

Analicemos lo que está sucediendo aquí:

  • Comenzamos iterando una tabla sin nombre de 8 registros numerados con la función Sequence. Este bucle es para cada fila del tablero, que comúnmente se conoce como Rank, por lo que le damos este nombre.
  • Para cada fila, iteramos otra tabla sin nombre de 8 columnas y le damos el nombre común File.
  • Si Rank.Value + File.Value es un número impar, el cuadrado obtiene una X; de lo contrario obtiene un punto. Esta parte de la fórmula hace referencia a los dos bucles ForAll, algo que es posible gracias al operador As.
  • Concat se utiliza dos veces, primero para ensamblar las columnas y luego las filas, con un Char(10) agregado para crear una nueva línea.

Un ejemplo similar es posible con controles Gallery anidados en lugar de funciones ForAll. Comencemos con la galería vertical para Rank. Este control de Gallery tendrá como fórmula Items:

Sequence(8) as Rank

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

Dentro de esta galería, colocaremos una galería horizontal para el File, que se replicará para cada Rank, con una propiedad Items de:

Sequence(8) as File

Ilustración de la galería interior que proporciona la iteración de File.

Y, por último, dentro de esta galería, agregaremos un control Label que se replicará para cada File y cada Rank. Ajustaremos sus dimensiones para llenar todo el espacio y usaremos la propiedad Fill para proporcionar el color con esta fórmula:

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

Control de etiquetas dentro de las dos galerías que proporciona los colores alternos para el tablero de ajedrez.

Operadores Self y Parent

Hay tres formas de referirse a un control y sus propiedades dentro de una fórmula:

Método Descripción
Por nombre de control Se puede hacer referencia a todos los controles por su nombre desde cualquier lugar de la aplicación.

Por ejemplo, Label1.Fill se refiere a la propiedad de relleno del control cuyo nombre es Label1.
Yo mismo operador A menudo es conveniente hacer referencia a otra propiedad del mismo control al escribir una fórmula. En lugar de usar una referencia absoluta por nombre, es más fácil y portátil usar una referencia relativa a uno propio. El operador Self ofrece ese accesosencillo a las propiedades del control actual.

Por ejemplo, Self.Fill se refiere al color de relleno del control actual.
elemento primario operador Algunos controles alojan otros controles, como los controles Screen y Gallery. Al control que hospeda los controles se denomina el primario. Como el operador Self, el operador Parent ofrece una referencia relativa fácil al control del contenedor.

Por ejemplo, Parent.Fill se refiere a la propiedad de relleno del control que es el contenedor del control actual.

Self y elemento primario son operadores y no propiedades de los controles en sí. Con respecto a Parent.Parent, Self.Parent o Parent.Self no se admiten.

Nombres identificadores

Los nombres de variables, orígenes de datos, columnas y otros objetos pueden contener cualquier Unicode.

Use comillas simples en torno a un nombre que contenga un espacio u otro carácter especial.
Use dos comillas simples juntas para representar una comilla simple en el nombre. Los nombres que no contienen caracteres especiales no requieren comillas simples.

Estos son algunos ejemplos de nombres de columnas que puede encontrar en una tabla y cómo se representan en una fórmula:

Nombre de columna en una base de datos Referencia de columna en una fórmula
SimpleName SimpleName
NameWith123Numbers NameWith123Numbers
Nombre con espacios 'Name with spaces'
Nombre con comillas "dobles" 'Name with "double" quotes'
Nombre con comillas 'simples' 'Name with ''single'' quotes'
Nombre con un signo @ 'Name with an @ at sign'

Las comillas dobles se utilizan para designar cadenas de texto.

Mostrar nombres y nombres lógicos

Algunos orígenes de datos como SharePoint y Microsoft Dataverse tienen dos nombres diferentes para referirse a la misma tabla o columna de datos:

  • Nombre lógico : un nombre que se garantiza que es único, no cambia después de ser creado, generalmente no permite espacios u otros caracteres especiales y no está localizado en diferentes idiomas. Como consecuencia, el nombre puede resultar críptico. Estos nombres son utilizados por desarrolladores profesionales. Por ejemplo, cra3a_customfield. Este nombre también se puede denominar como nombre de esquema o solo nombre.

  • nombre - Un nombre fácil de usar y destinado a ser visto por los usuarios finales. Este nombre puede no ser único, puede cambiar con el tiempo, puede contener espacios y cualquier carácter Unicode, y puede estar localizado en diferentes idiomas. De acuerdo con el ejemplo anterior, el nombre para mostrar puede ser Campo personalizado, con espacio entre las palabras.

Dado que los nombres para mostrar son más fáciles de entender, las aplicaciones de lienzo los sugerirán como opciones y no sugerirán nombres lógicos. Aunque no se sugieren nombres lógicos, aún se pueden usar si se escriben indirectamente.

Por ejemplo, imagine que ha agregado un Campo personalizado a una tabla en Dataverse. El sistema le asignará un nombre lógico que solo puede modificar al crear el campo. El resultado sería similar a:

Tabla de cuentas con campo personalizado agregado, que muestra un nombre de

Al crear una referencia a un campo de Cuentas, se hará la sugerencia de usar 'Campo personalizado' ya que este es el nombre para mostrar. Se deben usar comillas simples porque este nombre tiene un espacio en él:

Barra de fórmulas de Studio que muestra sugerencias para nombres de campo Cuentas con el nombre para mostrar

Después de seleccionar la sugerencia, se muestra 'Campo personalizado' en la barra de fórmulas y se recuperan los datos:

Barra de fórmulas de Studio que muestra el uso del nombre para mostrar

Aunque no se sugiere, también podríamos usar el nombre lógico para este campo. Esto hará que se recuperen los mismos datos. No se requieren comillas simples ya que este nombre no contiene espacios ni caracteres especiales:

Barra de fórmulas de Studio que muestra el uso del nombre lógico cr5e3_customfield para el campo.

En segundo plano, se mantiene una asignación entre los nombres para mostrar vistos en las fórmulas y los nombres lógicos subyacentes. Dado que los nombres lógicos deben usarse para interactuar con el origen de datos, esta asignación se usa para convertir el nombre para mostrar actual al nombre lógico automáticamente y eso es lo que se ve en el tráfico de la red. Esta asignación también se usa para volver a convertir a nombres lógicos, a fin de cambiar a nuevos nombres para mostrar, por ejemplo, si se cambia un nombre o si un creador que habla otro idioma edita la aplicación.

Nota

Los nombres lógicos no se traducen al mover una aplicación entre entornos. Para nombres Dataverse de campos y tablas del sistema, esto no debería ser un problema ya que los nombres lógicos son consistentes en todos los entornos. Pero cualquier campo personalizado, como cra3a_customfield, en este ejemplo anterior, puede tener un prefijo de entorno diferente (cra3a, en este caso). Se prefieren los nombres para mostrar, ya que pueden compararse con los nombres para mostrar en el nuevo entorno.

Anulación de ambigüedades en los nombres

Dado que los nombres para mostrar no son únicos, el mismo nombre puede aparecer más de una vez en la misma tabla. Cuando esto sucede, el nombre lógico se agregará al final del nombre para mostrar entre paréntesis para uno de los nombres en conflicto. Partiendo del ejemplo anterior, si hubiera un segundo campo con el mismo nombre para mostrar de Campo personalizado con un nombre lógico de cra3a_customfieldalt, las sugerencias mostrarían:

Barra de fórmulas de Studio que muestra el uso del nombre lógico cr5e3_customfieldalt para desambiguar las dos versiones de

Las cadenas de desambiguación de nombres se agregan en otras situaciones en las que ocurren conflictos de nombres, como los nombres de la tabla, las opciones y otros artículos Dataverse.

Operador de desambiguación

Algunas funciones crean ámbitos de registro para acceder a los campos de la tabla mientras se procesa cada registro, como Filter, AddColumns y Sum. Los nombres de campo agregados con el ámbito de registro anulan los mismos nombres de los restantes lugares de la aplicación. Cuando esto sucede, para acceder a los valores desde fuera del ámbito de registro hay que utilizar el operador @ de anulación de ambigüedades:

  • Para acceder a valores de ámbitos de registro anidados, use el operador @ con el nombre de la tabla en la que opera mediante este modelo:
    Tabla[@Nombre de campo]
  • Para acceder a valores globales, como orígenes de datos, colecciones y variables de contexto, use el modelo [@ObjectName] (sin designación de tabla).

Para obtener más información y ejemplos, vea los ámbitos de registro.