Guía de Integraciones en Dynamics 365 F&O: Estrategias Reales
¿OData, DMF o Custom Services? Analizamos las mejores formas de integrar Dynamics 365 F&O con APIs externas y Azure Logic Apps.
En el ecosistema actual de Microsoft, Dynamics 365 Finance and Operations (F&O) rara vez trabaja solo. El verdadero reto de un arquitecto o desarrollador no es solo escribir código dentro del ERP, sino cómo conectar este gigante con el resto del mundo.
Tras años integrando sistemas, he aprendido que no existe una "mejor forma" universal, sino una herramienta adecuada para cada escenario.
El dilema: ¿OData o DMF?
Existe una creencia común de que el Data Management Framework (DMF) es la única opción para cargas masivas, mientras que OData queda relegado a consultas pequeñas. Sin embargo, mi experiencia me ha demostrado lo contrario.
A menudo, OData permite cargar registros de una forma mucho más eficiente gracias a interfaces que ofrecen un control granular. Mientras que el DMF puede resultar más limitado o rígido en ciertos procesos de validación, OData, bien implementado, nos permite una carga masiva controlada que se adapta mejor a la lógica de negocio en tiempo real.
Custom Services y el poder del SysOperation Framework
Como vimos en el post sobre Chain of Command, mantener el código limpio es vital. Cuando la lógica estándar no es suficiente, entran en juego los Custom Services. Para mí, es una de las formas más limpias y profesionales de exponer lógica de negocio de Dynamics al exterior, especialmente cuando aprovechamos el SysOperation Framework.
Este framework es el sucesor del antiguo RunBaseBatch y nos permite separar la lógica de negocio del contrato de datos. Aquí un ejemplo de cómo estructuramos el método de servicio que sería expuesto como un endpoint:
// El Service Class que contiene la lógica de negocio
public class ALBIntegrationService extends SysOperationServiceBase
{
[SysEntryPointAttribute]
public ALBResponseContract processIntegration(ALBRequestContract _contract)
{
// Separamos el contrato de la lógica (Patrón MVC)
str accountNum = _contract.parmAccountNum();
ALBResponseContract response = new ALBResponseContract();
try
{
// Lógica de procesamiento aquí...
response.parmIsSuccess(true);
response.parmMessage("Procesado correctamente");
}
catch
{
response.parmIsSuccess(false);
response.parmMessage("Error en la integración");
}
return response;
}
}Nota para desarrolladores: El SysOperation Framework es un mundo en sí mismo. Debido a su importancia para procesos por lotes (batch) y servicios asíncronos, próximamente publicaré un post exclusivo desglosando cada una de sus clases (Contract, Controller y Service).
La pieza clave: Azure Logic Apps
Si me preguntas cómo conectar Dynamics con una API de terceros hoy en día, la respuesta suele ser Azure Logic Apps.
Las Logic Apps actúan como la orquesta que coordina el flujo de datos entre sistemas externos y nuestros Custom Services en F&O. Es una herramienta tan potente para el intercambio de datos que también dedicaré un artículo completo a explicar cómo configurar una Logic App desde cero para conectar con Dynamics.

El primer paso antes de programar
Como analista, antes de tirar una sola línea de código o configurar un conector, la pregunta clave para el cliente es siempre la misma:
"¿Tu aplicación externa tiene una API documentada a la cual nos podamos conectar?"
Sin una API sólida en el otro extremo, cualquier intento de integración será un "callejón sin salida". El análisis de la interfaz externa define el 70% del éxito de nuestra integración en F&O.
¿Cuál es tu stack de integración favorito?
Cada proyecto es un mundo. Hay quienes prefieren los Business Events para arquitecturas reactivas y quienes, como yo, confían en la potencia del SysOperation Framework combinado con la versatilidad de Azure.
¿Te has encontrado con limitaciones en el DMF que te obligaron a pasarte a OData? Cuéntame tu experiencia en los comentarios.