🟢 Introducción
Cuando trabajas con colecciones, tablas o datos de conectores (SharePoint, Dataverse, SQL, etc.) en una Canvas App, tarde o temprano necesitas aplicar una fórmula a cada registro: calcular, transformar datos o ejecutar acciones repetitivas.
La función ForAll() es el equivalente a un “bucle” en Power Fx: te permite recorrer una tabla y ejecutar una fórmula para cada fila.
🧠 Qué es / para qué sirve
ForAll() evalúa una fórmula para cada registro de una tabla. La fórmula puede:
- Calcular un valor (por ejemplo, un total con impuestos).
- Modificar datos (usando Patch, Collect, Remove, etc.).
- Llamar conectores (APIs, Dataverse, SharePoint, etc.). Microsoft Learn
Devuelve una tabla con los resultados de esa fórmula, pero muchas veces la usamos solo por sus efectos (actualizar datos, crear registros, etc.).
Ejemplos de uso:
- Crear varios registros en un origen de datos a partir de una colección.
- Actualizar muchos registros de golpe.
- Ejecutar una acción por cada elemento de un carrito, lista, etc.
🧩 Sintaxis
ForAll( Tabla, Fórmula )
- Tabla: colección o tabla que quieres recorrer.
- Fórmula: lo que se ejecuta para cada registro. Dentro de la fórmula puedes usar:
- ThisRecord
- Referencia directa a campos (CampoX)
- Alias con
Aspara mayor claridad. Microsoft Learn+1
Ejemplo de alias:
ForAll( Carrito As ItemCarrito, Patch( Pedidos, Defaults(Pedidos), { Producto: ItemCarrito.Producto, Cantidad: ItemCarrito.Cantidad } ))
💻 Ejemplos con código
🔹 Ejemplo 1 — Crear registros en Dataverse desde una colección
Supón que tienes una colección colNuevosClientes con columnas Nombre y Email:
ForAll( colNuevosClientes As c, Patch( Clientes, Defaults(Clientes), { Nombre: c.Nombre, Email: c.Email } ))
🔹 Ejemplo 2 — Actualizar varios registros de SharePoint
Colección colTareas con columnas ID y Estado:
ForAll( colTareas As t, Patch( 'Lista Tareas', LookUp('Lista Tareas', ID = t.ID), { Estado: t.Estado } ))
🔹 Ejemplo 3 — Calcular una tabla de resultados
Colección colProductos con Precio y Cantidad:
ClearCollect( colTotales, ForAll( colProductos As p, { Producto: p.Producto, Total: p.Precio * p.Cantidad } ))
colTotales tendrá un registro por producto con su total calculado.
🔹 Ejemplo 4 — Uso de ForAll con Sequence (iterar por número)
ClearCollect( colNumeros, ForAll( Sequence(10) As fila, { Numero: fila.Value, Cuadrado: Power(fila.Value, 2) } ))
Crea una colección del 1 al 10 con su cuadrado.
💡 Usa el siguiente Sandbox para tus prácticas con las colecciones
Power Fx Interactive Sandbox: Registros
Cargando el entorno interactivo de Power Fx…
🧱 Buenas prácticas
✅ Usa alias (As) para mejorar claridad en fórmulas largas.
✅ Utiliza ForAll cuando realmente necesitas recorrer una tabla registro por registro.
✅ Si la operación puede resolverse con funciones de tabla (AddColumns, Filter, Sort), úsalas — son más eficientes.
✅ Evita el uso de ForAll para orígenes delegables cuando no sea necesario.
✅ Prueba primero con pocas filas antes de aplicarlo a miles.
⚠️ Errores comunes
🚫 Usar ForAll cuando una función delegable resolvería el problema.
🚫 Suponer que procesa en orden secuencial — puede ejecutarse en paralelo.
🚫 Modificar dentro de ForAll la misma tabla que se está iterando.
🚫 Anidar ForAll sin justificación — afecta el rendimiento.
🚫 Invocar conectores intensivos dentro de ForAll sin límites — puede saturar el servicio.
🔄 Variantes o alternativas
- AddColumns() → Para transformar tablas sin “loops”.
- Filter() → Para obtener subconjuntos antes de procesar.
- With() → Para mejorar legibilidad cuando procesas un solo registro.
- Sequence() → Para generar tablas numéricas sin conectores.
- Concurrent() → Para ejecutar acciones en paralelo (no por registro).


Deja un comentario