Si ha usado otra herramienta de programación como Visual Basic o JavaScript, probablemente se pregunte: ¿dónde están las variables? PowerApps es ligeramente diferente y requiere otro enfoque. En lugar de buscar una variable, 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 PowerApps 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 PowerApps, 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.

Traducir Excel a PowerApps

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.

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.

PowerApps

Las aplicaciones que se crean en PowerApps 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 Text box, denominado TextBox1, y dos controles Text input, denominados TextInput1 y TextInput2. Si después establece la propiedad Text de TextBox1 en TextInput1 + TextInput2, siempre mostrará automáticamente la suma de los números que se encuentren en TextInput1 y TextInput2.

Tenga en cuenta que el control TextBox1 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:

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

En PowerApps, 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 del cuadro de texto mostrará automáticamente los valores negativos en rojo. El aspecto de la función If debería resultarle familiar de Excel:
If( Value(TextBox1.Text) < 0, Red, Black )

Ahora, si el resultado del cálculo en TextBox1.Text es negativo, el número se mostrará en color rojo:

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

  • Mediante el uso del GPS de su dispositivo, un control de 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 de SharePoint. 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.

Ventajas

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

  • Si está familiarizado con Excel, sabrá usar PowerApps. 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 cuadro 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 PowerApps, todo esto se consigue con una única fórmula de una línea.
  • Para entender de dónde viene el texto de TextBox1, 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 PowerApps 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.

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 Sumar 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 Sumar 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 Sumar 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?

Crear una variable de contexto

Para crear la máquina de sumar, necesitamos una variable que contenga el total acumulado. Las variables más sencillas de PowerApps son las variables de contexto.

Cómo funcionan las variables de contexto:

  • Para crear y establecer variables de contexto, se usa la función UpdateContext. Si una variable de contexto todavía no existe cuando se actualiza por primera vez, se creará con un valor predeterminado en blanco.
  • Las variables de contexto se crean y 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 se usa una variable de contexto, se usa su nombre directamente.
  • También puede establecer una variable de contexto cuando se muestra una pantalla, mediante el uso de la función Navigate. Si considera una pantalla como una especie de procedimiento o subrutina, es como pasar 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.
  • Cuando el usuario cierra una aplicación, se pierden todas sus variables de contexto.

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 "Sumar" y la propiedad Text de Button2 en "Borrar".

  3. Para actualizar el total acumulado cada vez que un usuario seleccione el botón Sumar, establezca su propiedad OnSelect en esta fórmula:
    UpdateContext( { RunningTotal: RunningTotal + Text1 } ).

    La primera vez que un usuario selecciona el botón Sumar y se llama a UpdateContext, se crea RunningTotal con un valor predeterminado en blanco. Además, se tratará como un cero.

  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 } ).

  5. Agregue un control Text box 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.

  6. Obtenga una vista previa de la aplicación y ya tiene la máquina de sumar, tal como se describió anteriormente.

Crear una colección

Para hacer referencia a una variable desde cualquier pantalla (no solo desde la pantalla en la que se creó), use una colección para contener una variable global.

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 un 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
  • Todas las fórmulas pueden tener acceso a una colección desde cualquier pantalla de la aplicación.
  • Cuando un usuario cierra una aplicación, se vacían todas sus colecciones.

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

  1. Agregue un control Text input, denominado TextInput1, y dos botones, denominados Button1 y Button2.

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

  3. Para actualizar el total acumulado cada vez que un usuario seleccione el botón Sumar, establezca su propiedad OnSelect en esta fórmula:
    ClearCollect( RunningTotal, First( RunningTotal ).Value + TextInput1 )

    Mediante el uso de ClearCollect con un valor único, se creará un registro en la colección con un solo campo Value. La primera vez que el usuario selecciona el botón Sumar y se llama a ClearCollect, RunningTotal estará vacío. Además, First devolverá un valor en blanco y se tratará como un cero.

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

    Una vez más, se usa ClearCollect con la fórmula ClearCollect( RunningTotal, 0 ).

  5. Para mostrar el total acumulado, agregue un control de cuadro de texto y establezca su propiedad Text en esta fórmula:
    First(RunningTotal).Value

    Esta fórmula extrae el campo Value del primer registro de la colección RunningTotal. El cuadro de texto mostrará automáticamente el valor de RunningTotal cuando cambie en función de los botones que el usuario seleccione.

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

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

  8. Para ver los valores de la colección, seleccione Colecciones en el menú Archivo.