Gestionar Dimensiones Financieras en MSDyn365FO con X++

dimension.utils

Con la llegada de la versión 2012 de Microsoft Dynamics AX hubo un importante cambio en la forma en la que el ERP gestiona las Dimensiones Financieras. El modelo de datos cambió significativamente y con él, el modo en que nosotros, como desarrolladores, getionábamos y trabajábamos con ellas a través de X++. Dynamics 365 for Finance and Operations ha sido continuista en este aspecto, y la forma de trabajar con ellas es prácticamente la misma.

La principal diferencia que encontramos con este cambio fue que, mientras que en la versión 2009 o anterior teníamos limitado el número de dimensiones que podíamos utilizar en 10, en AX 2012 y MSDyn365FO ese límite desaparece. A nivel técnico, antes trabajábamos con un enumerado (SysDimension) para controlar las distintas dimensiones, y un EDT de tipo Array para almacenarlas, de forma que, si queríamos acceder a ellas, solo teníamos que acceder a los elementos de ese array para obtener los valores. Ahora, estas dimensiones vienen creadas directamente en base de datos, y la forma en la que se almacenan nos podrían recordar más a las dimensiones de inventario que ha utilizado históricamente el ERP, de forma que, lo que hacemos es almacenar posibles combinaciones de los distintos valores de las dimensiones, y utilizar un valor único (RecId) de esa combinación para asignar las dimensiones al registro correspondiente.

Este cambio, obviamente, abre muchísimo el abanico de posibilidades para explotar la información financiera a través de las dimensiones, pero, para los técnicos, supuso un pequeño dolor de cabeza el aprender a gestionar esta nueva estructura de dimensiones, es por ello, que quiero compartir con vosotros unos cuantos métodos que utilizo en todos los proyectos en los que participo, y que hacen que me olvide de esta gestión, facilitando mucho el uso de estas dimensiones. Podéis descargar esta clase directamente desde mi cuenta de GitHub y a continuación paso a explicaros su funcionamiento.

Continúa Leyendo

Truco: Obtener la Petición HTTP Utilizando Microsoft Flow

buscando la llamada http flow operations dynamics 365

Al hilo de los últimos artículos que he publicado en los que hablo de como utilizar Postman para hacer testing de nuestras integraciones vía servicios REST y OData, quería compartir con vosotros un pequeño truco que me ha resultado tremendamente útil en algunos de los proyectos en los que he participado.

Nos ha ocurrido en algunos proyectos, sobre todo al principio, que nos encontrábamos con la necesidad de realizar integraciones con otras aplicaciones, y algunas de estas integraciones han sido realizadas por OData utilizando llamadas HTTP para realizar operaciones CRUD por código, todo esto utilizando Data Entities de MSDyn365FO, tanto estándar como personalizadas. Como decía, al principio nos surgía a todos la duda de ¿y ahora, que llamada tengo que realizar para ejecutar una acción concreta?

Pues bien, como indico en el título del post, podemos utilizar Microsoft Flow, y de una forma realmente sencilla, ejecutar la acción que necesitamos, y posteriormente ver la petición HTTP que se ha ejecutado en el sistema, veamos como:

Continúa Leyendo

Consumir Servicios REST y OData en #MSDyn365FO desde Postman (2/2)

postman dynamics 365 for finance and operations azure active directory

En el anterior artículo pudimos ver toda la configuración que necesitamos realizar en Azure Active Directory y en Microsoft Dynamics 365 for Finance and Operations para ser capaces de realizar integraciones utilizando para ello servicios REST u OData.

Ahora, vamos a ver los (sencillos) pasos a realizar para poder consumir estos servicios desde Postman. Como ya comentamos en el artículo anterior, lo primero que debemos hacer es instalar Postman, el cual se puede descargar desde este enlace.

Continúa Leyendo

Consumir Servicios REST y OData en #MSDyn365FO desde Postman (1/2)

autenticacion dynamics 365 finance and operations postman

Como sabéis, uno de los mayores cambios a nivel técnico con la aparición de la versión 7 de Dynamics AX (AX7), o como ahora lo conocemos, Microsoft Dynamics 365 for Finance and Operations (aka MSDyn365FO), es que pasamos de tener un ERP basado en una arquitectura de 3 capas, en el que el usuario interactuaba directamente con una aplicación de 32 bits (Ax32.exe), a trabajar directamente con un ERP basado en la nube en el que el cliente trabaja con una aplicación web, con todo lo que ello conlleva.

Para mi como desarrollador e implantador, una de las áreas que más ha mejorado con todo este cambio es la de las integraciones. Actualmente tenemos infinidad de posibilidades para integrar el ERP con aplicaciones de terceros. Por nombrar unas pocas, podemos exponer servicios SOAP, servicios REST, entidades de datos vía OData que nos permiten realizar cualquier tipo de operación CRUD, integración mediante ficheros utilizando el DIXF… Todo esto nos ha facilitado muchísimo la vida, y ahora, os quería enseñar lo sencillo que es conectar con MSDyn365FO para consumir servicios REST o para utilizar las Data Entities vía OData utilizando para ello Postman, lo que nos va a permitir testear nuestra solución de una forma muy ágil.

Continúa Leyendo

Novedades en X++: El Operador IN

in operator x++ msdyn365fo

