Archivo de la categoría: Microsoft Dynamics AX

¿Integración con Microsoft Dynamics AX? (II)

En mi anterior post, os explicaba las diferentes opciones que tenemos para poder conectar con Microsoft Dynamics AX. En esta ocasión, y siguiendo el hilo, nos centraremos en ver cómo podemos hacer eso con el .NET Business Connector que no es mas que una librería que nos permite acceder a AX.

Para poder hacer uso de este conector deberemos proceder a realizar la instalación del BC en la maquina cliente de dónde vamos a desarrollar y en la máquina de dónde vamos a desplegar nuestro software. Si debemos desplegar un software cliente/servidor la comunicación debería ser a través de WCF y centrar toda la conexión hacía AX desde el servicio web en caso contrario, si nuestro software esta hospedado en un IIS por ser entorno web, el propio IIS es quien hará la conexión hacía AX. El entorno, en este caso, es muy importante y debemos tener este en cuenta antes de realizar cualquier solución conectada con AX pues el Business Connector tan solo funciona con un usuario del Active Directory desde dentro del dominio del Active Directory, de otra forma, no encontraría la instancia de AOS con la que trabaja Microsoft Dynamics AX.

Al momento de realizar la instalación en la parte del servidor, teniendo en cuenta que la instalación de Dynamics esta realizada correctamente y sobretodo el Active Directory configurado en modo nativo. Por defecto la instalación del Business Connector en el servidor de AX ha creado un usuario domain\bcproxy. Es recomendable indicar a este usuario que su contraseña no caduque nunca.

Si procedemos a realizar la instalación en el servidor o bien en el ordenador de desarrollo deberemos instalar el siguiente cliente,

Install_BC_AX

 

 

 

 

 

 

 

Si nuestra aplicación es una aplicación web, deberemos añadir la cuenta proxy al grupo local de Windows IIS. Si estás usando el BC desde SharePoint, deberás agregar la cuenta al grupo local de Windows SharePoint y así, con todos los diferentes grupos que tengas y que quieran conectar con AX desde un IIS de la misma red y dominio dónde esta instalado el AX. El usuario debe estar configurado en el Application Pool que queramos usar.

El último paso es configurar el usuario de negocios de proxy de conector dentro de la configuración AX para asegurarnos que tiene el usuario correctamente y el AOS funcionará correctamente,
1. Inicio Microsoft Dynamics AX (Inicio> Todos los programas> Microsoft Dynamics> Microsoft Dynamics AX)
2. Abra el cuadro de diálogo de negocios de proxy de conector: Administración> Configuración> Seguridad> Business Connector Proxy.
3. En el cuadro Alias​​, escriba el alias. En el cuadro de dominio de red, introduzca el dominio del usuario y luego cerrar el cuadro de diálogo.

Ahora ya lo tenemos todo, tenemos el BC instalado en la parte cliente, el BC configurado dentro de AX y el identity en el application pool para conectar con el AX en caso que sea web o bien sea un WCF. Para poder probar si todo va bien, en la máquina cliente, instala un script de power shell dónde podréis ver toda la información de vuestra instalación. Lo puedes descargar en el siguiente enlace PS BC. Si lo ejecutamos lo que veremos es el nombre de nuestro AOS y los datos de ejemplo,

BC_PS

 

 

 

 

Si esto funciona significa que desde el servidor dónde desplegaremos nuestra aplicación hasta la instancia de AOS, todo esta funcionando correctamente.
En nuestro anterior post hemos creado una clase que es la que nos servirá de intercambio entre Microsoft Dynamics y .NET a través del Business Connector.

En esta misma solución lo que haremos será agregar la librería Microsoft.Dynamics.BusinessConnectorNet.dll que se encuentra en C:\Program Files\Microsoft Dynamics AX\50\BusinessConnector\Bin en el caso de 64 bits o Program Files (x86) en el caso de 32 bits. Perfecto, ahora escribiendo unas pocas líneas de C# o de VB, podremos consumir nuestro método de AX.

using System;
using Microsoft.Dynamics.BusinessConnectorNet;
using DataExchange;

namespace ConsoleForAx
{
    class Program
    {

        static void Main(string[] args)
        {
            Axapta axClient = null;
            axClient = new Axapta();
            axClient.Logon(null, null, null, null);
            object customerResult = axClient.CallStaticClassMethod("DataExchange", "GetCustomer");
            axClient.LogOff();
            Customer cust = (Customer)customerResult;

            Console.WriteLine(cust.Name);
            Console.WriteLine(cust.Nif);
            Console.WriteLine(cust.Email);

            Console.ReadLine();
        }
    }
}

