viernes, 3 de junio de 2011

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:

Android vs AX 2009
El entorno de desarrollo es el siguiente:
Dicho esto, en esta primera parte describiré por encima la construcción de la primera versión del web service en .NET C# ya que en este momento lo mas complicado ha sido configurar todos los componentes para poder comunicarse sin problemas de permisos.
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());
        }
    }
}

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:

Android vs AX 2009

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


2 comentarios:

  1. Hombre, una cosa es seguirme y otra copiar y pegar a saco el post :)

    ResponderEliminar
  2. Como 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.
    Poner 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.

    ResponderEliminar