Webservices (III): service consumer

lunes, 19 de marzo de 2012

salida

Este post cierra (¿?) la serie sobre webservices. En este caso vamos a ver cómo consumir un webservice desde SAP. Vamos a llamar a un webservice externo a nuestro SAP y vamos a dejar información sobre ese sistema externo.


Cliente proxy

En primer lugar debemos asegurarnos que nuestro proveedor tenga publicado el enlace WSDL de su webservice, algo del tipo…

http://xx.xx.xxx.xx/webservice/nombrewebservice.asmx?wsdl

  • Entramos en la transacción SE80
Herramientas / Workbench ABAP / Resumen / SE80 – Object Navigator
  • Creamos el cliente proxy, dándole nombre en la pestaña Enterprise Services, opción Clt. proxy.

    Cliente proxy


  • Select source: indicamos que el consumo lo haremos a través de url mediante la opción URL/HTTP Destination.
  • Select URL: escribimos la url wsdl que nos ha proporcionado nuestro proveedor.
  • Enter package/request: escribimos el paquete y número de orden.
  • Grabamos el proceso y activamos.

    Propiedades webservice

Definición del puerto

  • Llamamos  a la transacción SOAMANAGER. Si tienes problemas para acceder al SOAMANAGER quizás te falte activar alguna configuración.
  • Desde la pestaña Business Administration pulsamos en Web Service Administration.
  • Buscamos el proxy consumer que hemos creado previamente. Lo marcamos y pulsamos Apply selection. Se nos abre una nueva ventana más abajo.

    SOAMANAGER

  • Sobre la pestaña Configurations pulsamos el botón Create Logical Port.
  • Se nos abre otra pestaña donde indicamos el nombre de nuestro puerto lógico, de nuevo nos pide la urld del wsdl proveedor, el usuario y contraseña.

    url del wsdl

  • Si no se nos grabase el usuario y contraseña (algo que a veces pasa y no sé por qué), marcamos Edit y modificamos usuario y contraseña en la pestaña Consumer security que se nos ha abierto aún más abajo.

Lógica del programa

Nos queda definir la lógica de nuestro programa, buscar los datos en nuestro sistema y enviarlos a través del proxy que hemos creado.
  • Volvemos a la transacción SE80
  • Creamos el programa que contendrá la lógica.
  • Mantenemos el programa visible, mientras buscamos nuestro proxy cliente en el árbol de la SE80.
  • Arrastramos el proxy cliente desde el árbol al editor ABAP. Esto nos creará la plantilla ABAP.

    SE80

  • Esta plantilla contiene lo siguiente:
    • Definición de la clase del proxy.
    • Definición de la estructura del proxy (salida) donde dejaremos el string xml que enviaremos, así como el usuario y contraseña.
    • Estructura del proxy (entrada) donde recibiremos la información de respuesta del webservice de nuestro proveedor (si nos la da). Por ejemplo, un mensaje de error/Ok.
    • Creación del puerto lógico. La sentencia CREATE_OBJECT… de la plantilla abre la comunicación a través del puerto lógico creado.
    • Llamada al proxy. La sentencia CREATE_METHOD… de la plantilla se encarga de enviar la información a nuestro proveedor de webservice.
No indico el código ABAP completo, pero evidentemente esta plantilla hay que modificarla y adaptarla. Además antes de abrir la comunicación en nuestro programa ABAP debemos seleccionar los datos a enviar y transformarlos a xml mediante la función CALL_TRANSFORMATION.

Si estás interesado en más información sobre consumo de webservices pulsa en este enlace.
Y en programación orientada a objetos, tenéis un manual en la página de abap.es

Imagen inicial | tj scenes

4 comentarios:

  1. Muy buen tutorial, pero yo tengo dos problemas y te escribo para pedirte tu ayuda.
    1. Cuando creo el client proxy, no se me crean todos los tipos de datos que este necesita para poder intercambiar información.
    2. Una vez que se crea el puerto logico por la SOAMANAGER, tengo entendido que se crea una RFC Destination de tipo G en la transacción SM59 pero no sucede eso.
    Podrías ayudarme con información relevante a cualquiera de los dos problemas. Muchas gracias.

    ResponderEliminar
  2. 1. En principio a través del tutorial se deberían crear dos parámetros en el método para el proxy de cliente, uno de entrada y uno de salida. Si esto no es así, repasa con tu proveedor los parámetros que te está sirviendo.

    2. En efecto, nunca me había fijado, pero es así. De todos modos, si no es así, puede ser tal y como decías en el punto 1 que tu proxy no se está generando correctamente. También puedes localizar con tu Basis si tienes algún problema en el soamanager.

    Siento no poder serte de más ayuda. Saludos. Oscar

    ResponderEliminar
  3. Hola buen tutorial,

    Tengo una pregunta, sabes como cerrar la conexión?

    Cree un WS y este es ejecutado en un JOB, el cual hace el llamado unas 600 veces aprox cada ves que se ejecuta, hace poco un cliente me reporto que le esta apareciendo un error "No memory for processing HTTP, HTTPS or SMTP query". al buscar este error, lo que aparece es que es debido al gran numero de llamadas y que se queda abierta la conexión y nos dan una sentencia ..CALL METHOD lo_http_client- > close ().
    pero este método no funciona, debido a como se creo el llamado, tienes alguna idea de como se pudiera cerrar

    Gracias de antemano

    Saludos

    ResponderEliminar
  4. Hola, tengo el mismo inconveniente. Han encontrado la forma de cerrar la conexión?
    Gracias.

    ResponderEliminar