Cómo sincronizar la base de datos local con el Dynamics 365 Online

Ana Neto Noticias de la empresa, Productos y soluciones, Técnico 3 Comentarios

Artículo actualizado por última vez el: 05 de mayo de 2020

Una empresa en crecimiento ha estado usando Microsoft Dynamics CRM en sus instalaciones, integrado con su ERP (Dynamics NAV), SharePoint y un sistema de contabilidad. Claro, ellos ven los beneficios de moverse a D365 Online y a la Azure Cloud. Pero Microsoft no ofrece una solución práctica para sincronizar las bases de datos locales de Dynamics CRM con Dynamics 365 Online. Si Microsoft no ayuda, ¿cómo pueden sincronizar los datos con Dynamics 365? Aquí está su solución para conectarse a la base de datos Dynamics 365.

Mover Dynamics CRM local a D365 Online

Aunque todavía es posible tener un Dynamics 365 en sus maquinas...migrar de Microsoft Dynamics CRM local a Dynamics 365 Online parece más atractivo para la mayoría de las empresas en estos días.

Al considerar el Dynamics 365 Online vs. local, el modelo de Software como Servicio (SaaS) del Dynamics 365 Online trae claros beneficios:

  • No tienes que comprar hardware o infraestructura, y no tienes que mantenerla;
  • El software se licencia normalmente según un modelo pay-as-you-go continuo, en lugar de una gran compra única per-seat;
  • El SaaS suele ofrecer un acceso universal, que permite conectarse al software desde cualquier dispositivo (computadora, portátil, teléfono móvil) desde cualquier lugar que tenga una conexión a Internet;
  • El precio inicial suele ser considerablemente inferior al de la compra de equipo y programas informáticos en el lugar;
  • SLA de alta disponibilidad (es decir, SLA de 99.9% de tiempo de actividad de Microsoft Dynamics 365)

Así que, sincronizar las bases de datos de las instalaciones con el Dynamics 365 Online debería ser bastante fácil, ¿verdad?

Idealmente, para migrar de Microsoft Dynamics CRM local a D365 Online, podría transferir los datos directamente desde el backend de la base de datos local de Microsoft Dynamics CRM SQL a la base de datos remota de Microsoft D365 SQL. Y si, por casualidad, ya tenía D365 y quería migrar Dynamics 365 local a online debería ser aún más sencillo.

En la práctica, sin embargo, no es tan simple.

Lo que obtienes de Microsoft para pasar a Dynamics 365 Online

Actualmente, para ayudar a los clientes a desplegar las soluciones de nube de Microsoft, Microsoft ofrece soporte a través de la página FastTrack. Los clientes con suscripciones elegibles a Microsoft 365, Dynamics 365 o Azure, pueden usar FastTrack sin costo adicional durante la vigencia de su suscripción (enlace al final del artículo). Es necesario que compruebe los criterios de elegibilidad actuales para lo que está intentando migrar. Microsoft a veces se basa en el número de puestos, a veces en los ingresos.

En abril de 2019, Microsoft también publicó "Microsoft Dynamics CRM on-premises to Dynamics 365 Online Migration", un documento PDF de 45 páginas que describe lo que usted debe hacer (link de descarga al final del artículo). En este documento, confiesan que "Hasta hace poco, no había ningún mecanismo disponible para que los clientes pudieran trasladar fácilmente sus despliegues locales a Dynamics 365 (Online)".

Problemas para Sincronizar On-prem con las Bases de Datos Online

Está pensando que la solución ideal sería encontrar una sincronización de la base de datos Dynamics 365 con su Dynamics CRM local.

El problema es que, por lo general, exponer las bases de datos de los servicios SaaS al mundo exterior se considera una mala práctica y puede entrañar considerables riesgos de seguridad. Por lo tanto, Microsoft no proporciona acceso a la base de datos del back-end de D365 Online. En su lugar, para realizar la interacción de datos con D365 Online, Microsoft ofrece los servicios oficiales de la API.

Los servicios de la API aportan el beneficio de no romper las reglas y restricciones comerciales internas. De esta manera, los servicios API aseguran que las aplicaciones del cliente no degraden el rendimiento. Además, ayudan a preservar la integridad de los datos y la coherencia de la base de datos del back-end.
El desarrollo de procesos para manipular los datos a través de las API's requiere de habilidades de programación y tiempo. En particular, tiempo para indagar en la documentación para establecer los parámetros correctos y hacer las llamadas apropiadas a los métodos o funciones que proporcionan esas interfaces.

