Category

X++

Category

En estos últimos días he participado en un evento de comunidad, el 365 Saturday online, y también he empezado a publicar un podcast. Y quería hablar un poco sobre las dos cosas.

Dynamics Power Spain Online 2020

Esta ha sido mi cuarta participación como speaker en los últimos 3 años, y como es habitual he presentado una sesión con Juanan. Esta vez hemos hablado sobre el uso de Azure DevOps con Microsoft Dynamics 365 for Finance and Operations.

Es un tema sobre el que hemos escrito bastante ya, y igual está muy trillado, pero sinceramente creo que todavía hay mucha gente que no lo usa bien, o que simplemente lo usa para el control de versiones. ¡Y eso es malo!

Continue Reading Creando (más) comunidad, o intentándolo

¡Contemplad #XppGroupies! ¡El día que tanto hemos estado esperando ha llegado! Las Azure hosted builds (me cuesta mucho decir Build hospedada en Azure) ya están en preview pública con el PU35!! Ya podemos dejar de preguntarle a Joris cuando estará disponible, porque ya lo está!! Leed los Docs!!

He podido escribir esto porque he podido probarlo durante la preview privada durante unos meses. Y por supuesto gracias a Joris por haberme invitado a la preview!

Azure hosted builds
Cabalgando los Azure Pipelines por Caza Pelusas

¿Qué significa esto? No necesitamos ya la VM para ejecutar pipelines! Es broma, sí la necesitamos! Si estámos ejecutando tests o sincronizando la DB como parte de nuestro pipeline todavía necesitamos la VM. Pero podemos mover las builds de CI al agente de Azure.

También puedes leer mi guía sobre MSDyn365FO y Azure DevOps ALM.

Recordar que esto esta en preview privada. 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 deberías ver un nuevo proyecto en LCS llamado PEAP Assets, y dentro de la Asset Library en la sección Nuget package encontraréis los nugets.

Continue Reading Azure hosted build para Dynamics 365 Finance & SCM

Los avisos del compilador. Warnings. No son errores, sólo warnings. Puedes ignorarlos totalmente y olvidarte de ellos, verdad? Bueno, espero que no lo estés haciendo.

«¡Pero si incluso en el código estándar de Microsoft aparecen warnings!, podrías decir. Y eso es totalmente cierto, pero no es tu código, es el de Microsoft. Si una funcionalidad que usas se rompe porque Microsoft no tuvo cuidado de los warnings, puedes abrir un soporte y arreglarlo es el trabajo de Microsoft. Si tu código rompe alguna funcionalidad porque pasaste de los warnings, es tu trabajo arreglarlo, y tu cliente va a quererlo igual de rápido que tu querrías que Microsoft arreglara su error.

Por esto es por lo que deberíamos estar avisados de los warnings (badum tss). Ay… en inglés tenía «más gracia».

Continue Reading ¿Compruebas los warnings del compilador de Dynamics 365?

Con la última versión 10.0.10 de Dynamics 365 for Finance and SCM nos llega una feature nueva que nos permitirá añadir acciones a la barra de mensajes usando la Messaging API, como lo que teníamos en AX2012 con la clase SysInfoAction.

Recordad que esto está en la última versión de preview. Podéis acceder a las previews si os apuntáis al Dynamics 365 Insider Program.

Continue Reading Messaging API: añadir acciones a la barra de mensajes

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:

public MemoryStream unizpStream(MemoryStream _stream)
{
    ZipArchive        zipArchive   = new ZipArchive(_stream);
    ZipArchiveEntry   entry;    
    MemoryStream      retStream    = new MemoryStream();

    var enumerator = zipArchive.Entries.GetEnumerator();

    while (enumerator.MoveNext())
    {
        entry = enumerator.Current;
        break;
    }

    var unzippedStream = entry.Open();

    unzippedStream.CopyTo(retStream);

    return retStream;
}

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…

¡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.

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

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

Ya he escrito unos cuantos posts sobre la ALM (Application Lifecycle Management) de desarrollo  para Dynamics 365 for Finance and Operations in the past:

La posibilidad de hacer CI/CD real es una de mis cosas favoritas de MSDyn365FO, pasar del «¿Qué control de código?» a «O usas control de código o muere» ha sido una maravilla. Nunca me cansaré de decirlo.

Continue Reading Automatización del ALM de desarrollo en Microsoft Dynamics 365 for Finance and Operations

Hace un tiempo tuve que crear un interfasado entre MSDyn365FO yun sistema externo que devolvía los datos en XML. Decidí usar las clases XML de X++ (XmlDocument, XmlNodeList, XmlElement, etc…) para parsear el XML y acceder a los datos. Estas clases son horrorosas. Sacas el trabajo pero de una forma fea fea. Hay un método mejor para parsear XML o JSON en MSDyn365FO.

Continue Reading Parsea XML y JSON en MSDyn365FO fácilmente

La gestión de características (Feature management) lleva disponible en Microsoft Dynamics 365 for Finance and Operations desde hace un tiempo. Antes de eso las características se activaban con el flighting, ejecutando una consulta en SQL en las máquinas de desarrollo y UAT (y en prod lo hacía el equipo de DSE).

Ahora tenemos una área de trabajo (workspace) muy bonito que muestra todas las características disponibles, y el flighting sigue por aquí también. La principal diferencia es que el flighting se usa para activar características a clientes en concreto, como una preview de una feature.

Continue Reading Gestión de características: crear una característica personalizada

ariste.info