top of page
  • Foto del escritorAlejandro Caravantes Molina

Columnas polimórficas o multi-table lookups



¡Lo primero y mas importante! ¡¡Feliz Año 2023!! Espero que tu inicio de este año esté a la altura de las espectativas.


Seguro que este 2023 nos trae muchísimas novedades que trataré de ir reflejando en el blog. Vamos con la primera entrada del año 👏👏.



Cuando has estado cierto tiempo trabajando con Dynamics 365, probablemente ya sepas de lo que voy a hablar en esta entrada. Seguramente te suena el lookup de tipo Customer que puede hacer referencia tanto a registros de la tabla Account como de la tabla Contact, ¿verdad?


Y... ¿Qué te parecería si esa funcionalidad la pudiesemos extrapolar a cualquier lookup customizado que podamos necesitar en nuestro modelo de datos, y que pueda referenciar prácticamente a cualquier tabla (customizada, virtual, etc)? Pues espero que te parezca igual de interesante que a mi, por que sí. Esta funcionalidad se puede implementar gracias a los multi-table lookup 😎.


Esta característica está en GA desde hace algo mas de un año y bajo mi punto de vista no se le ha dado la relevancia que realmente tiene, ya que una de las partes mas importantes de una buena solución construida en Power Platform que trabaje con Dataverse es precisamente un modelo de datos robusto y congruente.


Imagina que tenemos una aplicación que gestiona los recursos materiales asignados a los empleados de una compañía. Imagina por un momento cómo podríamos diseñar el modelo de datos sin la funcionalidad que estamos comentando en este post. Sería algo asi como lo que puedes ver en esta imagen y teniendo en cuenta que en el formulario de empleado tendríamos que incluir tantos subgrid como tablas de recursos materiales tengamos (en mi caso cuatro). Algo engorroso tanto si tenemos en cuenta el UX de nuestra aplicación, como a la hora de trabajar ¿no crees?.


Gracias a la característica de multi-table lookup podemos darle la vuelta a este modelo e incluir un campo Recurso de tipo lookup que sea capaz de almacenar referencias a registros de cualquiera de las tablas de recursos materiales. De tal forma que podamos diseñar un modelo de datos mas robusto que facilite al mismo tiempo la usabilidad de la aplicacion que construyamos alrededor de dicho modelo. Algo parecido a lo que ves en esta otra imagen.


Manos a la obra

A día de hoy, esta característica sólo se puede realizar a través de la API de Dataverse, o con este plugin de XrmToolBoox que facilita mucho la tarea, pero como yo como soy un poco friki voy a tirar por la API de Dataverse. Si vas por esta vía necesitarás autenticarte correctamente como vimos en esta entrada.


Abre Postman y cuando hayas adquirido un token de autenticación invoca a la url:

https://nombredetuentorno.api.crm4.dynamics.com/api/data/v9.0/CreatePolymorphicLookupAttribute

El body de esta request, en mi caso, es el que sigue:

Fíjate que lo único que estamos definiendo en una misma columna Resource es varias relaciones OneToMany a las cuatro tablas de recursos materiales: Audio Devices, Laptops, Monitors y Keyboards.


Si todo ha ido bien, se habrá creado esta nueva columna y ya te adelanto que desde el portal de Power Apps sólo vas a ver una nueva columna con ese nombre y en mi caso cuatro relaciones en la pestaña donde se muestran las relaciones de una tabla.


Probablemente estarás pensando... Muy bien pero... y ¿ahora qué?. Ahora podemos darle forma a nuestra aplicación y te aseguro que va a ser bastante mas usable que si no utilizaramos esa característica. Observa en la siguiente imagen como desde el formulario de detalle ya no vamos a tener un subgrid por cada relación, si no que ahora tenemos un único subgrid que muestra todos los recursos asignados a un empleado sin importar en que tabla reside el registro referenciado.


Observa también como si queremos crear una nueva asignación de un recurso a un empleado, para establecer un valor en el campo multi-table lookup Resource la plataforma nos va a mostrar todos los registros disponibles, mostrando un icono que diferencia la tabla origen.



Y si nos vamos a la búsqueda avanzada, la cosa pinta mejor aún: la plataforma nos ofrece una ventana de búsqueda muy completa permitiendo seleccionar la tabla origen sobre la que queremos buscar.


Vale, pero... ¿y esto como se ve en Power Automate?. Ya te adelanto que la cosa sigue pintando igual de bien. Si necesitamos crear un registro que relacione un empleado con un determinado recurso desde Power Automate, fíjate que la plataforma muestra tantos campos multi-table lookup Resource como tablas de origen estén relacionadas con este campo.


Y si lo que necesitamos es hacer un retrieve de un registro y consultar el campo multi-table lookup Resource, la plataforma también nos lo pone bastante fácil permitiéndonos consultar el id del registro relacionado, la tabla origen donde reside, y su valor formateado y listo para ser usado:


Espero que a partir de ahora, en este tipo de escenarios no pierdas de vista el potencial de esta característica 😉. ¡Gracias por haber llegado hasta aquí! ¡Nos vemos en la siguiente!

bottom of page