Dual-write lleva con nosotros casi dos años ya. Es una de las formas que tenemos de integrar Dynamics 365 Finance and Operations y Dataverse junto a las Virtual Entities.

La solución estándar viene con varias entidades listas para sincronizar. Esta ha sido una de las mejoras que se han introducido desde que Dual-write salió en preview, cuando Juanan y yo hicimos la demo en el Dynamics Saturday de Madrid de 2019.

Dual write
En realidad el Dual write funciona así

¿Pero qué pasa si lo que queremos es desarrollar una Data entity personalizada de MSDyn365FO y usarla en Dual-write? Pues es muy fácil, pero hay algunas cosas que tenemos que tener en cuenta.

Dual-write

Dual-write es una integración bidireccional que va a escribir datos de forma síncrona en Dataverse cuando creemos, actualicemos o borremos datos en MSDyn365FO en casi tiempo real. Por el lado de Finance and Operations usa las Data entities para exportar los datos a Dataverse.

Ahora mismo hay un conjunto de entidades que vienen listas para sincronizar, y gracias a Initial Sync podemos hacer que se rellenen los datos en Dataverse eligiendo FnO como origen cuando se inicia la sincronización, o también elegir Dataverse como origen.

Si quieres leer más sobre Dual-write puedes:

Crear la Data-entity

Primero de todo tendremos que crear la Data entity a partir de nuestra tabla en Visual Studio. He creado una nueva tabla llamada AASBookTable con sólo cuatro campos: BookId, Author, Name y ISBN. Su clave primaria es el campo BookId que también sera su alternate key y se usará como clave natural en la entidad.

Ahora creamos la Data entity y nos aseguramos de marcar el check «Enable data management capabilities«:

Dynamics 365 Finance and Operations Data entity wizard
Tenemos que marcar Enable data management capabilities

Si la entidad no tiene la gestión de datos activada no aparecerá en la lista de configuración de Dual-write.

Crear la tabla en Dataverse

Ahora tendremos que crear una tabla en nuestro entorno de Dataverse. Esta tabla debe tener por lo menos algunos de los campos que vamos a sincronizar Y ADEMÁS un campo compañía. El concepto de compañia no existe en Dataverse/CRM pero gracias a los mapeos que vienen OOB y a Initial Sync podemos solucionar esto con unos pocos clics y tener una tabla company en Dataverse con todas nuestras entidades legales de FnO.

Company field related to table company
Campo compañía relacionado con la tabla Compañía

Siguiendo con mi ejemplo he creado una tabla con los mismos cuatro campos y un campo Company de tipo Lookup con la tabla Compañía como su tabla relacionad, en la que están sincronizadas las empresas de FnO.

Como he dicho, si no creamos este campo no podremos configurar Dual-write para esta tabla.

Mapear las tablas

Nuestra tabla y Data entity ya están listas, y ahora tenemos que configurar el mapeo entre ellas en el espacio de trabajo de Dual-write en FnO. Hacemos click en el botón «Add table map»:

Dynamics 365 Dual-write add table map
Dynamics 365 Dual-write añadir mapeo de tablas

Se abrirá un nuevo diálogo en el que seleccionaremos nuestra entidad de FnO y la tabla de Dataverse:

Entity map
Mapeo de entidad

Seleccionamos la entidad y tabla que hemos creado y le damos a save. Ahora ya podemos definir el mapeo de campos:

Dynamics 365 Dual-write field maps
Dynamics 365 Dual-write mapeo de campos

Como he creado ambas tablas está claro lo que tengo que mapear. Después de esto le damos save y list, verdad? PUES NO! Si hacemos esto tendremos un error, este:

Project validation failed. SourceEntitySchema: Books has a primaryCompanyField set to DataAreaId and DestinationEntitySchema: cr008_bookses doesn’t have primary company field set. Dual-write only supports mapping between cross-company entities or company-specific entities from both sides..keys are missing for either AX or CRM.keys are missing for either CRM or AX

También es posible que nos dé otro error sobre que falta una clave de integración para el campo company. Ambos ocurren porque no hemos definido la clave de integración para esta nueva tabla de Dataverse:

Clave de integración

Volvemos a la página inicial de Dual-write y le damos al botón «Integration key»:

Dual/write integration key
Clave de integración de Dual-write

La clave de integración será la misma que la clave de nuestra entidad de Fno, con el campo compañía si tu entidad tiene la empresa como primary context. Recuerda que cuando creamos índices en FnO el campo DataAreaId no se incluye, pero que en SQL Server sí, junto con el campo partition.

La clave de integración para nuestro mapeo personalizado de Dual-write será así:

Dual/write integration key
Clave de integración de Dual-write

¿Recuerdas que hemos añadido el campo compañía en nuestra tabla de Dataverse? Puedes ver en la imagen superior que el campo incluye la relación a la tabla Company de Dataverse. No podremos guardar el mapeo si creamos la clave usando el campo de nuestra tabla de Dataverse en vez de la relación de nuestra tabla con la tabla Company, tal que así:

Dual/write integration key
Clave de integración de Dual-write

¿Véis la diferencia? En la primera imagen el campo se llama c008_company.cdm_companycode mientras que en la segunda se llama c008_company. Si configuramos la clave de integración usando el campo de nuestra tabla en vez de la relación con la tabla relacionada y guardamos el mapping seguiremos viendo un error porque está esperando la relación!

¡Acción!

Ya están la tabla y el mapeo listos, asi que le damos a Run y vamos a crear un nuevo libro en el formulario de FnO:

Finance and Operations form
Formulario en Finance and Operations

Ahora vamos a ver los datos en nuestra tabla de Dataverse…

Dataverse table data
Datos en la tabla de Dataverse

¡Aquí está! Y por supuesto funciona en ambas direcciones. Si creo un registro en Dataverse se creará en FnO también. Usaré el add-in de Excel para crear un nuevo libro:

Dataverse Excel add-in
Add-in de Excel en Dataverse

Y después de refrescar el formulario de FnO ya lo podemos ver:

Desarrollar entidades personalizadas para Dual-write 1

Esto es un ejemplo muy muy simple de cómo podemos crear una tabla personalizada, usarla en una Data entity y después usar esta entity en Dual-write. Es algo que se puede hacer muy rápido pero tenemos que recordar «lo de la compañia», o si no esto no funcionará.

Dual-write ahora es todavía más fácil de configurar gracias a que podemos desplegar y vincular un entorno de Dataverse desde LCS cuando desplegamos un entorno de Finance and Operations.

¡Suscríbete!

Recibe un correo cuando se publique un nuevo post

Write A Comment

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

ariste.info