Seguiremos este Blog, que Postea cosas muy interesantes y podremos aprender de el.
El Blog es:
http://www.jaestevan.com
j.a.estevan
Si no eres parte de la solución, eres parte del poblema
Google Android vs Microsoft Dynamics AX (I)
Desde hace algún tiempo tengo la inquietud personal de investigar una solución móvil para conectar a Microsoft Dynamics AX 2009. Lo aparentemente mas lógico sería intentarlo con Windows Phone 7 pero el entorno Android me parece muy interesante para investigar, así que el proceso de investigación será doble.
Para conectar a AX desde el exterior podríamos optar por una solución “out of the box” como por ejemplo el conector AIF pero ya que este es un proceso de investigación personal (no es una solución real para un cliente por el momento) he decidido implantar “manualmente” todo el proceso según el siguiente esquema:
En sucesivas versiones intentaré realizar algún proceso mas complejo
desde android, conforme avance en el desarrollo de esta plataforma en la
que soy totalmente novato.
La instalación de AX 2009 no tiene, de momento, ningún componente particular. Es una instalación normal configurada para ser utilizada mediante el .NET Business Connector
Respecto al web service, parto de un servicio muy sencillo que sirve sólamente para validar que la comunicación se está realizando con éxito, éste es el código:
En este ejemplo sólo tenemos un método Prueba que usaremos para validar que la conexión se realiza correctamente. Pedimos a AX solamente la “traducción” de una etiqueta para validar que está procesando la petición.
Y el resultado esperado desde el emulador de Android:
En la siguiente entrega publicaré el código de android para algún resultado mas complejo. Pero eso será a la próxima …
Lo dicho le seguiremos.ç
Para conectar a AX desde el exterior podríamos optar por una solución “out of the box” como por ejemplo el conector AIF pero ya que este es un proceso de investigación personal (no es una solución real para un cliente por el momento) he decidido implantar “manualmente” todo el proceso según el siguiente esquema:
El entorno de desarrollo es el siguiente:
- Microsoft Dynamics AX 2009 SP1 RTM (Máquina virtual con Windows 2003 Estándar)
- Microsoft Dynamics .NET Business Connector
- Visual Studio 2010 Profesional, el lenguaje elegido es C#
- Android SDK
- Librería ksoap2-android para comunicación SOAP desde Android
- Eclipse IDE for Java con plugin para Android
En sucesivas versiones intentaré realizar algún proceso mas complejo
desde android, conforme avance en el desarrollo de esta plataforma en la
que soy totalmente novato.
La instalación de AX 2009 no tiene, de momento, ningún componente particular. Es una instalación normal configurada para ser utilizada mediante el .NET Business Connector
Respecto al web service, parto de un servicio muy sencillo que sirve sólamente para validar que la comunicación se está realizando con éxito, éste es el código:
using System;
using System.Net;
using System.Web;
using System.Web.Services;
using Microsoft.Dynamics.BusinessConnectorNet;
namespace jaee.ax.ws
{
///
/// Servicio Web de conexión AX
///
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string Prueba()
{
Microsoft.Dynamics.BusinessConnectorNet.Axapta ax;
NetworkCredential nc = new NetworkCredential("USUARIO", "PASSWORD", "DOMINIO");
string labelId = "@SYS53716";
object res = null;
try
{
ax = new Axapta();
ax.LogonAs(nc.UserName, nc.Domain, nc, null, null, null, null);
}
catch (Exception e)
{
return String.Format("Error en login: {0}", e.Message);
}
try
{
res = ax.CallStaticClassMethod("SysLabel", "labelId2String2", labelId);
}
catch (Exception e)
{
ax.Logoff();
return String.Format("Error en CallStaticClassMethod: {0}", e.Message);
}
ax.Logoff();
return String.Format("El texto correspondiente a la label {0} es: {1}.", labelId, res.ToString());
}
}
}
using System.Net;
using System.Web;
using System.Web.Services;
using Microsoft.Dynamics.BusinessConnectorNet;
namespace jaee.ax.ws
{
///
/// Servicio Web de conexión AX
///
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string Prueba()
{
Microsoft.Dynamics.BusinessConnectorNet.Axapta ax;
NetworkCredential nc = new NetworkCredential("USUARIO", "PASSWORD", "DOMINIO");
string labelId = "@SYS53716";
object res = null;
try
{
ax = new Axapta();
ax.LogonAs(nc.UserName, nc.Domain, nc, null, null, null, null);
}
catch (Exception e)
{
return String.Format("Error en login: {0}", e.Message);
}
try
{
res = ax.CallStaticClassMethod("SysLabel", "labelId2String2", labelId);
}
catch (Exception e)
{
ax.Logoff();
return String.Format("Error en CallStaticClassMethod: {0}", e.Message);
}
ax.Logoff();
return String.Format("El texto correspondiente a la label {0} es: {1}.", labelId, res.ToString());
}
}
}
En este ejemplo sólo tenemos un método Prueba que usaremos para validar que la conexión se realiza correctamente. Pedimos a AX solamente la “traducción” de una etiqueta para validar que está procesando la petición.
Y el resultado esperado desde el emulador de Android:
En la siguiente entrega publicaré el código de android para algún resultado mas complejo. Pero eso será a la próxima …
Lo dicho le seguiremos.ç
Hombre, una cosa es seguirme y otra copiar y pegar a saco el post :)
ResponderEliminarComo ves no era la intención el utilizar tu material y me parece que el echo de decir que era tu post y poner la dirección de tu Blog dejaba mas que claro que no era mio y era copia.
ResponderEliminarPoner un post solo con un enlace no lo suelo hacer, si que te pondré en el post, recopilatorio de Blog interesantes, por supuesto si no te importa.
Solo es un tema que me interesaba a nivel particular, y de echo si ves el reto del Blog ni siquiera era el momento de ponerlo, para mi fue un tributo a tu trabajo.
Estaré encantado de borrarlo si no te gusta, o dejarlo si no te importa, espero que me digas cual es tu preferencia en este sentido, y si realmente te disgusto te pido mis mas sinceras disculpas.
Un saludo y Vuelvo a felicitarte por tu Trabajo y tu Post.