¿Qué tal si simplemente pudieras aprovechar tus habilidades en SQL e interactuar con la API de D365 como lo harías con un DBMS (sistema de administración de bases de datos) normal?

¿Y si pudieras hacer que Dynamics 365 sincronizara la base de datos con SQL Server Management Studio?

Conéctese al D365 Online desde el DBMS Local o cualquier Aplicación Cliente

Bienvenido aD365 Database Sync Solution! Esta es una solución específica para sincronizar las bases de datos locales con la cloud D365. Se basa en la plataforma de integración Connect Bridge, de Connecting Software.

Connect Bridge traduce la sintaxis del estándar ANSI SQL a las llamadas API apropiadas. Al asegurar que el acceso a los datos se realiza con las llamadas API (aunque no tienes que preocuparte por ello) se mantiene la integridad del sistema de destino. Además, también obtiene la facilidad de comunicarse con cualquier sistema de destino a través de las instrucciones estándar SELECT, INSERT, UPDATE y DELETE.

Por lo tanto, desde su DBMS local o cualquier aplicación cliente, puede conectarse al D365 Online y poner datos en él.

Para las empresas que migran de Dynamics CRM local a D365 Online es especialmente útil en situaciones en las que tenían procesos enteros escritos en la base de datos SQL local. Afortunadamente, ahora pueden ser reutilizados agregando Connect Bridge a su portafolio.

Ahora es el momento de un ejemplo práctico.

Desde cualquier Base de Datos a Dynamics 365 Online

En este ejemplo vamos a utilizar la famosa base de datos Adventure Works DW (Datawarehouse) de Microsoft (Descárgalo aquí). Demostraremos cómo puede integrar fácilmente sus procesos existentes con Microsoft Dynamics 365 Online (información aquí) usando la Plataforma Connect Bridge.

Si está usando el SSMS (SQL Server Management Studio) para administrar la base de datos del servidor SQL, puede ver el esquema de la base de datos en la ventana del Explorador de Objetos (Object Explorer).

Esquema de la base de datos en la ventana del Explorador de Objetos

Plataforma Connect Bridge le permite crear conexiones de Linked Server a cualquier sistema de destino a través de conectores de una manera fácil. Hay más de 400 conectores disponibles. Vamos a centrarnos en el conector Dynamics 365. A continuación se muestra una selección de los conectores en el área de CRM/ERP/Contabilidad.

Conectores - CRM / ERP / Área de contabilidad

Abajo puedes encontrar la conexión del Linked server ya creada en SSMS.

La conexión al servidor ya se ha creado en el SSMS

Nótese que nombramos a propósito la conexión del linked serverD365_CRM. Y, al ampliar el nodo de catálogos en el TreeView, podemos ver el esquema completo proporcionado por Dynamics 365, tal como se vería al acceder a una base de datos tradicional.

Con eso en su lugar, puede crear cualquier tipo de integración o personalizar cualquier proceso existente aprovechando la usabilidad.

Aplicabilidad del On-prem a la solución de sincronización de Cloud D365

Ahora, te preguntarás: ¿por qué tendría que hacer esto en primer lugar?

Aquí hay dos escenarios comunes con los que puedes relacionarte.

Escenario 1:

Estoy trabajando para una empresa que utiliza Microsoft Dynamics CRM localmente, y estamos en el proceso de migración a Microsoft Dynamics 365 Online. Tenemos varias integraciones directamente de nuestras bases de datos de SQL Server a la base de datos de Microsoft Dynamics CRM local.

Pero, no puedo conectarme con la base de datos de Microsoft Dynamics 365 Online directamente:

  • ¿Tendré que crear desde cero todos mis procesos usando el Dynamics CRM SDK de Microsoft?
  • ¿Tendré que crear desde cero todos mis procesos utilizando la Web API?
  • ¿Tengo que aprender C# para hacer todo esto?

Escenario 2:

Trabajo para una compañía que tiene un sistema ERP propietario con una base de datos SQL Server como backend. Decidimos adoptar Microsoft Dynamics 365 CRM como nuestro sistema de gestión de relaciones con los clientes.

Nos gustaría poder llenar el CRM con los datos existentes de nuestro sistema ERP de forma automatizada y mantener ambos lados consistentes.

Hacerlo manualmente parece casi imposible ya que estamos hablando de decenas de miles de registros por entidad (Cuentas, Contactos, Productos por nombrar algunos). Además, es cómodo trabajar con el lenguaje SQL (Structured Query Language).

