Introducción
La interoperabilidad es una de las características fundamentales que a día de hoy debemos exigir a la hora de seleccionar una solución. Expresa la capacidad de comunicarse y entenderse con otros sistemas, proporcionando interfaces para exponer información y, a un mayor nivel, proporcionar acceso a la lógica de proceso. Es igualmente importante que nuestro software sea capaz de "consumir" información y procesos de terceros.
En versiones previas de Ax, como 2.5 y 3.0, existía el llamado Business Connector, que era una DLL que daba acceso a la lógica y a la información mediante unos interfaces generalizados. Su configuración y funcionamiento era compleja y poco intuitiva. Pues bien, todo eso ha cambiado con Ax2012, ahora con las herramientas de desarrollo para Visual Studio el acceso a la lógica es más sencilla e intuitiva ya que nos crea 'proxies' de los objetos de Ax que necesitamos desde Visual Studio, trabajando por tanto de forma 'tipada' e incluso con Intellisense.
Ejemplo básico
El ejemplo consiste en acceder al nombre de un grupo de clientes (CustGroup). Para ello en Visual Studio,
- Crear un proyecto de tipo 'Biblioteca de clases' (Class Library)
- Botón derecho sobre el proyecto, Add to AOT. (Esto añadirá el proyecto al AOT del entorno que tengamos configurado en el equipo sobre el que estamos desarrollando). Una vez añadido verás que el icono del proyecto cambia, apareciendo
- En la barra de menú de VS, Ver -> Application Explorer. Nos aparecerá una vista del AOT.
- Seleccionar el objeto al cual queremos acceder y arrastrarlo al proyecto. En este ejemplo la tabla CustGroup. En este momento creará el proxy y añadirá la referencia al Ax.ManagedInterop
- Modificar la clase Class1.cs que se generó con el proyecto, indicando el siguiente código:
using System;
using Microsoft.Dynamics.AX.ManagedInterop;
namespace GCC_VSAOT
{
public class AxBL : IDisposable
{
Session session;
public AxBL()
{
session = new Session();
session.Logon(null, null, null, null); //Conectará a la empresa y configuración por defecto del usuario
}
public string _cName(string _cu)
{
CustGroup cu = new CustGroup();
cu = CustGroup.find(_cu); //Al tener ya creado el proxy nos aparece la clase y sus métodos
return cu.Name;
}
public void Dispose()
{
session.Logoff();
}
}
}
- Crear un proyecto de tipo 'Aplicación de consola' (Console Application)
- Añadimos una referencia a nuestro proyecto anterior, en mi caso llamado GCC_VSAOT
- Modificar el Program.cs, dejando el siguiente código:
using System;
using GCC_VSAOT;
namespace GCC_VSAOT_ConsoleTest
{
class Program
{
static void Main(string[] args)
{
AxBL bl = new AxBL();
Console.Write(bl._cName("CU")); //Pasar un código de Grupos de Cliente
Console.ReadKey();
bl.Dispose();
using (AxBL bl2 = new AxBL()) //Con using al ser IDisposable hará el Dispose al final del bloque
{
Console.Write(bl2._cName("CE")); //Pasar un código de Grupos de Cliente
Console.ReadKey();
}
}
}
}
Problemas
- Al compilar el proyecto de consola. Solución: Establecer .Net Framework 4 como framework destino (igual que el proyecto de librería) y no .Net Framework 4 Client Profile
- Al ejecutar. Solución: Añadir al proyecto de consola un App.Config, con lo siguiente:
<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
Más detalles sobre estos y otros problemas con la conectividad Ax-VS visita el blog de mi compañero Juanma, http://www.overflowexception.es/
No hay comentarios:
Publicar un comentario