Buscar en este blog

viernes, 17 de julio de 2015

Publicar un servicio intermedio .Net para comunicar AIF Dynamics Ax con Java


Me he topado con la no grata sorpresa que para consumir servicios de dynamics Ax 2012 R2 mediante lenguajes distintos a .Net como Java o PHP, la única solución viable es que se ponga un servicio intermedio de .Net que si exponga el wsdl como lo necesitan las distintas plataformas. La razón? que Java o PHP necesitan que se exponga el xsd dentro del wsdl y de momento esto solo lo ofrece .Net, quedando la comunicación como en la figura:

image

Así que comencemos, supongamos que nuestros servicios en Ax están desarrollados y expuestos, esto lo verificamos desde Administración del sistema –> Configuración –> Services and Application Integration Framework –> Puertos de entrada, en esta pantalla podemos observar la url con la que se expone nuestro servicio y que es la url que vamos a referenciar en nuestro “servicio intermedio” de .Net

image

Revisamos que podamos ver en el explorador el wsdl que expone la url de Ax

image

Ahora comenzamos con el servicio intermedio, lo primero es abrir Visual Studio, no hay diferencia si es 2010, 2012 o 2013. Elegimos un nuevo proyecto de tipo WCF –> WCF Web application

image

En las referencias, agregamos nuestra url del servicio de Ax que vamos a consumir en este servicio intermedio. Click derecho sobre el nodo Service References –> Agregar referencia a servicio… Pegamos nuestra url y vemos los servicios, aquí debemos visualizar los métodos disponibles expuestos por nuestro servicio de Ax, con esto ya agregamos nuestro servicio de Ax al servicio intermedio de .Net.

image

Después de esto, necesitamos agregar la lógica que reciba los datos de alguna plataforma externa (Java o Php) para enviarlos hacia Ax. En mi caso, en la interfaz de .Net yo expongo un servicio con dos métodos, en uno recibo datos para crear ordenes de venta y en otro recibo el identificador de una orden de venta y regreso el estatus de la misma.

image

Cada uno con la lógica respectiva. Ahora nos resta publicar el servicio en el IIS para que pueda ser consumido por las distintas plataformas.

image

Elijo que lo quiero publicar en un sistema de archivos para mandarlo al IIS

image

En el Target Location, eliges la carpeta del IIS y el sitio donde quieras publicar, lo puedes publicar dentro de Defatul Web Site en un web application nuevo para tus pruebas o si ya tienes un sitio definido lo eliges.

image

Te regresa la ruta que elegiste a la venta a de perfiles, haces click en el botón “Publicar” y ahora ya abrir el IIS donde vas a ver tu App publicada.

image

Ahora necesitamos verla en el explorador para saber si esta bien publicada. Si le damos click en Browse. De primera instancia nos aparecería este error: “HTTP Error 403.14 – Forbidden, The web server is configured to not list the contents of this directory.”

image      image

Vamos en el IIS a la opción de Directory Exploring y damos doble click para entrar a las propiedades del elemento. Dentro de las propiedades en la barra lateral derecha, esta la opción “Enable”, hacemos click sobre ella.

image
image

Si presionas de nuevo “Browse” se abre el explorador ya con el wsdl listo para consumir!

image

Ahora, este es el wsdl normalito (http://xx.xx.xx.xx/GAELTPortalNet/ServicioNet.svc?wsdl), si lo que buscas es que sea consumido por java, debes poner el xsd en el wsdl, para eso solo cambiamos la ruta agregándole el singlewsdl al final: http://xx.xx.xx.xx/GAELTPortalNet/ServicioNet.svc?singlewsdl

Espero te ayude.

Post que podrían interesarte:
Crear servicio personalizado AIF
Crear documentos asociados a un registro por código (DocuRef)
Teclas rápidas en Microsoft Dynamics Ax 2012


Y por cierto, acuérdate de darle click a algún anuncio si el post te sirvió de algo. O comenta si quieres saber sobre algún tema en específico.

No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrollador@s de Ax en nuestro idioma. 

sábado, 4 de julio de 2015

Rellenar o incluir caracteres en cadenas con strRFix en Dynamics Ax 2012

Muchas veces necesitamos incluir en nuestras cadenas de texto ciertos caracteres porque requerimos que nuestra cadena cumpla con un formato especifico. Por ejemplo, si queremos que un folio en el que no usamos secuencias tenga una norma de 6 dígitos, necesitamos que cuando el usuario introduzca el número "1" se transforme en "00001".

Para esto tenemos la función strRFix, que se usa:

static void mascaraFolios(Args _args)
{
    int                             folioSiguiente;
    DimensionValue                  cedisMascara;
    str                             folioMascara,
                                    cedisSalesLine,
                                    folioOriginal, 
                                    folioFinal;
   
    cedisSalesLine = "13" ;
    folioOriginal = "5" ;

    //Modificación para incluir el cedis en el formato del folio
    //Se requieren 3 dígitos para cedis
    cedisMascara = strRFix(cedisSalesLine, 3 '0' );
   
    folioSiguiente = str2int(folioOriginal) + 1;
    folioMascara = strRFix(int2str(folioSiguiente), 6'0');
    folioFinal = cedisMascara + "-" + folioMascara;
   
    info(folioFinal);
}

Y el resultado:


Si quisieras que los ceros los agregara del lado derecho, solo usamos la función strLFix. Por ejemplo:

static void mascaraFolios(Args _args)
{
    int                             folioSiguiente;
    DimensionValue                  cedisMascara;
    str                             folioMascara,
                                    cedisSalesLine,
                                    folioOriginal, 
                                    folioFinal;
   
    cedisSalesLine = "13" ;
    folioOriginal = "5" ;

    //Modificación para incluir el cedis en el formato del folio
    //Se requieren 3 dígitos para cedis
    cedisMascara = strLFix(cedisSalesLine, 3 '0' );
   
    folioSiguiente = str2int(folioOriginal) + 1;
    folioMascara = strLFix(int2str(folioSiguiente), 6'0');
    folioFinal = cedisMascara + "-" + folioMascara;
   
    info(folioFinal);
}

Y el resultado:

Post que podrían interesarte:
Capturar errores del infolog mediante código x++
Crear documentos asociados a un registro por código (DocuRef)
Teclas rápidas en Microsoft Dynamics Ax 2012


Y por cierto, acuérdate de darle click a algún anuncio si el post te sirvió de algo. O comenta si quieres saber sobre algún tema en específico.

No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrollador@s de Ax en nuestro idioma.