1 2 3 Power Mime!

Vamos ya hacia la tercera semana en casa, y con unas cuantas más por delante necesitamos algo de entretenimiento.

La semana pasada Eva me propuso hacer una app con la Power Platform para jugar a juegos de mímica con mis compañeros de Axazure. Ella la diseñaría gráfica y funcionalmente y yo haría el (no) código. ¡Y eso es lo que hicimos!

1 2 3 Power Mime!
1 2 3 Power Mime!
Sigue leyendo «1 2 3 Power Mime!»

Descomprimir (ZIP) un Stream en Dynamics 365 FnO

Ya que Microsoft Dynamics 365 for Finance & Operations es un erp en la nube, no podemos trabajar con archivos en las unidades del AOS. Era bastante habitual tener integraciones con ficheros en AX, donde tenías un archivo en una carpeta compartida y se procesaba.

Por supuesto que todavía podemos trabajar con ficheros, por ejemplo desde una cuenta de almacenamiento en Azure como muestra Miquel Vidal en su blog o con la herramienta Recurring Integrations Scheduler.

Descomprimir Streams de .NET

La mayor parte de las funcionalidades que consisten en cargar o descargar ficheros de MSDyn365FO usan Streams de .NET, normalmente de la clase hija MemoryStream.

Así que, cómo descomprimimos uno de estos archivos ZIP? Por ejemplo, el formato de diario de pago de proveedores ISO20022 está comprimido. ¿Qué pasa si necesitamos el contenido del ZIP?

Pues tendremos que usar la clase ZipArchive del namespace System.IO.Compression, y es muy, muy sencillo. Por ejemplo:

Edit: este código sólo es válido para un ZIP que contenga un único fichero. Si el archivo comprimido tiene más de un archivo hay que procesar cada Stream dentro del while.

Tenemos que copiar el stream unzippedStream (que en realidad es un DeflateStream) a un MemoryStream (que tiene que estar inicializado) antes de hacer el return.

Recordad que para acceder a una colección de .NET tenemos que usar un enumerator para poder recorrer los elementos. Si no véis el método usando la notación de punto escribidlo a mano. Escribir código de .NET en X++ todavía no está afinado del todo…

Un aviso sobre los entornos self-service: actualizar con cuidado

Parece que al fin ha llegado el día y todos los nuevos proyectos de LCS traen de serie entornos Tier 2+ de tipo self-service. Si quieres saber un poco más acerca de ellos puedes leer este post que escribí sobre los entornos service fabric/self-service en Microsoft Dynamics 365 for Finance and Operations.

Los dos últimos proyectos que hemos empezado en Axazure están en self-service y también hemos tenido la migración de un cliente que estaba en la infraestructura normal. Así que ya es hora de que os avise sobre una cosa terrible…

Un aviso sobre los entornos self-service: actualizar con cuidado 1
Sigue leyendo «Un aviso sobre los entornos self-service: actualizar con cuidado»

Seguridad en Azure Pipelines con Azure Key Vault

Aquí puedes leer mi guía completa sobre Dynamics 365 for Finance and Operations y Azure DevOps.

Después de la actualización dl último post sobre llamar a la API de LCS desde Azure DevOps me di cuenta que crear una pipeline con una contraseña a la vista no era muy seguro. ¿Cómo podemos añadir un extra de seguridad a pipelines? Una vez más podemos acudir a una herramienta de Azure para ayudarnos, Azure Key Vault.

Azure Key Vault

Key Vault es un servicio que nos permite guardar certificados o secretos de forma segura y usarlos en nuestras apps o servicios. Y como muchos otros servicios de Azure tiene un coste pero es muy bajo y, para un uso normal, la factura será de 1 céntimo o ninguno al mes. ¡No seáis rancios con la seguridad!

Sigue leyendo «Seguridad en Azure Pipelines con Azure Key Vault»

Llama a la API de Movimiento de DB de LCS en tu pipeline de Azure DevOps

Aquí puedes leer mi guía completa sobre Dynamics 365 for Finance and Operations y Azure DevOps.

Hace no mucho hablé en otro post sobre la API de movimiento de base de datos de LCS, y en este quiero mostrar como llamar a la API usando PowerShell desde nuestras pipelines de Azure DevOps.

¿Para qué?

Básicamente por automatización. Ahora mismo la API sólo permite el refresco de un entorno de Microsoft Dynamics 365 for Finance and Operations a otro, así que la idea es tener datos frescos de producción en nuestros entornos de UAT a diario. No sé qué nuevas operaciones soportará la API en el futuro pero otra idea sería añadir al pipeline la exportación de la DB (creando un bacpac) de un entorno de UAT para tener datos listos para restarurar en una máquina de desarrollo. Sigue leyendo «Llama a la API de Movimiento de DB de LCS en tu pipeline de Azure DevOps»

Añadir lookup multiselección en un diálogo de SysOperation Framework

¡Primer post del 2020! ¡Feliz año nuevo! Sí, ya se que estamos a pasado mediados de enero…

Cuando añades un campo en un Data Contract de la SysOperation Framework el lookup que genera el framework (si el EDT lo tiene) es un lookup simple, de selección única. Vamos a ver cómo crear un lookup que permita la selección múltiple en MSDyn365FO.

El SysOperation Framework y MVC

Pero antes un poco de introducción. El SysOperation Framework se introdujo en Dynamics AX 2012 para sustituir al RunBase Framework, y se usa para crear procesos que se ejecutarán por lotes. Las clases de RunBase siguen estando en Dynamics 365 for Finance and Operations. Algunos procesos estándar las siguen usando, mientras otras las usan para luego llamar a clases del SysOperations Framework.

Sigue leyendo «Añadir lookup multiselección en un diálogo de SysOperation Framework»

API REST de movimiento de base de datos de LCS

Aquí puedes leer mi guía completa sobre Dynamics 365 for Finance and Operations y Azure DevOps.

Desde el pasado octubre hemos podido probar la preview de la Database Movement API que nos permite listar y descargar copias de las DBs que tenemos en LCS y lanzar refrescos de datos usando una API REST.

Si queréis uniros a la preview primero necesitáis ser parte del Insider Program donde podéis uniros al «Dynamics 365 for Finance and Operations Insider Community«. Una vez invitados a la organización de Yammer podéis pedir acceso al grupo «Self-Service Database Movement / DataALM» donde recibiréis toda la info necesaria para uniros a la preview y activar la funcionalidad en LCS.

Sigue leyendo «API REST de movimiento de base de datos de LCS»

Generar una licencia ISV con token USB

Este post es producto de no leerse la documentación completamente. Lección #1: leer los documentos a fondo, o por lo menos no dejarlo a medias cuando te crees que ya has acabado.

Publicar una solución ISV

Uno de los pasos cuando quieres publicar una solución ISV (un vertical) es generar la licencia para los clientes. Esta licencia se tiene que firmar usando un certificado Authenticode que activará la solución, limitará el número de usuarios o definirá una fecha de caducidad.

Sigue leyendo «Generar una licencia ISV con token USB»