Comprender las variables de aplicaciones de lienzo

Si ha usado otra herramienta de programación como Visual Basic o JavaScript, probablemente se pregunte: ¿dónde están las variables? Power Apps es ligeramente diferente y requiere otro enfoque. En lugar de buscar una variable al compilar una aplicación de lienzo, pregúntese lo siguiente: ¿qué haría en Excel?

En otras herramientas, lo más probable es que haya realizado explícitamente un cálculo y haya almacenado el resultado en una variable. Pero Power Apps y Excel recalculan automáticamente las fórmulas cuando los datos de entrada cambian, por lo que normalmente no tendrá que crear ni actualizar las variables. Si adopta este enfoque siempre que sea posible, podrá crear, comprender y mantener la aplicación más fácilmente.

En algunos casos deberá usar variables en Power Apps, que amplía el modelo de Excel mediante la adición de fórmulas de comportamiento. Estas fórmulas se ejecutan cuando, por ejemplo, un usuario selecciona un botón. Dentro de una fórmula de comportamiento, a menudo resulta útil establecer una variable para su uso en otras fórmulas.

En general debe evitar el uso de variables, pero a veces solo una variable puede habilitar la experiencia que busca. Las variables se crean y se escriben implícitamente cuando aparecen en funciones que establecen sus valores.

Traducir Excel a Power Apps

Excel

Revisemos el funcionamiento de Excel. Una celda puede contener un valor, como un número o una cadena, o una fórmula basada en los valores de otras celdas. Cuando el usuario introduce un valor diferente en una celda, Excel recalcula automáticamente las fórmulas que dependen del valor nuevo. No hace falta realizar ningún tipo de programación para habilitar este comportamiento.

En el ejemplo siguiente, la celda A3 se establece en la fórmula A1+A2. Si A1 o A2 cambian, A3 se vuelve a calcular automáticamente para reflejar el cambio. Este comportamiento no requiere codificación fuera de la propia fórmula.

Animación de recálculo de la suma de dos números en Excel.

Excel no tiene variables. El valor de una celda que contiene una fórmula cambia en función de su entrada, pero no es posible recordar el resultado de una fórmula y almacenarlo en una celda o en otro lugar. Si cambia el valor de una celda, toda la hoja de cálculo podría cambiar y los valores calculados previamente se perderían. Un usuario de Excel puede copiar y pegar las celdas, pero esto depende del control manual del usuario y no es posible hacerlo con las fórmulas.

Power Apps

Las aplicaciones que se crean en Power Apps se comportan de una manera muy parecida a Excel. En lugar de actualizar las celdas, puede agregar controles donde quiera en una pantalla y asignarles un nombre para usarlos en fórmulas.

Por ejemplo, puede replicar el comportamiento de Excel en una aplicación mediante la adición de un control Etiqueta, denominado Label1, y dos controles Entrada de texto, denominados TextInput1 y TextInput2. Si después establece la propiedad Text de Label1 en TextInput1 + TextInput2, siempre muestra automáticamente la suma de los números que se encuentren en TextInput1 y TextInput2.

Calcular la suma de dos números en Power Apps.

Tenga en cuenta que el control Label1 está seleccionado y muestra su fórmula Text en la barra de fórmulas en la parte superior de la pantalla. Aquí se encuentra la fórmula TextInput1 + TextInput2. Esta fórmula crea una dependencia entre estos controles, del mismo modo que se crean las dependencias entre las celdas de un libro de Excel. Vamos a cambiar el valor de TextInput1:

Animación de cálculo de la suma de dos números en Power Apps.

La fórmula de Label1 se ha calculado automáticamente y muestra el nuevo valor.

En Power Apps, puede usar fórmulas para determinar no solo el valor principal de un control, sino propiedades como el formato. En el ejemplo siguiente, una fórmula para la propiedad Color de la etiqueta mostrará automáticamente los valores negativos en rojo. El aspecto de la función If debería resultarle familiar de Excel:

