🟢 Introducción
Las columnas Lookup en Dataverse permiten crear relaciones entre tablas, como “Cuenta → Contacto principal”, “Orden → Cliente”, “Empleado → Departamento”, etc.
Cuando automatizamos procesos con Power Automate, una de las tareas más comunes es actualizar un registro y asignarle un valor para un lookup. Aunque parece sencillo, los lookups tienen su estructura particular y requieren un formato correctamente construido o conector adecuado.
Hoy aprenderás cómo actualizar cualquier columna Lookup en Dataverse desde Power Automate, con ejemplos reales y mejores prácticas.
🧠 Qué es / para qué sirve
Un lookup es una columna que apunta a un registro en otra tabla.
Ejemplos típicos:
Account (lookup)en la tabla ContactPrimary Contacten la tabla AccountRegardingen ActivitiesOwner(aunque es especial)
Actualizar un lookup desde Power Automate sirve para:
- Asignar un cliente a una orden.
- Relacionar un contacto a una cuenta.
- Conectar un ticket de soporte con un caso padre.
- Cambiar el dueño de un registro.
El truco está en entender que Dataverse espera una referencia al GUID del registro, no texto.
🧩 Sintaxis (conceptual)
La estructura básica que Dataverse necesita para un lookup es:
/<pluralName>(<GUID>)
Ejemplo:
"customerid_account@odata.bind":"/accounts(kj12b3-1ppj-001d-1poi3-okj31oj)"
Pero Power Automate lo hace más sencillo con el conector “Update row”.
💻 Ejemplos con código
🔹 Ejemplo 1 — Actualizar un lookup usando el conector «Update a row»
Supongamos:
Tabla: Orders
Lookup: Customer → apunta a tabla Accounts
En Power Automate:
- Agrega acción: Dataverse → Update a row
- Selecciona:
- Table:
Orders - Row ID:
[OrderID]
- Table:
- En el campo Customer, selecciona:
→ dynamic content → Account (GUID)
El campo espera el GUID del registro, no el nombre.
🔹 Ejemplo 2 — Asignar un contacto como Cliente en una orden
Lookup de tipo «Customer», puede aceptar Account o Contact.
Si vas a asignar un Contact:
customerid_contact@odata.bind
En Power Automate NO necesitas escribir esto manualmente.
Solo debes mandar:
Campo: Customer
Valor: Contact GUID
→ Power Automate detecta automáticamente el tipo.
🔹 Ejemplo 3 — Usando el conector «Perform a bound action» (casos avanzados)
Si necesitas actualizar un lookup especial como Owner, puedes usar:
ownerid@odata.bind: "/systemusers(GUID)"
🔹 Ejemplo 4 — Usando HTTP (cuando necesitas control total)
PATCH https://yourorg.api.crm.dynamics.com/api/data/v9.2/orders(ORDER_GUID)
Content-Type: application/json
{
"customerid_account@odata.bind": "/accounts(ACCOUNT_GUID)"
}
Esto es útil cuando:
- Necesitas actualizar múltiples lookups de forma masiva.
- Quieres optimizar llamadas API.
- Necesitas manejar columnas lookup que no aparecen en el diseñador del conector.
🧱 Buenas prácticas
✅ Usa Update a row siempre que sea posible (menos errores).
✅ Si el lookup tiene opciones múltiples (Customer lookup), asegúrate de enviar el tipo correcto.
✅ Usa el GUID directamente, nunca el nombre del registro.
✅ Verifica el Schema name del lookup antes de usarlo en la versión HTTP.
✅ Asegúrate de que el registro relacionado existe antes de asignarlo.
✅ Usa “List rows” con filtro para obtener el GUID del registro si no lo tienes.
⚠️ Errores comunes
🚫 Enviar texto (“Contoso Ltd.”) en lugar del GUID.
🚫 Usar el nombre singular en @odata.bind en vez del plural → rompe la llamada.
🚫 No activar el campo en el formulario del conector, por lo que no se muestra.
🚫 Olvidar que algunos lookups son Customer-type, no simples.
🚫 Enviar un GUID de tabla equivocada (ej. enviar un Contact donde espera un Account).
🔄 Variantes o alternativas
- Relaciones N:N: en vez de lookup, se deben usar la tabla intermedia (Associate/Dissociate).
- Owner (Especial): requiere usar
/systemusers()o/teams(). - Rollup columns: no pueden ser actualizadas manualmente.
- Flujos automáticos: a veces es mejor actualizar el lookup directamente en Dataverse con reglas de negocio o plugins.


Deja un comentario