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: 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:
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.
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.
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
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
Asimismo, la fórmula para el nombre también usa ThisItem:
ThisItem.'First Name' & " " & ThisItem.'Last Name'
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" ) )
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
Las fórmulas para la imagen y el nombre se ajustan con el fin de usar este nombre para el registro actual:
Employee.Picture
Employee.'First Name' & " " & Employee.'Last Name'
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:
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
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
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 )
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:
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:
Después de seleccionar la sugerencia, se muestra 'Campo personalizado' en la barra de fórmulas y se recuperan los datos:
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:
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:
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.