💡 Introducción: La Fusión de Dos Mundos en Power Apps
Las Model-Driven Apps son excelentes para la gestión estructurada de datos y procesos de negocio. Sin embargo, históricamente carecían de la flexibilidad de la interfaz de usuario (UX) que ofrecen las Canvas Apps. Aquí es donde entran en juego las Páginas Personalizadas (Custom Pages).
Una Custom Page es una Canvas App incrustada y optimizada que puede ser añadida como una página completa dentro de una Model-Driven App. Esta funcionalidad permite a los Makers combinar la gestión de datos rigurosa de Model-Driven con la libertad de diseño y las capacidades de control de código bajo (low-code) de Canvas. Este artículo detalla cómo usar esta fusión de manera efectiva para crear una experiencia de usuario unificada y potente.
💻 Desarrollo Técnico: Arquitectura y Comunicación Híbrida
🛠️ ¿Cómo y Cuándo Usar Custom Pages?
Las Páginas Personalizadas resuelven el problema de tener que replicar funcionalidades complejas en la interfaz clásica de Model-Driven. Son ideales para escenarios que requieren:
- Tableros de Mando Personalizados: Crear un dashboard altamente visual que mezcle datos de Dataverse con fuentes externas, imposible de lograr con los dashboards nativos de Model-Driven.
- Lógica de Negocio Compleja: Implementar un asistente de múltiples pasos o una interfaz de calculadora personalizada, donde la lógica de la Canvas App facilita la experiencia.
- Integración de Componentes: Utilizar componentes de terceros (PCF) o de low-code que solo están disponibles en el entorno Canvas.
El núcleo de la arquitectura de la Custom Page es la comunicación bidireccional entre la Canvas App y el entorno Model-Driven que la hospeda.
⚙️ El Objeto ModelDrivenFormIntegration
El objeto clave para la comunicación es el control ModelDrivenFormIntegration, disponible automáticamente en una Custom Page. Este objeto actúa como el canal de datos y navegación entre la página y la aplicación principal.
1. Obtener Datos del Contexto Model-Driven
Si la Custom Page es llamada desde el formulario de un registro, podemos obtener la información del registro actual utilizando la propiedad Item del control de integración:
// En la propiedad OnVisible de la Custom Page
Set(varRegistroActual, ModelDrivenFormIntegration.Item);
// Acceder al ID del registro (e.g., para usarlo en un Filter())
varRegistroActual.accountid
2. Navegación y Comunicación de Retorno
Para que la experiencia sea fluida, la Custom Page debe ser capaz de navegar de vuelta, cerrar el modal o actualizar la vista Model-Driven. Esto se logra con la función Maps del control ModelDrivenFormIntegration:
| Función | Propósito | Ejemplo de Uso |
MapsToTable | Navegar a la vista principal de una tabla. | ModelDrivenFormIntegration.NavigateToTable('Accounts', TableAction.View) |
MapsToRow | Abrir un registro específico. | ModelDrivenFormIntegration.NavigateToRow(varRegistroActual, TableAction.Edit) |
MapsToView | Abrir una vista o subcuadrícula. | ModelDrivenFormIntegration.NavigateToView('Oportunidades') |
Mejor Práctica: Use ModelDrivenFormIntegration.NavigateToTable(TableAction.Cancel) para cerrar el modal o la navegación y volver a la página anterior, garantizando una transición suave para el usuario.
✍️ Mini Ejercicio Práctico: Navegación Contextual
Objetivo: Crear una Custom Page que reciba el ID de un registro de Cuenta y, al presionar un botón, navegue al formulario principal de ese registro.
- Cree una Página Personalizada en su solución Model-Driven.
- En la pantalla de la Custom Page, inserte una etiqueta para mostrar el nombre de la Cuenta actual y un botón llamado «Volver al Formulario».
- Configure la propiedad
Textde la etiqueta para mostrar el nombre del registro actual (asumiendo que se llamaname):
ModelDrivenFormIntegration.Item.name
- Configure la propiedad
OnSelectdel botón «Volver al Formulario» para navegar de regreso al registro que la invocó, simulando un cierre con éxito:
ModelDrivenFormIntegration.NavigateToRow(ModelDrivenFormIntegration.Item, TableAction.Edit)
- Guarde y Publique. Agregue la Custom Page a la navegación de su Model-Driven App. Al ejecutarla desde el menú lateral, verá cómo la página puede acceder a datos básicos de la app y cómo el botón puede interactuar con el frameworkprincipal.
📚 Fuentes Consultadas
- Información general de las páginas personalizadas en Model-Driven Apps (Microsoft Learn)
- Uso del control ModelDrivenFormIntegration (Microsoft Learn)
- Abrir páginas personalizadas como cuadros de diálogo y usar flujos en la nube
📌 Conclusión
Las Páginas Personalizadas han cerrado la brecha entre el desarrollo Canvas y Model-Driven. Al aprovechar el control ModelDrivenFormIntegration, podemos crear experiencias de usuario que son estructuralmente sólidas (Model-Driven) pero visualmente flexibles y con lógica de negocio a la medida (Canvas). Adopte este enfoque híbrido para desbloquear el verdadero potencial de las Model-Driven Apps de próxima generación.


Deja un comentario