If( Value(Label1.Text) < 0, Red, Black )

Animación de formato condicional.

Puede usar fórmulas para una amplia variedad de escenarios:

  • Mediante el uso del GPS de su dispositivo, un control Mapa puede mostrar su ubicación actual con una fórmula que use Location.Latitude y Location.Longitude. A medida que se desplaza, el mapa seguirá automáticamente su ubicación.
  • Otros usuarios pueden actualizar los orígenes de datos. Por ejemplo, otros miembros del equipo pueden actualizar los elementos de una lista. Al actualizar un origen de datos, las fórmulas dependientes se recalculan automáticamente para que reflejen los datos actualizados. En este mismo ejemplo, puede establecer la propiedad Items de una galería en la fórmula Filter( SharePointList ), que mostrará automáticamente el conjunto recién filtrado de registros.

Beneficios

El uso de fórmulas para compilar aplicaciones tiene muchas ventajas:

  • Si está familiarizado con Excel, sabrá usar Power Apps. El lenguaje de fórmulas y modelos es el mismo.
  • Si ha usado otras herramientas de programación, piense en la gran cantidad de código que sería necesario para llevar a cabo estos ejemplos. En Visual Basic, tendría que escribir un controlador de eventos para el evento de cambio en cada control de entrada de texto. El código para realizar el cálculo de cada uno de ellos es redundante y podría desincronizarse, o tendría que escribir una subrutina común. En Power Apps esto se consigue con una única fórmula de una línea.
  • Para entender de dónde viene el texto de Label1, sabe exactamente dónde buscar: la fórmula de la propiedad Text. No hay otra manera de influir en el texto de este control. En una herramienta de programación tradicional, cualquier controlador de eventos o subrutina puede cambiar el valor de la etiqueta desde cualquier lugar del programa. Esto puede hacer que sea difícil detectar cuándo y dónde se ha cambiado una variable.
  • Si el usuario cambia un control deslizante pero después cambia de opinión, puede devolver el control deslizante a su valor original y es como si nunca hubiera cambiado nada: la aplicación muestra los mismos valores de control que antes. No hay repercusiones si se experimenta y se comprueba qué sucede al cambiar algo, igual que en Excel.

En general, si puede conseguir un efecto mediante una fórmula, lo mejor es que la use. Deje que el motor de fórmulas de Power Apps trabaje por usted.

Saber cuándo usar variables

Vamos a cambiar el sumador simple para que actúe como una máquina de sumar antigua, con un total acumulado. Si selecciona el botón Sumar, sumará un número al total acumulado. Si selecciona el botón Borrar, restablecerá en cero el total acumulado.

Mostrar Descripción
Aplicación con un control Entrada de texto, una etiqueta y dos botones. Cuando se inicia la aplicación, el total acumulado es 0.

El punto rojo representa el dedo del usuario en el cuadro de entrada de texto, donde el usuario escribe 77.
El control Entrada de texto contiene 77 y se está presionando el botón Agregar. El usuario selecciona el botón Agregar.
El total es 77 y se le está agregando otro 77. 77 se agrega al total agregado.

El usuario selecciona de nuevo el botón Agregar.
El total es 154 antes de que se borre. 77 se agrega de nuevo al total acumulado, lo que da como resultado 154.

El usuario selecciona el botón Borrar.
El total se borra. El total acumulado se restablece en 0.

Esta máquina de sumar usa algo que no existe en Excel: un botón. En esta aplicación, no puede usar solamente fórmulas para calcular el total acumulado, ya que su valor depende de una serie de acciones que realiza el usuario. El total acumulado debe registrarse y actualizarse manualmente. La mayoría de las herramientas de programación almacena esta información en una variable.

