Power Apps #12 – Sesión 06 – Resumen

🎯 Objetivo de la clase
El objetivo principal fue iniciar la construcción de una aplicación de facturación utilizando Power Apps y Microsoft Dataverse, preparando la estructura de datos necesaria para integrar posteriormente la aplicación con Power Automate.
Durante la sesión, los participantes aprendieron a:
- Comparar el uso de SharePoint y Dataverse como fuentes de datos.
- Habilitar Dataverse en un entorno de Power Platform.
- Crear tablas y columnas personalizadas.
- Diseñar relaciones de uno a muchos mediante columnas de búsqueda.
- Construir una pantalla Canvas para seleccionar clientes y productos.
- Recuperar información de registros seleccionados.
- Crear una colección temporal con el detalle de productos.
- Agregar y eliminar elementos de dicha colección.
- Registrar la cabecera de una factura mediante
Patch. - Calcular subtotal, impuesto y total.
- Capturar el registro creado en una variable para utilizar posteriormente su identificador.
Aunque al inicio se presentó la integración con Power Automate, las notificaciones y aprobaciones no llegaron a implementarse. La clase se concentró en la preparación del modelo de Dataverse y en el desarrollo funcional de la pantalla de facturación. [Sesion 06…wer Innova | Word]
📚 Temas desarrollados
Tema 1. Integración prevista entre Power Apps y Power Automate
Objetivo
Comprender el flujo general que permitirá registrar una factura y ejecutar una notificación automática.
Flujo presentado
El instructor explicó el siguiente proceso:
- El usuario registra una factura desde Power Apps.
- Los datos se guardan en tablas de Dataverse.
- Power Apps llama a un flujo de Power Automate.
- El flujo ejecuta las acciones configuradas.
- Se envía una notificación por correo electrónico.
- El destinatario puede aprobar o rechazar el comprobante.
- Power Automate continúa después de recibir la respuesta.
- El resultado de la aprobación puede almacenarse en Dataverse.
También se mencionó la posibilidad de:
- Enviar notificaciones por Microsoft Teams.
- Adjuntar el comprobante en formato PDF.
- Incorporar un campo de observaciones para justificar una aprobación o rechazo.
- Actualizar el estado de la factura con el resultado.
Alcance real de la sesión
Esta integración fue explicada conceptualmente, pero no se creó el flujo de Power Automate. Su implementación quedó pendiente para la siguiente clase. [Sesion 06…wer Innova | Word]
Tema 2. Introducción al consumo de servicios externos mediante API
Objetivo
Comprender cómo Power Apps puede integrarse con sistemas que no forman parte directamente de Microsoft Power Platform.
Conceptos principales
Una API permite que una aplicación consulte o envíe información a otro sistema mediante una dirección web.
El instructor explicó un escenario conceptual en el que:
- El usuario ingresa un número de identificación.
- La aplicación envía el valor a un servicio externo.
- El servicio procesa la solicitud.
- La API devuelve información asociada.
- Power Apps muestra la respuesta en un formulario o pantalla.
También se indicó que algunas API requieren:
- Usuario y contraseña.
- Claves o tokens de autenticación.
- Parámetros de entrada.
- Una dirección URL específica.
- Métodos para consultar o enviar información.
Aplicación práctica
El ejemplo se presentó como introducción. No se construyó el conector personalizado ni se consumió la API desde Power Apps durante la sesión. [Sesion 06…wer Innova | Word]
Recomendaciones
- No colocar credenciales sensibles directamente en una fórmula de Power Apps.
- Revisar la documentación oficial del proveedor.
- Utilizar conectores personalizados o Power Automate cuando sea necesario controlar autenticación y respuestas.
- Validar el formato de los datos devueltos.
- Implementar controles de error y disponibilidad.
Tema 3. Comparación entre SharePoint y Dataverse
Objetivo
Identificar cuándo utilizar listas de SharePoint y cuándo emplear Dataverse.
| Criterio | SharePoint | Dataverse |
|---|---|---|
| Uso principal | Aplicaciones sencillas y departamentales | Aplicaciones empresariales y procesos estructurados |
| Estructura | Listas y columnas | Tablas, relaciones, reglas y metadatos |
| Relaciones | Mediante columnas de búsqueda | Relaciones uno a muchos, muchos a uno y muchos a muchos |
| Configuración | Relativamente sencilla | Requiere mayor análisis del modelo de datos |
| Escenarios mencionados | Inventarios simples, contactos y encuestas | CRM, ERP, facturación y aplicaciones empresariales |
| Seguridad | Permisos sobre sitios, listas y elementos | Roles de seguridad, privilegios y propiedad de registros |
| Auditoría | Columnas automáticas de creación y modificación | Columnas del sistema y mecanismos de auditoría |
| Escalabilidad lógica | Apropiada para soluciones simples | Diseñada para modelos empresariales relacionados |
El instructor destacó que SharePoint se parece visualmente a una tabla de Excel, mientras que Dataverse requiere una estructura más cercana a un modelo de base de datos relacional. [Sesion 06…wer Innova | Word]
Microsoft señala que las tablas de Dataverse se utilizan para modelar y administrar datos empresariales. Estas pueden ser estándar, personalizadas o una combinación de ambas. [learn.microsoft.com], [learn.microsoft.com]
Observación importante
La elección no debe basarse únicamente en cuál herramienta parece más fácil. También se deben considerar:
- Volumen de datos.
- Complejidad de las relaciones.
- Seguridad.
- Auditoría.
- Integraciones.
- Reglas de negocio.
- Licenciamiento.
- Mantenimiento futuro.
Tema 4. Entornos y habilitación de Dataverse
Objetivo
Comprobar que el entorno seleccionado dispone de una base de datos de Dataverse.
Procedimiento demostrado
- Ingresar en Power Apps.
- Verificar el entorno activo.
- Acceder a la sección Tablas.
- Comprobar si el entorno tiene Dataverse habilitado.
- Si no está habilitado, abrir el Centro de administración de Power Platform.
- Ingresar a la administración de entornos.
- Seleccionar el entorno correspondiente.
- Ejecutar la opción para agregar o habilitar Dataverse.
- Configurar, cuando se solicite:
- Idioma.
- Moneda.
- Base de datos.
- Esperar a que finalice el aprovisionamiento.
El instructor mostró que la configuración puede tardar algunos minutos y que, en ciertos casos, puede ser necesario cerrar y volver a iniciar sesión. [Sesion 06…wer Innova | Word]
Para crear o editar tablas se necesita un entorno que tenga Dataverse, además de permisos adecuados, como los privilegios correspondientes para crear, leer y escribir en tablas. [learn.microsoft.com]
Buenas prácticas
- Verificar siempre el entorno antes de crear tablas o aplicaciones.
- Evitar crear componentes en el entorno predeterminado sin una estrategia.
- Utilizar entornos separados para desarrollo, pruebas y producción.
- Confirmar las licencias y los permisos.
- Esperar a que el aprovisionamiento concluya antes de repetir la operación.
Tema 5. Revisión de la suscripción académica
Objetivo
Evitar la renovación automática de una licencia temporal utilizada durante el curso.
El instructor mostró la diferencia entre:
- Cancelar inmediatamente, lo que desactiva el servicio en ese momento.
- Cancelar al finalizar el periodo, lo que permite continuar utilizando el servicio hasta la fecha de expiración.
Para no interrumpir las clases restantes, se eligió mantener la licencia activa hasta el final del periodo académico y evitar la renovación posterior. [Sesion 06…wer Innova | Word]
Recomendación
Antes de cancelar una suscripción:
- Revisar la fecha final del servicio.
- Identificar qué aplicaciones dependen de la licencia.
- Exportar o respaldar los componentes necesarios.
- Evitar cancelaciones inmediatas si el entorno sigue siendo utilizado.
- Confirmar el impacto sobre Power Apps, Power Automate, Dataverse y SharePoint.
Tema 6. Modelo de datos de la aplicación de facturación
Objetivo
Diseñar una estructura relacional que permita guardar una factura y sus productos.
Se definieron cuatro tablas:
- Cliente
- Producto
- Factura
- Factura Detalle
Diagrama lógico
Cliente 1 ─────── N Factura
Factura 1 ─────── N Factura Detalle
Producto 1 ────── N Factura Detalle
Interpretación
- Un cliente puede tener muchas facturas.
- Cada factura pertenece a un cliente.
- Una factura puede contener muchos detalles.
- Cada detalle pertenece a una factura.
- Un producto puede aparecer en muchos detalles.
- Cada detalle hace referencia a un producto.
Microsoft explica que una columna de búsqueda crea una relación entre tablas. En una relación uno a varios, varias filas secundarias pueden asociarse con una sola fila principal. [learn.microsoft.com], [learn.microsoft.com]
Tema 7. Creación de la tabla Cliente
Objetivo
Almacenar la información de las personas o empresas asociadas con los comprobantes.
Columnas creadas
| Columna | Tipo de dato | Finalidad |
|---|---|---|
| Nombres | Texto | Nombre completo del cliente |
| TipoDocumento | Elección | Seleccionar DNI o RUC |
| NumeroDocumento | Texto | Guardar el identificador |
| Correo | Texto | Registrar el correo electrónico |
| Telefono | Texto | Registrar el número telefónico |
| Direccion | Texto | Guardar la dirección |
Decisiones técnicas explicadas
Número de documento como texto
El número de documento se configuró como texto porque algunos identificadores pueden comenzar con cero. Si se utilizara un campo numérico, el cero inicial podría eliminarse.
Tipo de documento como elección
La columna se configuró con alternativas previamente definidas:
- DNI.
- RUC.
Datos de prueba
Se registraron dos clientes de ejemplo para utilizarlos posteriormente en la aplicación. [Sesion 06…wer Innova | Word]
Tema 8. Convenciones para columnas
Objetivo
Evitar problemas al utilizar nombres de campos en Power Fx.
El instructor recomendó:
- Evitar espacios en los nombres de las columnas.
- Evitar tildes.
- No utilizar caracteres especiales.
- Elegir nombres breves y descriptivos.
- Utilizar una sola palabra o emplear guion bajo.
Ejemplos
TipoDocumentoNumeroDocumentoPrecioUnitarioFacturaDetalle
Mejora recomendada
En Dataverse conviene distinguir entre:
- Nombre para mostrar: texto visible para el usuario, por ejemplo, “Número de documento”.
- Nombre lógico o de esquema: identificador técnico empleado en integraciones y desarrollo.
No es obligatorio eliminar todos los espacios del nombre para mostrar. Sin embargo, una convención técnica uniforme facilita el mantenimiento y reduce confusiones.
Tema 9. Creación de la tabla Producto
Objetivo
Almacenar los productos disponibles para incorporarlos a una factura.
Columnas creadas
| Columna | Tipo de dato | Finalidad |
|---|---|---|
| NombreProducto | Texto | Nombre comercial del producto |
| Precio | Número decimal | Precio unitario |
Durante la sesión no se agregó el stock porque el ejercicio se concentró en el registro de facturas.
Datos de prueba
Se incorporaron productos como:
- Laptop.
- Monitor.
- Teclado.
- Mouse.
Los precios se utilizaron únicamente para probar la selección, los cálculos y la colección temporal. [Sesion 06…wer Innova | Word]
Recomendación técnica
Para importes monetarios reales, conviene evaluar el tipo de columna Moneda en lugar de un decimal genérico. Esto facilita el tratamiento consistente de valores monetarios y monedas organizacionales.
Tema 10. Creación de la tabla Factura
Objetivo
Almacenar la información general o cabecera del comprobante.
Columnas principales
| Columna | Tipo de dato | Finalidad |
|---|---|---|
| Cliente | Búsqueda | Relacionar la factura con un cliente |
| Subtotal | Decimal | Importe antes del impuesto |
| IGV | Decimal | Importe del impuesto |
| Total | Decimal | Importe final |
Dataverse genera adicionalmente columnas del sistema para:
- Identificador único.
- Fecha de creación.
- Usuario creador.
- Fecha de modificación.
- Propietario del registro.
La columna Cliente se configuró como búsqueda hacia la tabla Cliente, creando la relación correspondiente. [Sesion 06…wer Innova | Word]
Tema 11. Creación de la tabla Factura Detalle
Objetivo
Registrar cada producto incluido en una factura.
Columnas principales
| Columna | Tipo de dato | Finalidad |
|---|---|---|
| Factura | Búsqueda | Relacionar el detalle con su factura |
| Producto | Búsqueda | Relacionar el detalle con el producto |
| Cantidad | Número entero | Registrar las unidades |
| PrecioUnitario | Decimal | Guardar el precio aplicado |
| Total | Decimal | Guardar el importe de la línea |
La tabla constituye el lado “muchos” de las relaciones con Factura y Producto. [Sesion 06…wer Innova | Word]
Buena práctica
Guardar el precio unitario en el detalle permite conservar el valor aplicado en el momento de la venta, aunque posteriormente cambie el precio maestro del producto.
Tema 12. Relaciones e integridad de datos
Objetivo
Comprender cómo las relaciones mantienen consistencia entre las tablas.
La relación evita almacenar datos aislados sin contexto. Por ejemplo:
- Una factura debe estar asociada con un cliente.
- Un detalle debe pertenecer a una factura.
- Un detalle debe identificar el producto vendido.
El instructor relacionó este comportamiento con el concepto de integridad de datos, señalando que Excel puede utilizarse como almacenamiento, pero no ofrece de forma equivalente la estructura relacional de Dataverse. [Sesion 06…wer Innova | Word]
Tipos de relaciones explicados
- Uno a muchos, 1:N
- Muchos a uno, N:1
- Muchos a muchos, N:N, mencionado como posibilidad
Una relación muchos a uno es la perspectiva inversa de una relación uno a muchos. Agregar una columna de búsqueda constituye la forma más directa de establecer este tipo de relación. [learn.microsoft.com], [learn.microsoft.com]
Tema 13. Columnas automáticas y auditoría
Objetivo
Reconocer la información administrativa que Dataverse crea automáticamente.
Se revisaron columnas como:
- Fecha de creación.
- Creado por.
- Modificado por.
- Propietario.
- Identificador único.
Estas columnas permiten conocer:
- Quién creó un registro.
- Cuándo se creó.
- Quién lo modificó.
- A quién pertenece.
- Cuál es su identificador único.
Recomendación
No crear manualmente columnas que dupliquen información del sistema, salvo que exista una necesidad funcional diferente.
Tema 14. Conexión de la aplicación con Dataverse
Objetivo
Incorporar las tablas creadas como orígenes de datos de una aplicación Canvas.
Procedimiento
- Abrir la aplicación existente.
- Verificar que la aplicación está en el mismo entorno que las tablas.
- Entrar en el panel Datos.
- Seleccionar Agregar datos.
- Buscar las tablas personalizadas.
- Agregar:
- Cliente.
- Producto.
- Factura.
- Factura Detalle.
- Confirmar que aparecen en el panel de datos.
La conexión fue directa porque la aplicación y las tablas se encontraban en el mismo entorno. [Sesion 06…wer Innova | Word]
Buena práctica
Comprobar el entorno antes de empezar. Una de las causas más frecuentes de que una tabla no aparezca es que fue creada en un entorno diferente.
Tema 15. Construcción de la pantalla de facturación
Objetivo
Crear una pantalla funcional para seleccionar un cliente y añadir productos.
La pantalla se organizó en dos grandes secciones:
Cabecera
- Título de facturación.
- Selector de cliente.
- Documento.
- Correo.
- Dirección.
Detalle
- Selector de producto.
- Precio unitario.
- Cantidad.
- Botón Agregar.
- Tabla de productos seleccionados.
- Botón Eliminar.
- Botón Guardar.
Se utilizaron principalmente:
- Contenedores verticales.
- Contenedores horizontales.
- Cuadros combinados.
- Controles de entrada de texto.
- Etiquetas.
- Iconos.
- Botones.
- Tabla de datos.
El diseño se enfocó en la funcionalidad. El refinamiento visual quedó como una mejora posterior. [Sesion 06…wer Innova | Word]
Tema 16. Selección del cliente y recuperación de información
Objetivo
Mostrar automáticamente los datos del cliente seleccionado.
Se configuró un cuadro combinado conectado con la tabla Cliente. Después se desactivó la selección múltiple para permitir un solo cliente.
Fórmulas conceptuales
lstCliente.Selected.Nombres
Para mostrar el tipo y número de documento:
lstCliente.Selected.TipoDocumento.Value
& » – » &
lstCliente.Selected.NumeroDocumento
Para mostrar el correo:
lstCliente.Selected.Correo
Para mostrar la dirección:
lstCliente.Selected.Direccion
Los controles utilizados para presentar esta información se configuraron en modo de solo lectura o visualización. [Sesion 06…wer Innova | Word]
Buena práctica
Cuando un campo solo presenta información procedente de otro control, conviene usar una etiqueta o configurar la entrada como no editable. Esto evita que el usuario crea que puede modificar el dato maestro desde la factura.
Tema 17. Selección del producto y precio unitario
Objetivo
Recuperar automáticamente el precio del producto seleccionado.
El cuadro combinado de productos se conectó con la tabla Producto. Se configuró para:
- Mostrar el nombre del producto.
- Permitir una única selección.
- Mantener disponible la búsqueda.
Fórmula principal
lstProducto.Selected.Precio
El precio unitario se configuró como solo lectura para que el usuario no lo modificara accidentalmente. [Sesion 06…wer Innova | Word]
Tema 18. Colección temporal para los productos
Objetivo
Guardar temporalmente los productos antes de registrar la factura en Dataverse.
El instructor explicó que los productos no debían guardarse inmediatamente en la tabla Factura Detalle. Primero se incorporaron a una colección local.
Estructura conceptual
Collect(
colDetalleProductos;
{
Producto: lstProducto.Selected.NombreProducto;
RegistroProducto: lstProducto.Selected;
Precio: lstProducto.Selected.Precio;
Cantidad: Value(txtCantidad.Text);
Subtotal:
lstProducto.Selected.Precio *
Value(txtCantidad.Text)
}
)
Los nombres exactos pueden variar de acuerdo con los controles y columnas creados.
Conversión mediante Value
El contenido de un control de entrada suele tratarse como texto. Por eso se utilizó Value para convertir la cantidad:
Value(txtCantidad.Text)
Cálculo por línea
lstProducto.Selected.Precio *
Value(txtCantidad.Text)
La colección funcionó como un carrito de compra temporal. [Sesion 06…wer Innova | Word]
Tema 19. Visualización del detalle temporal
Objetivo
Mostrar en una tabla los productos agregados a la factura.
La propiedad Items de la tabla se vinculó con la colección:
colDetalleProductos
Después se agregaron las columnas visibles:
- Producto.
- Precio.
- Cantidad.
- Subtotal.
Inicialmente no se mostraba el nombre porque se había almacenado el registro completo del producto. La fórmula se corrigió para recuperar específicamente NombreProducto. [Sesion 06…wer Innova | Word]
Recomendación
Una colección puede guardar tanto:
- Valores simples.
- Registros completos.
Guardar el registro completo del producto resulta útil para conservar su identificador de Dataverse al registrar posteriormente los detalles.
Tema 20. Limpieza de controles
Objetivo
Preparar la sección de productos para capturar una nueva línea.
Después de agregar un producto, se aplicó Reset sobre:
- Selector de producto.
- Precio unitario.
- Cantidad.
Ejemplo
Collect(
colDetalleProductos;
{
Producto: lstProducto.Selected.NombreProducto;
RegistroProducto: lstProducto.Selected;
Precio: lstProducto.Selected.Precio;
Cantidad: Value(txtCantidad.Text);
Subtotal:
lstProducto.Selected.Precio *
Value(txtCantidad.Text)
}
);;
Reset(lstProducto);;
Reset(txtPrecioUnitario);;
Reset(txtCantidad)
El uso de ;; corresponde a entornos donde el punto y coma se utiliza para separar argumentos y el doble punto y coma separa acciones consecutivas.
Tema 21. Eliminación de productos
Objetivo
Eliminar de la colección el producto seleccionado.
Se agregó un botón con un icono de eliminación y se utilizó Remove.
Remove(
colDetalleProductos;
tblDetalle.Selected
)
Funcionamiento
- El usuario selecciona una fila.
- Presiona el botón Eliminar.
Removeidentifica la colección.- El registro seleccionado se elimina.
- La tabla se actualiza automáticamente.
Mejora recomendada
Deshabilitar el botón cuando no exista una fila seleccionada:
If(
IsBlank(tblDetalle.Selected);
DisplayMode.Disabled;
DisplayMode.Edit
)
Tema 22. Registro de la cabecera mediante Patch
Objetivo
Crear una fila nueva en la tabla Factura.
La estructura explicada fue:
Patch(
Facturas;
Defaults(Facturas);
{
Cliente: lstCliente.Selected;
Subtotal: Sum(colDetalleProductos; Subtotal);
IGV: Sum(colDetalleProductos; Subtotal) * 0.18;
Total:
Sum(colDetalleProductos; Subtotal) +
Sum(colDetalleProductos; Subtotal) * 0.18
}
)
Parámetros principales
- Origen: tabla Factura.
- Registro base:
Defaults(Facturas)para crear una fila nueva. - Cambios: cliente, subtotal, IGV y total.
Función Sum
El subtotal general se calculó sumando la columna Subtotal de la colección:
Sum(colDetalleProductos; Subtotal)
Cálculo del IGV
Sum(colDetalleProductos; Subtotal) * 0.18
Cálculo del total
Sum(colDetalleProductos; Subtotal) * 1.18
El instructor aclaró que el cálculo depende de si los precios ya incluyen o no el impuesto. Para el ejercicio se asumió que los precios no incluían IGV. [Sesion 06…wer Innova | Word]
Tema 23. Validación de los cálculos
Durante la demostración se utilizó un subtotal aproximado de 170.
El cálculo correcto con un IGV del 18 % sería:
Subtotal: 170.00
IGV: 30.60
Total: 200.60
En la explicación oral se mencionó un resultado total diferente. Ese valor debe considerarse un error verbal o de transcripción. La fórmula presentada sí corresponde a sumar el subtotal más el 18 %.
Recomendación
Evitar repetir varias veces la misma expresión y almacenar el subtotal en una variable:
With(
{
varSubtotal: Sum(colDetalleProductos; Subtotal)
};
Patch(
Facturas;
Defaults(Facturas);
{
Cliente: lstCliente.Selected;
Subtotal: varSubtotal;
IGV: varSubtotal * 0.18;
Total: varSubtotal * 1.18
}
)
)
Tema 24. Captura del registro creado
Objetivo
Conservar la factura recién creada para relacionarla con sus detalles.
Patch devuelve el registro creado. El resultado se almacenó en una variable mediante Set.
Set(
varFacturaCreada;
Patch(
Facturas;
Defaults(Facturas);
{
Cliente: lstCliente.Selected;
Subtotal: Sum(colDetalleProductos; Subtotal);
IGV: Sum(colDetalleProductos; Subtotal) * 0.18;
Total: Sum(colDetalleProductos; Subtotal) * 1.18
}
)
)
Importancia
La variable contiene el registro completo, incluido su identificador de Dataverse. Este valor será necesario para guardar cada fila en Factura Detalle y relacionarla con la cabecera. [Sesion 06…wer Innova | Word]
Tema 25. Notificación de registro
Objetivo
Comunicar al usuario que la factura se guardó.
Notify(
«Factura registrada»;
NotificationType.Success;
2000
)
Mejora recomendada
No mostrar una notificación de éxito si previamente no se validaron:
- Cliente seleccionado.
- Existencia de productos.
- Cantidades mayores que cero.
- Respuesta correcta de Dataverse.
- Errores generados por
Patch.
Una implementación más segura puede utilizar IfError.
IfError(
Set(
varFacturaCreada;
Patch(
Facturas;
Defaults(Facturas);
{
Cliente: lstCliente.Selected;
Subtotal: Sum(colDetalleProductos; Subtotal);
IGV: Sum(colDetalleProductos; Subtotal) * 0.18;
Total: Sum(colDetalleProductos; Subtotal) * 1.18
}
)
);
Notify(
«No se pudo registrar la factura»;
NotificationType.Error
);
Notify(
«Factura registrada correctamente»;
NotificationType.Success
)
)
🔑 Conceptos clave
| Concepto | Descripción | Importancia |
|---|---|---|
| Dataverse | Plataforma de datos empresariales de Microsoft Power Platform. | Permite utilizar tablas, relaciones, seguridad y lógica empresarial. |
| Entorno | Espacio donde se almacenan aplicaciones, flujos, conexiones y Dataverse. | Determina dónde están disponibles los componentes. |
| Tabla | Estructura que almacena filas y columnas empresariales. | Representa clientes, productos, facturas y detalles. |
| Columna | Atributo que define un dato dentro de una tabla. | Establece el tipo y las reglas de la información. |
| Elección | Columna con alternativas predefinidas. | Se utilizó para seleccionar DNI o RUC. |
| Búsqueda | Columna que relaciona una tabla con otra. | Vincula factura con cliente y detalle con factura y producto. |
| Relación 1:N | Una fila principal se relaciona con varias filas secundarias. | Es la base del modelo cabecera-detalle. |
| Integridad de datos | Mantenimiento de relaciones y valores consistentes. | Reduce registros sin contexto o referencias inválidas. |
| Identificador único | Valor generado automáticamente para cada fila. | Permite identificar y relacionar registros. |
| Auditoría | Información sobre creación, modificación y propiedad. | Facilita trazabilidad y control. |
| Cuadro combinado | Control que permite seleccionar elementos de una tabla. | Se utilizó para elegir clientes y productos. |
| Selected | Registro actualmente seleccionado en un control. | Permite recuperar columnas del cliente o producto. |
| Colección | Tabla temporal almacenada en memoria dentro de la aplicación. | Funcionó como detalle provisional de la factura. |
| Collect | Agrega un registro a una colección. | Incorporó productos al carrito temporal. |
| Value | Convierte un texto en número. | Permitió calcular cantidad por precio. |
| Reset | Restablece el valor de un control. | Limpió los controles después de agregar un producto. |
| Remove | Elimina un registro de una fuente o colección. | Permitió retirar productos seleccionados. |
| Sum | Suma los valores de una columna o expresión. | Calculó el subtotal de la factura. |
| Patch | Crea o actualiza registros. | Guardó la cabecera en Dataverse. |
| Defaults | Devuelve valores predeterminados para crear un registro. | Indicó a Patch que debía crear una factura nueva. |
| Set | Crea o modifica una variable global. | Capturó la factura generada. |
| Notify | Muestra un mensaje en la aplicación. | Comunicó el resultado de la operación. |
| Power Automate | Servicio para crear procesos automatizados. | Se utilizará posteriormente para notificaciones y aprobaciones. |
| API | Interfaz para intercambiar información con otro sistema. | Permite integrar Power Apps con servicios externos. |
Los conceptos enumerados fueron explicados o utilizados durante la sesión. [Sesion 06…wer Innova | Word]
❓ Preguntas y respuestas destacadas
| Pregunta consolidada | Respuesta del instructor | Recomendación basada en Microsoft Learn |
|---|---|---|
| ¿Cómo se obtiene el precio del producto seleccionado? | Utilizando el control, la propiedad Selected y la columna Precio. | Usar una selección única y comprobar que exista un registro antes de recuperar columnas. |
| ¿Por qué el número de documento debe guardarse como texto? | Para conservar ceros iniciales y evitar operaciones matemáticas innecesarias. | Tratar como texto los identificadores que no representan cantidades. |
| ¿Cómo se relacionan las tablas de Dataverse? | Mediante columnas de búsqueda y relaciones uno a muchos. | Crear la relación desde la columna de búsqueda o el área Relaciones. [learn.microsoft.com], [learn.microsoft.com] |
| ¿Por qué Factura necesita una relación con Cliente? | Porque cada factura pertenece a un cliente y un cliente puede tener muchas facturas. | Modelar la relación según las reglas reales del negocio. |
| ¿Por qué Factura Detalle debe relacionarse con Factura? | Para determinar a qué comprobante pertenece cada producto. | Hacer obligatoria la búsqueda cuando ningún detalle pueda existir sin cabecera. |
| ¿Cómo se guardan los productos temporalmente? | Mediante una colección creada con Collect. | Guardar también el registro o identificador del producto para persistirlo posteriormente. |
| ¿Cómo se convierte la cantidad ingresada en número? | Aplicando Value sobre el texto del control. | Validar que la cantidad sea numérica, positiva y no esté vacía. |
| ¿Cómo se elimina una fila de la colección? | Con Remove, indicando la colección y la fila seleccionada. | Deshabilitar el botón si no hay selección. |
| ¿Cómo se calcula el subtotal general? | Con Sum sobre la columna Subtotal de la colección. | Centralizar el cálculo para no repetir expresiones. |
| ¿Cómo se crea una factura nueva? | Con Patch, Defaults y un registro que contenga los valores. | Capturar el resultado de Patch para obtener el identificador de la fila creada. |
| ¿Cómo se guardará el detalle? | Se utilizará la factura capturada y se recorrerá la colección para crear las líneas. | Utilizar ForAll con Patch y controlar errores parciales. |
| ¿La sesión llegó a implementar Power Automate? | No. La pantalla desarrollada correspondió a la culminación del ejercicio de facturación previo. | Separar claramente la persistencia en Dataverse de la automatización posterior. |
🛠 Casos prácticos y demostraciones
Escenario 1. Habilitación de Dataverse
Objetivo
Preparar un entorno para crear tablas empresariales.
Herramientas utilizadas
- Power Apps.
- Centro de administración de Power Platform.
- Entornos.
- Dataverse.
Resultado esperado
Disponer de un entorno con base de datos de Dataverse y acceso a la sección Tablas.
Escenario 2. Modelo relacional de facturación
Objetivo
Diseñar el modelo de datos antes de construir la interfaz.
Tablas creadas
- Cliente.
- Producto.
- Factura.
- Factura Detalle.
Relaciones
- Cliente 1:N Factura.
- Factura 1:N Factura Detalle.
- Producto 1:N Factura Detalle.
Resultado esperado
Contar con una estructura consistente para almacenar cabeceras y detalles. [learn.microsoft.com], [learn.microsoft.com]
Escenario 3. Selección de cliente
Objetivo
Elegir un cliente y mostrar sus datos automáticamente.
Fuente
Tabla Cliente de Dataverse.
Componentes
- Cuadro combinado.
- Entradas de texto en modo visualización.
- Contenedores.
Fórmulas
lstCliente.Selected.NumeroDocumento
lstCliente.Selected.Correo
lstCliente.Selected.Direccion
Resultado esperado
Cambiar el cliente y actualizar documento, correo y dirección.
Escenario 4. Carrito temporal de productos
Objetivo
Preparar los productos de la factura antes de guardarlos.
Fuente
- Tabla Producto.
- Colección local.
Componentes
- Cuadro combinado.
- Precio unitario.
- Cantidad.
- Botón Agregar.
- Tabla de detalle.
Fórmulas principales
Collect(
colDetalleProductos;
{
Producto: lstProducto.Selected.NombreProducto;
RegistroProducto: lstProducto.Selected;
Precio: lstProducto.Selected.Precio;
Cantidad: Value(txtCantidad.Text);
Subtotal:
lstProducto.Selected.Precio *
Value(txtCantidad.Text)
}
)
Remove(
colDetalleProductos;
tblDetalle.Selected
)
Resultado esperado
Agregar varios productos, calcular cada importe y eliminar líneas seleccionadas.
Escenario 5. Registro de la factura
Objetivo
Guardar la cabecera de la factura en Dataverse.
Fuente
Tabla Factura.
Fórmulas
Set(
varFacturaCreada;
Patch(
Facturas;
Defaults(Facturas);
{
Cliente: lstCliente.Selected;
Subtotal: Sum(colDetalleProductos; Subtotal);
IGV: Sum(colDetalleProductos; Subtotal) * 0.18;
Total: Sum(colDetalleProductos; Subtotal) * 1.18
}
)
)
Notify(
«Factura registrada»;
NotificationType.Success;
2000
)
Resultado esperado
Crear una factura, calcular sus importes y conservar el registro generado.
Pendiente
- Guardar Factura Detalle.
- Validar campos.
- Limpiar la pantalla.
- Ejecutar el flujo de Power Automate.
- Implementar aprobación y rechazo.
✅ Buenas prácticas recomendadas
Modelado de datos
- Diseñar las tablas antes de construir la aplicación.
- Separar cabecera y detalle.
- Utilizar relaciones en lugar de duplicar datos.
- Elegir correctamente los tipos de columna.
- Tratar códigos e identificadores comerciales como texto.
- Utilizar columnas de búsqueda para referencias.
- Evaluar columnas de moneda para importes financieros.
- Hacer obligatorias las relaciones esenciales.
Entornos
- Verificar siempre el entorno activo.
- No desarrollar directamente en producción.
- Separar desarrollo, pruebas y producción.
- Crear tablas y aplicaciones dentro de soluciones.
- Confirmar que Dataverse está aprovisionado.
- Revisar roles y privilegios.
Convenciones de nombres
- Utilizar nombres técnicos descriptivos.
- Evitar acentos y caracteres especiales en nombres de esquema.
- Asignar prefijos coherentes a controles:
cmbpara cuadros combinados.txtpara entradas.btnpara botones.tblogalpara tablas y galerías.colpara colecciones.varpara variables globales.
- Evitar nombres genéricos como
ComboBox1oTextInput2.
Colecciones
- Utilizarlas como almacenamiento temporal, no como base de datos permanente.
- Guardar identificadores o registros completos cuando se necesitarán relaciones.
- Limpiar la colección al iniciar una factura nueva.
- Validar duplicados antes de agregar.
- Evitar cantidades vacías, negativas o iguales a cero.
Fórmulas
- Convertir entradas numéricas con
Value. - Utilizar
Withpara evitar repetir cálculos. - Capturar el resultado de
Patch. - Implementar
IfError. - Mostrar éxito solo cuando se confirme el guardado.
- Separar validación, persistencia y notificación.
- Mantener fórmulas legibles.
Experiencia de usuario
- Configurar como solo lectura los datos derivados.
- Mantener búsqueda en listas extensas.
- Deshabilitar botones cuando no puedan ejecutarse.
- Mostrar mensajes claros.
- Confirmar antes de eliminar líneas.
- Resaltar subtotal, impuesto y total.
- Limpiar la pantalla después de completar correctamente el proceso.
Seguridad
- No depender solamente de controles ocultos.
- Configurar roles de seguridad en Dataverse.
- Aplicar privilegios mínimos necesarios.
- No exponer credenciales de API en la aplicación.
- Revisar la propiedad y auditoría de los registros.
- Controlar quién puede leer, crear, editar y eliminar facturas.
📝 Conclusiones
- Dataverse permite estructurar información empresarial mediante tablas y relaciones, ofreciendo mayores capacidades que una lista aislada.
- El modelo cabecera-detalle es fundamental para una aplicación de facturación, porque una factura puede contener múltiples productos.
- Las columnas de búsqueda permiten mantener las relaciones entre clientes, facturas, productos y detalles, evitando duplicación innecesaria.
- Las colecciones son apropiadas para preparar información temporalmente, como un carrito de compra, antes de guardarla.
Selectedpermite recuperar información del registro elegido en cuadros combinados y otros controles de selección.Patchpuede crear registros directamente en Dataverse, mientras queDefaultsindica que se desea generar una fila nueva.- El resultado de
Patchdebe capturarse cuando se necesita relacionar registros posteriores, como los detalles con la factura recién creada. - Los cálculos financieros deben centralizarse y validarse, especialmente subtotal, IGV y total.
- La seguridad real debe implementarse en Dataverse, no solo ocultando controles o campos dentro de Power Apps.
- La integración con Power Automate quedó pendiente, pero el modelo de datos y la cabecera de la factura quedaron preparados para continuar con el guardado del detalle, las notificaciones y las aprobaciones.
📖 Referencias oficiales de Microsoft
Microsoft Dataverse
- Documentación de Microsoft Dataverse
Portal oficial para tablas, columnas, relaciones, seguridad, lógica de negocio e integración. [learn.microsoft.com] - Tablas en Microsoft Dataverse
Explica el uso de tablas estándar y personalizadas para modelar información empresarial. [learn.microsoft.com] - Crear y editar tablas con Power Apps
Describe requisitos, permisos, creación de tablas y administración desde Power Apps. [learn.microsoft.com]
Relaciones entre tablas
- Acerca de las relaciones de tabla para Microsoft Dataverse
Explica relaciones uno a varios, varios a uno y varios a varios. [learn.microsoft.com] - Creación de una relación entre tablas mediante una columna de búsqueda
Describe cómo crear relaciones y columnas de búsqueda. [learn.microsoft.com] - Crear y editar relaciones uno a muchos o muchos a uno
Presenta el procedimiento para administrar relaciones desde Power Apps. [learn.microsoft.com]

