Como ya sabemos, Power Apps nos brinda un montón de nuevas posibilidades, y el día de hoy vamos a explorar brevemente el cómo podemos replicar un loop «while» o «do until». Para aquellos que no estén familiarizados con el concepto:
- Un while-loop es un statement de control de flujo que permite la ejecución repetida de código en base a una condición booleana dada.
- El while-loop puede ser visto como un statement if en repetición.
Power Apps cuenta con una expresión ‘looping’ en ForAll, la cual evalúa una fórmula para todos los registros de una tabla, y mientras que aquí cubriremos algunos de los casos de uso que un loop while o do-until resolverían, aun hay muchos escenarios que estos no cubren.
Sin más que agregar, veamos qué es lo que podemos cubrir con un while-loop en Power Apps.
Bloque While Loop en Power Apps
Para empezar colocaremos un control que pueda activar una expresión de comportamiento, para este ejemplo usaremos un Botón.
En la propiedad Button.OnSelect añadiremos las tres siguientes expresiones:
UpdateContext({varStartTimer: false}) UpdateContext({varRuns: 0}); UpdateContext({varStartTimer: true})
Estas dos variables de contexto sirven como el activador y contra variables para el loop, pero hay un elemento más que nos falta, el cual es la ‘condición fin’. Colocaremos un TextInput y estableceremos la propiedad TextIntput.OnChange a:
UpdateContext({varLoopEnd: Value(TextInput.Text)})
Ahora estableceremos TextInput.Default a
varLoopEnd.
Luego de esto tenemos la parte más crucial del while-loop de Power Apps, que sería el control Timer.
Colocaremos un control Timer dentro de la pantalla y estableceremos Timer.Duration a 1000. Esto es solo para propósitos del ejemplo, pues dependiendo de la expresión (o expresiones) puede que nos convenga hacer que el temporizador sea lo más pequeño posible. Ahora vamos a cambiar Timer.Start a
varStartTimer
Esto causará que Button.OnSelect comience el temporizador. Luego vamos a establecer Timer.Repeat a:
If(varRuns >= varLoopEnd – 1, false, true)
Ahora vamos a establecer Timer.OnTimerEnd a:
// Insert the expressions and you would like the loop to execute here UpdateContext({varRuns: varRuns + 1}); If(varRuns >= varLoopEnd – 1, UpdateContext({varTimerStart: false}))
Ahora bien, ¿qué es lo que sucede aquí?
- Al introducir un valor en el TextInput se establecerá la condición LoopEnd, pero puede haber muchas formas de construír esto siempre y cuando se evalúe como un booleano y sea puesto en el Timer.Repeat. Podríamos, por ejemplo, hacer el loop sobre una colección y buscar cierta condición.
- Cuando un valor es introducido y el Botón es presionado el Timer inicia, corre por la duración indicada y al final activa las expresiones Timer.OnTimerEnd. Ejecuta nuestras expresiones personalizadas añadidas, tras lo cual añade un ‘run’ y evalúa si debería reiniciar el activador para el loop (y no el loop en sí).
- Luego de esto, Timer.Repeat es evaluado. Si es evaluado como valor false el loop se detendrá, pero de ser evaluado como true entonces otra ejecución será iniciada.
Crear un método loop en Power Apps no es difícil, solo requiere un poco de ingenio y un buen timer. Cualquier duda nos leemos abajo.