En ocasiones necesitará una variable para que la aplicación se comporte de la manera deseada, pero debe tener en cuenta una serie de advertencias:

  • Debe actualizar manualmente el total acumulado. El recálculo automático no lo hará por usted.
  • El total acumulado ya no se puede calcular en función de los valores de otros controles. Depende del número de veces que el usuario haya seleccionado el botón Agregar y del valor que se encontrase en cada ocasión en el control de entrada de texto. ¿El usuario ha escrito 77 y ha seleccionado Agregar dos veces, o bien ha escrito 24 y 130 para cada una de las sumas? No es posible determinarlo una vez que el total haya alcanzado 154.
  • Los cambios en el total pueden proceder de diferentes acciones. En este ejemplo, tanto el botón Agregar como el botón Borrar pueden actualizar el total. Si la aplicación no se comporta de la manera esperada, ¿qué botón causa el problema?

Usar una variable global

Para crear la máquina de sumar, necesitamos una variable que contenga el total acumulado. Las variables más sencillas para trabajar con Power Apps son las variables globales.

Cómo funcionan las variables globales:

  • Establezca el valor de la variable global con la función Set. Set( MyVar, 1 ) establece la variable global MyVar en un valor de 1.
  • Use la variable global mediante la referencia al nombre usado con la función Set. En este caso, MyVar devolverá 1.
  • Las variables globales pueden contener cualquier valor, como cadenas, números, registros y tablas.

Vamos a recompilar la máquina de sumar mediante el uso de una variable de global:

  1. Agregue un control de entrada de texto, denominado TextInput1, y dos botones, denominados Button1 y Button2.

  2. Establezca la propiedad Text de Button1 en "Agregar" y la propiedad Text de Button2 en "Borrar".

  3. Para actualizar el total acumulado cada vez que un usuario seleccione el botón Agregar, establezca su propiedad OnSelect en esta fórmula:

    Set( RunningTotal, RunningTotal + TextInput1 )

    La mera existencia de esta fórmula establece RunningTotal como una variable global que contiene un número debido al operador +. Puede hacer referencia a RunningTotal en cualquier parte de la aplicación. Cada vez que el usuario abre esta aplicación, RunningTotal tiene un valor inicial de en blanco.

    La primera vez que un usuario selecciona el botón Agregar y ejecuta Set, RunningTotal se establece en el valor RunningTotal + TextInput1.

    La propiedad OnSelect del botón Agregar se establece en la función Set.

  4. Para establecer el total acumulado en 0 cada vez que el usuario seleccione el botón Borrar, establezca su propiedad OnSelect en esta fórmula:

    Set( RunningTotal, 0 )

    La propiedad OnSelect del botón Borrar se establece en la función Set.

  5. Agregue un control Etiqueta y establezca su propiedad Text en RunningTotal.

    Esta fórmula se recalculará automáticamente y mostrará al usuario el valor de RunningTotal cuando cambie en función de los botones que el usuario seleccione.

    La propiedad Text de la etiqueta se establece en el nombre de la variable.

  6. Obtenga una vista previa de la aplicación y ya tiene la máquina de sumar, tal como se describió anteriormente. Escriba un número en el cuadro de texto y presione el botón Agregar varias veces. Cuando esté listo, vuelva a la experiencia de creación mediante la tecla Esc.

    El control de entrada Text contiene un valor y la etiqueta contiene el total acumulado.

  7. Para mostrar el valor de la variable global, realice una de las siguientes acciones:

    • Si está utilizando la versión preliminar de Power Apps Studio, seleccione Variables en el menú de creación de la aplicación.

      Menú de variables y colecciones.

    • Si está usando la versión clásica de Power Apps Studio, seleccione el menú Archivo y seleccione Variables en el panel izquierdo.

  8. Para mostrar todos los lugares donde se define y se usa la variable, selecciónela en Variables globales.

    Lista de ubicaciones donde se usa la variable.

Tipos de variables

Power Apps tiene tres tipos de variables:

Tipo de variable Scope Descripción Funciones que establecen
Variables globales Aplicación Las más sencillas de utilizar. Contiene un número, una cadena de texto, un valor booleano, un registro, una tabla, etc. a los que se puede hacer referencia desde cualquier parte de la aplicación. Establecer
Variables de contexto Pantalla Idóneas para pasar valores a una pantalla, de forma parecida a como se pasan los parámetros a un procedimiento en otros lenguajes. Se puede hacer referencia a ellas solo desde una pantalla. UpdateContext
Navegar
Colecciones Aplicación Contiene una tabla a la que se puede hacer referencia desde cualquier lugar de la aplicación. Permite que el contenido de la tabla se pueda modificar en lugar de establecerla como un todo. Se pueden guardar en el dispositivo local para su uso posterior. Collect
ClearCollect

Crear y quitar variables

Todas las variables se crean implícitamente cuando aparecen en una función Set, UpdateContext, Navigate, Collect o ClearCollect. Para declarar una variable y su tipo, solo tiene que incluirla en cualquiera de estas funciones en cualquier parte de la aplicación. Ninguna de estas funciones crea variables; solo rellenan las variables con valores. Nunca se declaran variables explícitamente como se haría en otra herramienta de programación, y todo lo que se escribe es implícito en el uso.

Por ejemplo, podría tener un control de botón con una fórmula OnSelect igual a Set (X, 1 ). Esta fórmula establece X como variable con un tipo de número. Puede usar X en las fórmulas como un número y esa variable tiene un valor en blanco después de abrir la aplicación, pero antes de seleccionar el botón. Cuando se selecciona el botón, se asigna a X el valor de 1.

Si agregó otro botón y establece su propiedad OnSelect en Set (X, "Hello"), se produciría un error porque el tipo (cadena de texto) no coincide con el tipo en el Set anterior (número). Todas las definiciones implícitas de la variable deben estar de acuerdo en el tipo. De nuevo, todo esto se produjo porque mencionó X en fórmulas, no porque ninguna de esas fórmulas se ejecutó realmente.

Quite una variable quitando todas las funciones Set, UpdateContext, Navigate, Collect o ClearCollect que establezcan implícitamente la variable. Sin estas funciones, la variable no existe. También debe quitar las referencias a la variable, ya que provocarán un error.

Duración de la variable y valor inicial

Todas las variables se mantienen en la memoria mientras se ejecuta la aplicación. Una vez que se cierra la aplicación, se pierden los valores que contienen las variables.

Puede almacenar el contenido de una variable en un origen de datos mediante las funciones Patch o Collect. También puede almacenar valores en colecciones en el dispositivo local mediante la función SaveData.

Cuando el usuario abre la aplicación, todas las variables tienen el valor inicial en blanco.

Leer variables

Use el nombre de la variable para leer su valor. Por ejemplo, puede definir una variable con esta fórmula:

Set( Radius, 12 )

A continuación, puede usar simplemente Radius en cualquier lugar en el que pueda usar un número y se reemplazará por 12:

Pi() * Power( Radius, 2 )

Si asigna a una variable de contexto el mismo nombre que una variable global o una colección, la variable de contexto tiene prioridad. Sin embargo, todavía puede hacer referencia a la variable global o colección si utiliza el operador de desambiguación [@Radius].

Usar una variable de contexto

Veamos cómo se crearía la máquina de sumar mediante una variable de contexto en lugar de una variable global.

Cómo funcionan las variables de contexto:

  • Puede establecer implícitamente variables de contexto mediante mediante la función UpdateContext o Navigate. Cuando se inicia la aplicación, el valor inicial de todas las variables de contexto está en blanco.
  • Las variables de contexto se actualizan con registros. En otras herramientas de programación, normalmente se usa "=" para la asignación, como en "x = 1". En el caso de las variables de contexto, se usa { x: 1 }. Cuando use una variable de contexto, use su nombre directamente sin la sintaxis de registro.
  • También puede establecer una variable de contexto al usar la función Navigate para mostrar una pantalla. Si piensa en una pantalla como un tipo de procedimiento o subrutina, este enfoque se asemeja al paso de parámetros en otras herramientas de programación.
  • Excepto en el caso de Navigate, las variables de contexto están limitadas al contexto de una sola pantalla, que es donde obtienen su nombre. No puede usarlas ni establecerlas fuera de este contexto.
  • Las variables de contexto pueden contener cualquier valor, como cadenas, números, registros y tablas.

