Desplegar manualmente los paquetes de Retail para Microsoft Dynamics for Finance and Operations

Primer post sobre Microsoft Dynamics 365 for Finance and Operations Retail! Espero que lleguen más.

Como sabréis, uno de los contratiempos del refresco de datos desde producción en LCS es que hay algunos datos que no se copian. Esto es una medida de seguridad para evitar, entre otros, que no se manden correos o se ejecuten los lotes por accidente después de restaurar la DB.

Recordad que es una buena idea tener un script/query de SQL que cambie todos los endpoints, contraseñas, activar usuarios, etc. que se pueda ejecutar después del refresco de datos, igual que teníamos en AX2009/2012. Un F5 en SSMS y el entorno estará listo para usar y tendremos la DB lista para exportar a las máquinas de desarrollo.

Otra de las cosas que no se copian después del restore son los archivos de las cuentas de almacenamiento de Azure: ficheros XLSX del ER, archivos de la DocuValue y los instaladores self-service de Retail.

Paquetes de Retail

Los paquetes de Retail son los ejecutables que se usan para instalar el MPOS en el… bueno, en el terminal de venta (POS). Estos archivos están guardados en una cuenta de almacenamiento de Azure blob storage que es específico de cada entorno, así que cuando se refresca la DB no están los paquetes de autoservicio en el entorno de destino:

La solución oficial de Microsoft es aplicar un paquete binario que recreará los archivos EXE en la cuenta de almacenamiento de la máquina virtual donde se ejecute el paquete desplegable.Y como sabemos ya todos esto requiere de un tiempo, y aunque se puede ejecutar fuera de horario también lo podemos arreglar en menos de 10 minutos.

El workaround

Ahhh el «workaround»… una palabra tan bonita y que tiene tantos significados… Truquillo, ñapa, arreglo… Esta vez encima tiene una restricción: sólo va a funcionar en VMs de desarrollo y Tier 2+ normales, no se puede hacer en los entornos de tipo self-service porque no tenemos acceso la máquina del AOS.

Lo que tenemos que hacer es entrar a una de las máquinas del AOS por RDP e ir al disco de servicio (normalmente la K en desarrollo y G en los Tier 2+). Debería haber una carpeta llamada DeployablePackages si has aplicado alguno, sino hay que seguir con el método oficial. Si no existe la carpeta seguramente funcione también usando los archivos que hay en la unidad de instalación, pero no lo he probado.

Ordenamos los archivos por fecha de modificación (nuevos primero) y dentro del primero debería haber otra carpeta llamada RetailSelfService:

Y dentro de esa carpeta verás 3 carpetas más, Packages, Scripts y ServiceModel. Dentro de la carpeta Packages están los archivos EXE y en el Scripts están los scripts (un aplauso por favor), abrimos este último y vamos a la carpeta Upgrade, ahí encontraremos un script de PowerShell que se llama UpdateRetailSelfService. Tenemos que ejecutar este script en PowerShell como administrador. Va a tardar entre 3 y 5 minutos y cuando termine los paquetes estarán subidos a la cuenta de almacenamiento y ya aparecerán en el formulario de parámetros de Retail.

¡Eso a mi no me funciona!

Hay un caso es el que los instaladores no se cargan: si no tienes ninguna configuración hecha para Retail. ¿Por qué? El script de PowerShell comprueba lo siguiente:

  • Que existan datos de canal en la Channel DB
  • Que existan datos de canal en el AOS
  • Que haya transacciones en el AOS
  • Que haya datos de transacciones en la Channel DB
  • Que existan extensiones de la Channel DB

Si no se cumple ninguna de estas condiciones el script se salta la creación de los instaladores en el blob. ¡Pero podemos hacer algo! Sí, como configurar un canal por ejemplo. Pero ¿y si no tienes ganas?

Recuerdas el script UpdateRetailSelfService de antes? Sólo tienes que editarlo y comentar las siguientes líneas:

Esto hará que el script se salte la validación y se desplieguen los instaladores.

Es bastante guarro, ¿verdad? Sí. Hace honor a workaround.

¿Qué hay de los entornos self-service?

Estoy convencido de que esto también se puede conseguir modificando un Deployable Package (uno de los de las actualizaciones mensuales), dejando solo Retail en el archivo DefaultTopologyData.xml, e incluso editar el script si hace falta. Pero no lo he probado. ¿Algún voluntario?