Novedades Power Platform

Para la Transformación Digital e Innovación Tecnológica

Novedades Power Platform

Para la Transformación Digital e Innovación Tecnológica

Power AppsPower Platform

Power Apps #12 – Sesión 06 – Resumen


Indice de Contenido

🎯 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:

  1. El usuario registra una factura desde Power Apps.
  2. Los datos se guardan en tablas de Dataverse.
  3. Power Apps llama a un flujo de Power Automate.
  4. El flujo ejecuta las acciones configuradas.
  5. Se envía una notificación por correo electrónico.
  6. El destinatario puede aprobar o rechazar el comprobante.
  7. Power Automate continúa después de recibir la respuesta.
  8. 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.

CriterioSharePointDataverse
Uso principalAplicaciones sencillas y departamentalesAplicaciones empresariales y procesos estructurados
EstructuraListas y columnasTablas, relaciones, reglas y metadatos
RelacionesMediante columnas de búsquedaRelaciones uno a muchos, muchos a uno y muchos a muchos
ConfiguraciónRelativamente sencillaRequiere mayor análisis del modelo de datos
Escenarios mencionadosInventarios simples, contactos y encuestasCRM, ERP, facturación y aplicaciones empresariales
SeguridadPermisos sobre sitios, listas y elementosRoles de seguridad, privilegios y propiedad de registros
AuditoríaColumnas automáticas de creación y modificaciónColumnas del sistema y mecanismos de auditoría
Escalabilidad lógicaApropiada para soluciones simplesDiseñ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

  1. Ingresar en Power Apps.
  2. Verificar el entorno activo.
  3. Acceder a la sección Tablas.
  4. Comprobar si el entorno tiene Dataverse habilitado.
  5. Si no está habilitado, abrir el Centro de administración de Power Platform.
  6. Ingresar a la administración de entornos.
  7. Seleccionar el entorno correspondiente.
  8. Ejecutar la opción para agregar o habilitar Dataverse.
  9. Configurar, cuando se solicite:
    • Idioma.
    • Moneda.
    • Base de datos.
  10. 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:

  1. Cliente
  2. Producto
  3. Factura
  4. 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

ColumnaTipo de datoFinalidad
NombresTextoNombre completo del cliente
TipoDocumentoElecciónSeleccionar DNI o RUC
NumeroDocumentoTextoGuardar el identificador
CorreoTextoRegistrar el correo electrónico
TelefonoTextoRegistrar el número telefónico
DireccionTextoGuardar 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

  • TipoDocumento
  • NumeroDocumento
  • PrecioUnitario
  • FacturaDetalle

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

ColumnaTipo de datoFinalidad
NombreProductoTextoNombre comercial del producto
PrecioNúmero decimalPrecio 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

ColumnaTipo de datoFinalidad
ClienteBúsquedaRelacionar la factura con un cliente
SubtotalDecimalImporte antes del impuesto
IGVDecimalImporte del impuesto
TotalDecimalImporte 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

ColumnaTipo de datoFinalidad
FacturaBúsquedaRelacionar el detalle con su factura
ProductoBúsquedaRelacionar el detalle con el producto
CantidadNúmero enteroRegistrar las unidades
PrecioUnitarioDecimalGuardar el precio aplicado
TotalDecimalGuardar 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

  1. Abrir la aplicación existente.
  2. Verificar que la aplicación está en el mismo entorno que las tablas.
  3. Entrar en el panel Datos.
  4. Seleccionar Agregar datos.
  5. Buscar las tablas personalizadas.
  6. Agregar:
    • Cliente.
    • Producto.
    • Factura.
    • Factura Detalle.
  7. 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

  1. El usuario selecciona una fila.
  2. Presiona el botón Eliminar.
  3. Remove identifica la colección.
  4. El registro seleccionado se elimina.
  5. 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

  1. Origen: tabla Factura.
  2. Registro base: Defaults(Facturas) para crear una fila nueva.
  3. 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