Sin embargo, no tenemos una profunda experiencia con otros lenguajes y frameworks de programación (C#, Web API's, Servicios Rest, etc.):

  • ¿Tendremos que contratar una empresa de consultoría para hacer esto por nosotros?
  • ¿Dependeré de esta empresa de consultoría para mantener y añadir nuevas características a medida que mi negocio cambie / crezca?

Afortunadamente, la respuesta a todo lo anterior es no. En este punto, el uso del ejemplo anterior podría estar sonando una campana.

Con el enfoque presentado puede aprovechar sus habilidades y procesos existentes de forma masiva.

¿Aún no estás convencido? ¿Por qué no compruebas el ejemplo paso a paso de abajo?

Poblar Cuentas de Dynamics 365 Online de la Tabla DimCustomer de la Base de Datos de Adventure Works.

Preparación
Crea los siguientes desencadenantes (triggers):

–*****************************************************************************

CREATE TRIGGER [dbo].[OnDimCustomerInsert] ON [dbo].[DimCustomer] AFTER INSERT

AS

BEGIN

       SET                               NOCOUNT ON

 

       DECLARE @SQL                      VARCHAR(255)

       DECLARE @AccountId                VARCHAR(255)

       DECLARE @FirstName                VARCHAR(255)

       DECLARE @LastName                 VARCHAR(255)

       DECLARE @MiddleName               VARCHAR(255)

      

       SELECT @FirstName       = [FirstName],

              @LastName        = [LastName],

              @MiddleName      = [MiddleName]

       FROM INSERTED;

       SELECT @SQL = FORMATMESSAGE(‘INSERT INTO ACCOUNT (Name) VALUES(”%s”); SELECT SCOPE_IDENTITY();’,

       @FirstName + ‘-‘ + ‘-‘ + @LastName)

      

       CREATE TABLE #AccountId(ID VARCHAR(255))

       INSERT #AccountId

       EXEC(@SQL) AT D365_CRM

 

       SELECT @AccountId = ID from #AccountId

       UPDATE DimCustomer SET CustomerAlternateKey = @AccountId where FirstName = @FirstName and MiddleName = @MiddleName and LastName = @LastName

 

       PRINT @FirstName + ‘ ‘ + @MiddleName + ‘ ‘ + @LastName;

END

–*****************************************************************************

CREATE TRIGGER [dbo].[OnDimCustomerUpdate] ON [dbo].[DimCustomer] AFTER UPDATE

AS

BEGIN

       SET                               NOCOUNT ON

 

       DECLARE @SQL                      VARCHAR(255)

       DECLARE @AccountId                VARCHAR(255)

       DECLARE @FirstName                VARCHAR(255)

       DECLARE @LastName                 VARCHAR(255)

       DECLARE @MiddleName               VARCHAR(255)

      

       SELECT @AccountId       = [CustomerAlternateKey],

              @FirstName       = [FirstName],

              @LastName        = [LastName],

              @MiddleName      = [MiddleName]

       FROM INSERTED;

 

       SELECT @SQL = FORMATMESSAGE(‘UPDATE ACCOUNT SET Name=”%s” WHERE ACCOUNTID=”%s”’, @FirstName + ‘-‘ + ‘-‘ + @LastName, @AccountId)

       EXEC(@SQL) AT D365_CRM;

       PRINT @FirstName + ‘ ‘ + @MiddleName + ‘ ‘ + @LastName;

 

END


Su ventana del Explorador de Objetos SSMS debería contener ahora 2 nuevos disparadores (triggers) como sigue:

dos nuevos disparadores en la ventana del Explorador de Objetos SSMS

Abra su instancia Dynamics 365 Online y navegue hasta el módulo Ventas -> Cuentas

Dynamics 365 Cuentas

Probando:

En el SSMS abra una nueva ventana de query y pegue lo siguiente:


INSERT INTO [AdventureWorksDW].[dbo].[DimCustomer] (FirstName, MiddleName, LastName, CustomerAlternateKey) values (‘ABC Technology’, ,‘GMB’, ‘CT0001’);

INSERT INTO [AdventureWorksDW].[dbo].[DimCustomer] (FirstName, MiddleName, LastName, CustomerAlternateKey) values (‘Billy Charity’, ,‘SA’, ‘CT0002’);

INSERT INTO [AdventureWorksDW].[dbo].[DimCustomer] (FirstName, MiddleName, LastName, CustomerAlternateKey) values (‘Tom Cat’, ,‘ORG’, ‘CT0003’);

 

SELECT * FROM DimCustomer WHERE FirstName = ‘ABC Technology’;

SELECT * FROM DimCustomer WHERE FirstName = ‘Billy Charity’;

SELECT * FROM DimCustomer WHERE FirstName = ‘Tom Cat’;


Ejecute los scripts presionando F5 o el botón Ejecutar en SSMS.

Debería tener ahora 3 registros adicionales insertados en la Tabla de DimCustomer .

tres registros adicionales insertados en la tabla DimCustomer

Vuelva a su Dynamics 365 Ventas -> Cuentas y refresque la pantalla. ¡Bingo!

tres nuevas cuentas creadas en Dynamics 365

3 nuevas cuentas fueron creadas en Dynamics 365, genial, ¿verdad?

Pero espera allí, en la tabla DimCustomer el campo CustomerAlternateKey tiene un número extraño. No son los valores que hemos insertado en primer lugar.

En su lugar tenemos el ID único de la cuenta generada en Dynamics 365. ¿Cómo es posible?

Si mira con atención el desencadenante OnDimCustomerInsert notará que SELECT SCOPE_IDENTITY(); es el responsable de devolver el id de cuenta que se utilizará para actualizar la tabla DimCustomer.

Eso será crucial para realizar actualizaciones en las cuentas existentes en Dynamics 365 cuando se cambie un registro en la tabla DimCustomer.

Para probar nuestro punto, actualiza los registros creados ejecutando en SSMS el siguiente código:

Después de ejecutar las actualizaciones para las 3 cuentas aquí está el resultado en Dynamics 365.

UPDATE [AdventureWorksDW].[dbo].[DimCustomer] SET LastName = ‘LTD’ WHERE CustomerAlternateKey = ‘account(9a1bc5cb-6ad7-e811-a96f-000d3a2cb90b)’;

NOTE: REPLACE THE STRING account(9a1bc5cb-6ad7-e811-a96f-000d3a2cb90b) WITH THE VALUES GENERATED IN YOUR ENVIRONMENT.

Dynamics 365 Cuentas después de ejecutar las actualizaciones

¡Genial!

Conclusión

Los ejemplos anteriores son muy sencillos, sin embargo, no es difícil visualizar los beneficios de tal enfoque.

  • El mantenimiento del proceso está centralizado y aislado
  • Mejorar el proceso modificando los disparadores es pan comido.
  • No hay necesidad de aprender ninguna nueva tecnología / lenguaje de programación

Eso es todo. Espero que hayas disfrutado.

Si tiene comentarios, sugerencias, escríbalos en el espacio de abajo y le responderemos lo antes posible.

Espero que te diviertas tanto usando la plataforma Connect Bridge como yo tuve cuando escribí este artículo.

Por qué los clientes usan Connect Bridge

Mira un video corto para averiguarlo:

Video de presentación de Connect Bridge

Artículo actualizado por última vez el: 05 de mayo de 2020

Ana Neto - Asesora técnica, autora

Ana Neto
technical asesor en Connecting Software

Autor:

Soy ingeniero de software desde 1997, con un amor más reciente por la escritura y la oratoria.  ¿Tiene alguna pregunta o comentario sobre esta publicación o sobre el Connect Bridge? ¡Me encantaría tener tu opinión!

 ana@connecting-software.com


Contribuyente: Jefferson Kenji Takahashi, MBA

Comentarios 3

  1. Parece interesante - ¿qué pasa con la aplicación de las reglas de negocio? por ejemplo, tenemos la necesidad de llevar las transacciones de nuestros POS (datos en tablas SQL) a Business Central - así que, ¿qué pasa con el caso de uso en el que la venta implica a un cliente y / o producto que no existe en D365?

  2. Post
    Autor

    Hola Paul,

    Si puedes obtener los datos que tienes de tu POS en las tablas SQL y sigue una estructura que puedas entender, entonces puedes usar Connect Bridge para llevar todo a la Central de Negocios. Si la venta involucra a un cliente y/o producto que no existe en D365, tienes que decidir qué hacer, por ejemplo podrías usar un cliente o producto genérico o podrías crear nuevos sobre la marcha.

    Nos pondremos en contacto a través del correo electrónico que nos indicó para explorar esta opción con usted.

    Ana Neto

Deja una respuesta

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