Vamos a volver a compilar la máquina de sumar mediante el uso de una variable de contexto:

  1. Agregue un control de entrada de texto, denominado TextInput1, y dos botones, denominados Button1 y Button2.

  2. Establezca la propiedad Text de Button1 en "Agregar" y la propiedad Text de Button2 en "Borrar".

  3. Para actualizar el total acumulado cada vez que un usuario seleccione el botón Agregar, establezca su propiedad OnSelect en esta fórmula:

    UpdateContext( { RunningTotal: RunningTotal + TextInput1 } )

    La mera existencia de esta fórmula establece RunningTotal como una variable de contexto que contiene un número debido al operador +. Puede hacer referencia a RunningTotal en cualquier parte de esta pantalla. Cada vez que el usuario abre esta aplicación, RunningTotal tiene un valor inicial de en blanco.

    La primera vez que el usuario selecciona el botón Agregar y se ejecuta UpdateContext, RunningTotal se establece en el valor RunningTotal + TextInput1.

    Propiedad OnSelect del botón Agregar con updatecontext.

  4. Para establecer el total acumulado en 0 cada vez que el usuario seleccione el botón Borrar, establezca su propiedad OnSelect en esta fórmula:

    UpdateContext( { RunningTotal: 0 } )

    Una vez más, se usa UpdateContext con la fórmula UpdateContext( { RunningTotal: 0 } ).

    Propiedad OnSelect del botón Borrar con updatecontext.

  5. Agregue un control Etiqueta y establezca su propiedad Text en RunningTotal.

    Esta fórmula se recalculará automáticamente y mostrará al usuario el valor de RunningTotal cuando cambie en función de los botones que el usuario seleccione.

    Propiedad de texto de la etiqueta.

  6. Obtenga una vista previa de la aplicación y ya tiene la máquina de sumar, tal como se describió anteriormente. Escriba un número en el cuadro de texto y presione el botón Agregar varias veces. Cuando esté listo, vuelva a la experiencia de creación mediante la tecla Esc.

    El control de entrada Text muestra un valor y la etiqueta muestra el total acumulado.

  7. Puede establecer el valor de una variable de contexto mientras se desplaza a una pantalla. Esto resulta útil a la hora de pasar "contexto" o "parámetros" de una pantalla a otra. Para mostrar esta técnica, inserte una pantalla, inserte un botón y establezca su propiedad OnSelect en esta fórmula:

    Navigate( Screen1, None, { RunningTotal: -1000 } )

    Propiedad OnSelect de un botón.

    Mantenga presionada la tecla Alt mientras selecciona este botón para mostrar Screen1 y establezca la variable de contexto RunningTotal en -1000.

    Screen1 está abierto.

  8. Para mostrar el valor de la variable de contexto, realice una de las siguientes acciones:

    • Si está utilizando la versión preliminar de Power Apps Studio, seleccione Variables en el menú de creación de la aplicación.

    • Si está usando la versión clásica de Power Apps Studio, seleccione el menú Archivo y seleccione Variables en el panel izquierdo.

  9. Para mostrar dónde se define y se usa la variable de contexto, selecciónela en Variables de contexto.

Usar una colección

Por último, veamos cómo crear la máquina de sumar con una colección. Puesto que una colección contiene una tabla que es fácil modificar, vamos a hacer que esta máquina de sumar tenga un "registro" de todos los valores a medida que se escriben.

Cómo funcionan las colecciones:

  • Para crear y establecer colecciones, use la función ClearCollect. También puede usar la función Collect, pero requerirá otra variable en vez de reemplazar la anterior.
  • Una colección es una clase de origen de datos y, por lo tanto, una tabla. Para obtener acceso a un valor único de una colección, use la función First y extraiga un campo del registro resultante. Si ha usado un solo valor con ClearCollect, este será el campo Value, como en este ejemplo:
    First( VariableName ).Value