Por orden, tendremos el nombre de la clase de AX, el nombre del método a llamar de AX y por último simplemente obtenemos el objeto customerResult.
Si os fijáis en ningún momento hago ningún parser entre AX y .NET si no que el BC ya se encarga de obtener los datos de AX y devolver la clase de .NET cómo object y lo único que debemos hacer es indicar que nos convierta este object a un objeto conocido cómo Customer.

Aquí podéis obtener todo el código fuente de estos dos post; AX_Integration_NET.

Ya hemos realizado una pequeña integración entre Microsoft Dynamics y .NET :) Espero que os haya gustado y en el siguiente veremos cómo consumir listados y devolver los mismos a través del BC.

¿Integración con Microsoft Dynamics AX? (I)

Muchas son las veces que en los diferentes proyectos que nos solicitan o en los que participemos nos debemos integrar con el ERP del cliente.

En ocasiones esta fachada para podernos integrar nos puede venir preparada y en otras ocasiones no. Dada la complejidad de un ERP y la de multitud de procesos que puede llevar a cabo para simplemente guardar un cliente, se desaconseja hacer operaciones de escritura en sus DB de SQL directamente.

Por este motivo y también por seguridad para todos, en Microsoft Dynamics AX, existen diferentes mecanismos de integración,

–  Services and Application Integration Framework (AIF): Expone la lógica de negocio interna a sistemas externos para que pueda ser consumida mediante servicios de Windows Communication Foundation (WCF).

–  .NET Business Connector: Mediante la librería permite a otras aplicaciones obtener y enviar datos además de poder usar la lógica de negocio.

–  .NET Framework: Con su integración con X++, permite llamar a ensamblados manejados por el CLR y proviene de clases generadas con C# o VB para ser usadas desde X++. Estas clases las debes generar con Microsoft Visual Studio.

En este primer capítulo explicaremos cómo crear una librería para que esta pueda ser usada posteriormente desde AX.

Desde AX, si eres programador, vas a usar X++ para escribir las diferentes instrucciones que necesites para poder implementar la lógica de negocio dentro del ERP y una vez realizadas las diferentes operaciones, deberás devolver un resultado.
Para los sistemas externos que se quieren integrar con el ERP, y más en la actualidad dónde todo lo que es tipado es mucho más simple de manejar, es muy probable que se te solicite que los datos que devuelvas sean objetos de .NET.

Lo primero que necesitáis, además del método desarrollado en X++, es tener la librería de objetos a devolver. Para ello lo primero que debemos hacer, es desarrollar esta librería en Visual Studio con C# o VB. En ella definiremos los objetos POCO que se usarán simplemente cómo objetos de transferencia de objetos (Si, DTO’s).
Si usas Microsoft Dynamics AX 2009 debes usar el Framework 2.0 y si usas Microsoft Dynamics AX 2012 debes usar el Framework 4.0.

Como veis tan solo se trata de crear una nueva biblioteca de clases con la definición de objetos que necesitemos con sus propiedades  get y set. Dada mi experiencia con estos sistemas, os aconsejo que hagáis heredar todas las clases de intercambio de datos de otra clase  para que esta pueda contener códigos de error, mensajes de error o mensajes informativos. Esto es debido a que el manejo con la primera forma que veremos de hacer la integración devuelve excepciones de la propia librería  pero no puede especificar errores personalizados de la lógica de negocio, por ejemplo en un método de autentificación, informar de un error  personalizado con código “10001” que signifique que la contraseña es incorrecta, de ahí, la clase propuesta de ResultData.

DataExchange_Solution

Una vez tengamos la librería realizada la debemos compilar y desde el AOT de AX agregar esta referencia.
Es muy importante que esta librería para que pueda ser cargada correctamente se registre en el GAC de los ensamblados de Windows  y se firme con una clave segura para garantizar la existencia única de la misma.

Custom_Reference

Posteriormente, para usar la misma deberemos ir al AOT en nuestras Classes y crear una Nueva Class poniendo su declaración cómo  public.

Custom_Class

Por último, dentro, crearemos un método llamado GetCustomer que hace uso de nuestra DLL de .NET desde dentro de X++.

Custom_Method

Está claro que dentro de este método deberemos realizar la lógica de negocio que necesitemos para devolver el cliente o incluso pasar parámetros.

¿Fácil verdad?
En el próximo capítulo veremos cómo llamar este método desde .NET mediante el Business Connector.