ConceptoDescripciónImportancia
DataversePlataforma de datos empresariales de Microsoft Power Platform.Permite utilizar tablas, relaciones, seguridad y lógica empresarial.
EntornoEspacio donde se almacenan aplicaciones, flujos, conexiones y Dataverse.Determina dónde están disponibles los componentes.
TablaEstructura que almacena filas y columnas empresariales.Representa clientes, productos, facturas y detalles.
ColumnaAtributo que define un dato dentro de una tabla.Establece el tipo y las reglas de la información.
ElecciónColumna con alternativas predefinidas.Se utilizó para seleccionar DNI o RUC.
BúsquedaColumna que relaciona una tabla con otra.Vincula factura con cliente y detalle con factura y producto.
Relación 1:NUna fila principal se relaciona con varias filas secundarias.Es la base del modelo cabecera-detalle.
Integridad de datosMantenimiento de relaciones y valores consistentes.Reduce registros sin contexto o referencias inválidas.
Identificador únicoValor generado automáticamente para cada fila.Permite identificar y relacionar registros.
AuditoríaInformación sobre creación, modificación y propiedad.Facilita trazabilidad y control.
Cuadro combinadoControl que permite seleccionar elementos de una tabla.Se utilizó para elegir clientes y productos.
SelectedRegistro actualmente seleccionado en un control.Permite recuperar columnas del cliente o producto.
ColecciónTabla temporal almacenada en memoria dentro de la aplicación.Funcionó como detalle provisional de la factura.
CollectAgrega un registro a una colección.Incorporó productos al carrito temporal.
ValueConvierte un texto en número.Permitió calcular cantidad por precio.
ResetRestablece el valor de un control.Limpió los controles después de agregar un producto.
RemoveElimina un registro de una fuente o colección.Permitió retirar productos seleccionados.
SumSuma los valores de una columna o expresión.Calculó el subtotal de la factura.
PatchCrea o actualiza registros.Guardó la cabecera en Dataverse.
DefaultsDevuelve valores predeterminados para crear un registro.Indicó a Patch que debía crear una factura nueva.
SetCrea o modifica una variable global.Capturó la factura generada.
NotifyMuestra un mensaje en la aplicación.Comunicó el resultado de la operación.
Power AutomateServicio para crear procesos automatizados.Se utilizará posteriormente para notificaciones y aprobaciones.
APIInterfaz 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 consolidadaRespuesta del instructorRecomendació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:
    • cmb para cuadros combinados.
    • txt para entradas.
    • btn para botones.
    • tbl o gal para tablas y galerías.
    • col para colecciones.
    • var para variables globales.
  • Evitar nombres genéricos como ComboBox1 o TextInput2.

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 With para 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

  1. Dataverse permite estructurar información empresarial mediante tablas y relaciones, ofreciendo mayores capacidades que una lista aislada.
  2. El modelo cabecera-detalle es fundamental para una aplicación de facturación, porque una factura puede contener múltiples productos.
  3. Las columnas de búsqueda permiten mantener las relaciones entre clientes, facturas, productos y detalles, evitando duplicación innecesaria.
  4. Las colecciones son apropiadas para preparar información temporalmente, como un carrito de compra, antes de guardarla.
  5. Selected permite recuperar información del registro elegido en cuadros combinados y otros controles de selección.
  6. Patch puede crear registros directamente en Dataverse, mientras que Defaults indica que se desea generar una fila nueva.
  7. El resultado de Patch debe capturarse cuando se necesita relacionar registros posteriores, como los detalles con la factura recién creada.
  8. Los cálculos financieros deben centralizarse y validarse, especialmente subtotal, IGV y total.
  9. La seguridad real debe implementarse en Dataverse, no solo ocultando controles o campos dentro de Power Apps.
  10. 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]

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

advanced-floating-content-close-btnBoton