Hace unos meses, Michael Fruergaard (mpf), publicó un nuevo post en el que nos contaba que había sido introducida una nueva característica en el lenguaje de programación X++: nada más ni nada menos que el operador IN.

Es cierto que una vez leído el artículo y testeado en nuestras propias máquinas, la primera sensación fue un poco agridulce, puesto que al leer el titular esperábamos que fuese un operador algo más amplio, pero una vez digerido, nos dimos cuenta que se trata de un gran avance en cuanto a extensibilidad del producto se refiere. Vamos a ver por qué.

Continúa Leyendo

Chain Of Command (CoC) en Clases Anidadas (Nested classes)

nested classes chain of command

Primero de todo, ¿qué es esto de las Nested classes o Clases anidadas? Hablamos de este concepto, en este caso, para referirnos a controles de formularios, datasources de formularios, campos de un datasource de un formulario, etc… ¿Pero por qué lo llamamos así? Pues una forma sencilla de verlo es dirigirnos a algún formulario de #MSDyn365FO, por ejemplo, al CustTable, y ver su código. En el, podremos ver que el formulario CustTable es una clase, que tiene dentro uno o varios DataSources, que son a su vez clases que contienen DataFields, que también son clases, por lo que nos encontramos con clases dentro de clases, o clases anidadas.

Visto esto, os recuerdo como podíamos modificar propiedades de FormControls en #MSDyn365FO a través de manejadores de eventos (Event handlers), de forma que podíamos cambiar el comportamiento o las propiedades de dicho control en tiempo de ejecución. En ese momento, la única posibilidad que teníamos para realizar dicha tarea era esa, suscribirnos al evento en cuestión, obtener el control que queríamos editar, y modificar sus propiedades.

Continúa Leyendo

Copiar Lista de Excel en Filtro «Es uno de»

copy-paste from excel to dynamics 365 for finance and operations filter is one of

Cuando estamos trabajando con #MSDyn365FO sobre un formulario de tipo Grid, como puede ser el formulario de Todos los clientes o Todos los proveedores entre otros, tenemos la opción de realizar distintos filtros que nos permiten ajustar el conjunto de datos que queremos mostrar en pantalla. Uno de estos filtros, es el que conocemos como «es uno de», que nos permite insertar un listado de valores, por ejemplo, un listado de cuentas de clientes, de forma que en el grid aparezcan aquellas que hemos puesto en el filtro.

Filtro es uno de Dynamics 365 for Finance and Operations
Continúa Leyendo

Periodos Activos para Trabajos por Lotes en #MSDyn365FO

Periodos activos para trabajos por lotes dynamics 365 finance operations

Hoy vamos a hablar de una nueva característica de Microsoft Dynamics 365 for Finance and Operations. Aunque no se trata de un tema técnico como tal, se trata de una característica bastante interesante, y que he echado de menos en versiones anteriores de la aplicación: Periodos Activos para Trabajos por Lotes.

Desde que empecé con Dynamics AX, en todos los proyectos en los que he participado, he tenido que, de uno u otro modo, utilizar los Trabajos por Lotes o Batch Jobs para poder llevar a cabo tareas de forma periódica así como para poder ejecutar tareas «pesadas» sin necesidad de tener al usuario esperando a que finalice.

Continúa Leyendo

Consumir una API REST en Dynamics 365 for Finance and Operations usando RestSharp

En uno de nuestros últimos proyectos implantando #MSDyn365FO nos ha surgido la necesidad de consumir un API REST para realizar una serie de integraciones entre el ERP y aplicaciones externas. En esta ocasión nos hemos apoyado en RestSharp para ello.

RestSharp es un cliente HTTP completo de código abierto que funciona con todas las tecnologías .net, y como todos sabéis, X++ ya está incluido dentro del stack .net (oh yeah!). RestSharp nos va a permitir acceder rápidamente a los datos requeridos sin la complejidad de manejar peticiones HTTP sin procesar.

Ahora, si os parece, vamos a ver como podemos utilizar esta librería en nuestro sistema. Para ello, lo primero que haremos es descargarnos el paquete de NuGet desde el cual podemos extraer la dll para utlizarla en nuestro sistema.

Una vez que tenemos la dll disponible pasaremos a agregarlo como referencia dentro de nuestro proyecto para poder utilizarlo, y hay que tener en cuenta que necesitamos transferir esta dll entre los distintos entornos (UAT, pre-producción, producción…), y puesto que nos encontramos en un entorno Cloud sobre el que no tenemos acceso a los entornos productivos, la mejor manera de hacerlo es la siguiente: Continúa Leyendo

Borrado de Paquetes / Modelos en entornos Sandbox (SAT)

borrado-paquetes-microsoft-dynamics-365-finance-operations-msdyn365fo

Buenas, hoy voy a escribir este post basado en una experiencia vivida hace unos días, más que nada porque es una de esas cosas que no suelen ocurrir a menudo y siempre está bien tenerlo apuntado en algún sitio para la próxima, y oye, si puedo ayudar a alguien que se encuentre con la misma duda o problema, pues bienvenido sea 🙂 .

En resumidas cuentas, se trata de la necesidad de borrar un paquete que ha sido instalado en un entorno sandbox de UAT, pero, antes de adentrarnos más en el tema, voy a hablar de algunos conceptos por si alguno de vosotros no los conoce: Continúa Leyendo