Vamos a recrear la máquina de sumar mediante una colección:

  1. Agregue un control Entrada de texto, denominado TextInput1, y dos botones, denominados Button1 y Button2.

  2. Establezca la propiedad Text de Button1 en "Agregar" y la propiedad Text de Button2 en "Borrar".

  3. Para actualizar el total acumulado cada vez que un usuario seleccione el botón Agregar, establezca su propiedad OnSelect en esta fórmula:

    Collect( PaperTape, TextInput1.Text )

    La mera existencia de esta fórmula establece PaperTape como una colección que contiene una tabla de cadenas de texto de una sola columna. Puede hacer referencia a PaperTape en cualquier parte de esta aplicación. Cada vez que un usuario abre esta aplicación, PaperTape es una tabla vacía.

    Cuando se ejecuta esta fórmula, agrega el nuevo valor al final de la colección. Dado que estamos agregando un solo valor, Collect lo coloca automáticamente en una tabla de una sola columna y el nombre de la columna es Value, que usará más adelante.

    Propiedad OnSelect del botón Agregar con collect.

  4. Para borrar el registro cada vez que el usuario seleccione el botón Borrar, establezca su propiedad OnSelect en esta fórmula:

    Clear( PaperTape )

    Propiedad OnSelect del botón Borrar con borrar.

  5. Para mostrar el total acumulado, agregue una etiqueta y establezca su propiedad Text en esta fórmula:

    Sum( PaperTape, Value )

    Propiedad de texto de la etiqueta.

  6. Para ejecutar la máquina de sumar, presione F5 para abrir la vista previa, escriba números en el control de entrada de texto y seleccione botones.

    El control Entrada de texto muestra un valor y la etiqueta muestra el total acumulado.

  7. Presione la tecla Esc para volver al área de trabajo predeterminada.

  8. Para mostrar el registro, inserte un control Tabla de datos y establezca su propiedad Items en esta fórmula:

    PaperTape

    En el panel de la derecha, seleccione Editar campos y luego seleccione Agregar campo, seleccione la columna Valor y luego seleccione Agregar para mostrarlo.

    Tabla de datos que muestra los valores agregados a la colección.

  9. Para ver los valores en su colección, realice una de las siguientes acciones:

    • Si está usando la versión de vista previa de Power Apps Studio, seleccione Variables en el menú de autorización de aplicación y después seleccione Colecciones.

    • Si está utilizando la versión clásica de Power Apps Studio, seleccione Colecciones en el menú Archivo .

  10. Para almacenar y recuperar la colección, agregue dos controles de botón adicionales y establezca sus propiedades Text en Cargar y Guardar. Establezca la propiedad OnSelect del botón Cargar en esta fórmula:

    Clear( PaperTape ); LoadData( PaperTape, "StoredPaperTape", true )

    Primero debe borrar la colección porque LoadData anexará los valores almacenados al final de la colección.

    Propiedad OnSelect del botón Cargar.

  11. Establezca la propiedad OnSelect del botón Guardar en esta fórmula:

    SaveData( PaperTape, "StoredPaperTape" )

    Propiedad OnSelect* del botón Guardar.

  12. Vuelva a obtener la vista previa pulsando la tecla F5, escriba números en el control de entrada de texto y seleccione botones. Seleccione el botón Guardar. Cierre y vuelva a cargar la aplicación y seleccione el botón Cargar para volver a cargar la colección.

Nota

Las funciones SaveData y LoadData funcionan en Power Apps Mobile, pero no en Power Apps Studio ni el reproductor web para Power Apps.

Nota

¿Puede indicarnos sus preferencias de idioma de documentación? Realice una breve encuesta. (tenga en cuenta que esta encuesta está en inglés)

La encuesta durará unos siete minutos. No se recopilan datos personales (declaración de privacidad).