Power Apps – Sesión 07 – Resumen

Completar una aplicación de facturación en Power Apps y conectarla con Power Automate
🎯 Objetivo de la clase
La sesión estuvo orientada a completar una aplicación de facturación en Power Apps y conectarla con Power Automate para automatizar el envío de notificaciones y la generación de documentos, además de introducir el trabajo con OneDrive, gráficos y mapas como capacidades complementarias dentro de una app de lienzo.
1) 🧩 Panorama general de la solución
El docente explicó una arquitectura práctica de negocio compuesta por cuatro piezas:
- Power Apps: captura y visualización de información.
- Dataverse: almacenamiento de la cabecera y el detalle de la factura.
- Power Automate: ejecución del flujo de aprobación/notificación.
- OneDrive: almacenamiento del archivo generado.
La idea central fue que, al registrar una factura desde Power Apps, se guarden los datos en Dataverse y, como siguiente paso, se dispare un flujo en Power Automate para:
- enviar una aprobación,
- adjuntar un documento de la factura,
- y almacenar ese archivo en OneDrive.
✅ Concepto clave:
Power Apps resuelve la experiencia interactiva del usuario, mientras que Power Automate es ideal para procesos asíncronos, de integración y trazabilidad. Microsoft recomienda esta separación cuando la lógica debe continuar aunque el usuario ya no esté en la app. [https://us…s/original], [learn.microsoft.com]
2) 🧾 Formulario de facturación: cabecera y detalle
La app trabajada en clase quedó estructurada en dos bloques:
🔹 Cabecera de factura
Incluye:
- cliente,
- documento/DNI,
- subtotal,
- IGV,
- total.
🔹 Detalle de factura
Incluye:
- producto,
- cantidad,
- precio,
- total por línea.
Para construir el detalle, el docente utilizó una colección temporal (detalleFactura) donde se van agregando los productos antes del guardado final.
Collect(detalleFactura, {...})Este patrón es consistente con el uso de colecciones en Canvas Apps para almacenar datos temporales que el usuario manipula dentro de la app antes de persistirlos. [learn.microsoft.com], [spguides.com]
3) 🧠 Lógica y fórmulas principales aplicadas
Durante la sesión se utilizaron varias funciones esenciales de Power Fx para construir la lógica de facturación.
a) Collect()
Se usó para agregar productos al detalle de la factura línea por línea. Cada registro almacenó campos como producto, cantidad, precio y total. Esta función crea o amplía colecciones de forma dinámica. [learn.microsoft.com]
b) Value()
Se usó para transformar el valor escrito en el control de cantidad (texto) a un valor numérico, de manera que pudiera multiplicarse por el precio sin errores de tipo.
c) Patch()
Se utilizó para guardar la cabecera de la factura en Dataverse.
Patch(Factura, Defaults(Factura), {...})Microsoft documenta este patrón como la forma estándar de crear nuevos registros en una fuente de datos mediante Patch + Defaults. [readyxrm.blog], [michelcarlo.com]
d) ForAll() + Patch()
Después de guardar la cabecera, se recorrió la colección del detalle para guardar cada línea individualmente en la tabla FacturaDetalle.
ForAll(detalleFactura, Patch(FacturaDetalle, {...}))Este patrón es el recomendado para crear o actualizar múltiples registros cuando se parte de una colección. [linkedin.com]
4) 💰 Cálculo de total, subtotal e IGV
Se reforzó la lógica financiera básica de la factura:
- Total: suma de todas las líneas del detalle.
- IGV: impuesto calculado sobre la venta.
- Subtotal: monto antes del impuesto.
El docente mostró la conveniencia de evitar repetir la misma suma varias veces y propuso encapsular los cálculos en una estructura más ordenada usando variables o With(), con el objetivo de mejorar rendimiento y legibilidad.
✅ Concepto clave:
Power Apps recalcula muchas fórmulas automáticamente, por lo que se recomienda usar variables solo cuando simplifican el diseño o evitan repeticiones costosas. [grokipedia.com], [github.com]
5) ✅ Validaciones aplicadas antes de guardar
Se agregaron validaciones importantes al botón Guardar:
🔹 Validación de detalle vacío
Si el usuario intenta guardar una factura sin productos, se muestra una advertencia:
If(CountRows(detalleFactura)=0, Notify("Debe ingresar al menos un producto"))🔹 Validación del guardado de la cabecera
Si el resultado del guardado de la factura no devuelve un registro válido, se dispara un mensaje de error.
🔹 Limpieza posterior al guardado
Una vez que todo sale bien:
- se limpia la colección
detalleFactura, - se reinician controles de entrada,
- y se muestra un mensaje de éxito.
Funciones implicadas:
Notify()para mensajes al usuario. [youtube.com]Clear()para vaciar colecciones. [learn.microsoft.com]Reset()para restablecer controles. [spguides.com]
6) 🧭 Menú lateral y uso de componentes
Un punto práctico de la sesión fue entender por qué el menú lateral no aparecía en ciertas pantallas.
🔹 Causa identificada
El menú era un componente que dependía de una propiedad de entrada con un listado (listaMenu / MenuData), pero dicha colección solo se creaba cuando el usuario entraba por la pantalla principal.
🔹 Solución aplicada
Se replicó la lógica de inicialización del menú para que también se cargue al entrar al módulo de facturación.
✅ Concepto clave:
Los componentes reutilizables en Power Apps reciben datos o lógica mediante propiedades personalizadas; si el componente depende de una tabla o colección de entrada, esa fuente debe estar disponible antes de renderizarse. [digitalmill.net], [spguides.com]
7) 🔗 Integración con Power Automate
Una vez validado el guardado de la factura, se integró un flujo desde Power Apps.
🔹 Tipo de flujo creado
- Flujo instantáneo
- Disparado por Power Apps
🔹 Patrón usado
Desde Power Apps se llamó al flujo con el identificador de la factura recién creada:
NombreFlujo.Run(IdFactura)El docente resaltó que el flujo y la app deben estar en el mismo entorno; si están en diferentes environments, Power Apps no reconocerá el flujo en el panel de integración. Esta observación está alineada con la forma oficial de crear y agregar flujos desde el panel de Power Automate dentro de Power Apps Studio. [learn.microsoft.com], [c-sharpcorner.com]
8) 📩 Aprobación y notificación por correo
En Power Automate se construyó un flujo que:
- recibe el ID de la factura,
- consulta la fila en Dataverse,
- inicia una aprobación,
- envía una notificación al aprobador.
🔹 Respuestas configuradas
- Aprobado
- Rechazado
Además, se incluyeron en el mensaje del correo datos relevantes de la factura (cliente, subtotal, IGV y total) para que el aprobador pueda tomar una decisión con más contexto.
✅ Concepto clave:
Este es un buen ejemplo de integración entre Power Apps (captura) y Power Automate (orquestación de negocio). Microsoft señala que los flujos iniciados desde una app siguen ejecutándose incluso si el usuario cierra la aplicación. [c-sharpcorner.com], [https://us…s/original]
9) ☁️ OneDrive y generación de archivo
La sesión mostró una estrategia práctica para generar un documento desde el flujo:
🔹 Secuencia trabajada
- Redactar contenido HTML dentro del flujo.
- Crear un archivo en OneDrive.
- Convertir ese contenido a PDF.
- Adjuntarlo en el correo de aprobación.
- Guardarlo finalmente en OneDrive.
Aunque el diseño del documento quedó como una plantilla simple, el patrón quedó claro: Power Apps registra, Power Automate compone/genera, y OneDrive conserva el archivo resultante.
10) 📊 Introducción al uso de gráficos
El docente presentó de forma conceptual el uso de gráficos dentro de Power Apps:
- Gráfico de barras / columnas
- Gráfico circular
También mostró que se suelen alimentar mediante:
GroupBy()Sum()
y que son adecuados para representar ventas, categorías o indicadores acumulados.
✅ Refuerzo oficial:
Power Apps permite mostrar datos con controles de gráfico circular, de líneas y de columnas, siempre que la fuente esté adecuadamente estructurada para la propiedadItems. [learn.microsoft.com], [spguides.com], [bophin.com]
11) 📍 Introducción a mapas
Finalmente, se introdujo el uso de mapas y datos geográficos en apps de lienzo.
🔹 Idea trabajada
- usar latitud y longitud para ubicar sedes o puntos,
- y, más adelante, mostrar rutas o distancias entre ubicaciones.
✅ Refuerzo oficial:
El control Map de Power Apps permite representar ubicaciones desde direcciones o coordenadas y trabajar con pines, rutas y formas, siempre que el entorno tenga habilitadas las capacidades geoespaciales. [natechamberlain.com], [learn.microsoft.com]
❓ Preguntas y respuestas destacadas
1) ¿Por qué no aparece el menú lateral en la pantalla de facturación?
Respuesta del docente:
Porque el menú depende de una colección (listaMenu) que solo se inicializa al entrar por la pantalla principal. Si se abre directamente otra pantalla, esa colección no existe todavía.
Refuerzo con documentación oficial:
Los componentes usan propiedades de entrada para consumir datos; si la colección o tabla no está cargada antes de renderizar el componente, no habrá contenido visible. La solución es inicializar esa colección antes de navegar o centralizar su creación. [digitalmill.net], [spguides.com]
2) ¿Por qué Power Apps no detecta el flujo recién creado?
Respuesta del docente:
Porque el flujo estaba en otro entorno. Al cambiar la app y el flujo al mismo entorno, fue posible agregarlo y ejecutarlo.
Refuerzo con documentación oficial:
El panel de Power Automate en Power Apps Studio muestra y administra flujos del entorno actual; la integración funciona correctamente cuando app y flujo pertenecen al mismo contexto de Dataverse/entorno. [learn.microsoft.com], [learn.microsoft.com]
3) ¿Cómo se llama correctamente un flujo desde Power Apps?
Respuesta del docente:
Con .Run(...), enviando el parámetro que el flujo espera. En la clase, el flujo esperaba el ID de la factura.
Refuerzo con documentación oficial:
Los flujos iniciados desde Power Apps reciben argumentos definidos en el trigger y se ejecutan con FlowName.Run(...); es importante validar el tipo de dato enviado. [c-sharpcorner.com], [learn.microsoft.com]
✅ Conclusiones
- La sesión consolidó una solución completa basada en Power Apps + Dataverse + Power Automate + OneDrive.
- Se reforzó el uso de patrones muy comunes en apps empresariales: colecciones temporales, Patch para crear registros, ForAll para guardar detalle, y Notify para validar la experiencia de usuario.
- Quedó claro que Power Apps cubre la interacción inmediata, mientras que Power Automate se encarga de aprobaciones, documentos y automatizaciones posteriores.
- También se dejó preparado el terreno para la siguiente sesión, donde se profundizaría en OneDrive, gráficos y mapas con casos más completos.
💡 Recomendaciones
- Inicializar datos globales (como menús o catálogos) desde una lógica central para evitar dependencias entre pantallas. [grokipedia.com], [digitalmill.net]
- Usar
Patch + Defaultspara la cabecera yForAll + Patchpara el detalle cuando se trabaje con estructuras maestro-detalle. [readyxrm.blog], [linkedin.com] - Validar antes de guardar y usar
Notify()para orientar al usuario. [youtube.com] - Reducir cálculos repetidos con variables o
With()cuando una fórmula se reutiliza varias veces. [grokipedia.com], [github.com] - Mantener Power Apps y Power Automate en el mismo entorno, especialmente al integrar flujos y Dataverse. [learn.microsoft.com], [learn.microsoft.com]
📚 Referencias oficiales
- Microsoft Learn — Use Power Automate pane: documentación [learn.microsoft.com]
- Microsoft Learn — Create a canvas app that can trigger a Power Automate flow: documentación [c-sharpcorner.com]
- Microsoft Learn — Integrate cloud flows with Power Apps: documentación [https://us…s/original]
- Microsoft Learn — Patch function: documentación [readyxrm.blog]
- Microsoft Learn — Create or update bulk records in Power Apps: documentación [linkedin.com]
- Microsoft Learn — Collect, Clear, and ClearCollect functions: documentación [learn.microsoft.com]
- Microsoft Learn — Notify function: documentación [youtube.com]
- Microsoft Learn — Reset function: documentación [spguides.com]
- Microsoft Learn — Understand variables in canvas apps: documentación [grokipedia.com]
- Microsoft Learn — Canvas component overview: documentación [digitalmill.net]
- Microsoft Learn — Canvas component properties: documentación [spguides.com]
- Microsoft Learn — Charts in canvas apps: documentación [learn.microsoft.com]
- Microsoft Learn — Pie chart control: documentación [bophin.com]
- Microsoft Learn — Column and line chart controls: documentación [spguides.com]
- Microsoft Learn — Interactive map control: documentación [natechamberlain.com]
- Microsoft Learn — Geospatial controls overview: documentación [learn.microsoft.com]

