🟢 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 As para 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 (AddColumnsFilterSort), ú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).

📚 Recursos oficiales (links verificados)

Deja un comentario

¡Gracias por tu mensaje!

Me pondré en contacto tan rápido como pueda.

Descubre más desde Power Platform En Español

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo