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.
-
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.
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.
-
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.
-
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.
-
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
Muy buen tutorial, pero yo tengo dos problemas y te escribo para pedirte tu ayuda.
ResponderEliminar1. 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.
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.
ResponderEliminar2. 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
Hola buen tutorial,
ResponderEliminarTengo 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
Hola, tengo el mismo inconveniente. Han encontrado la forma de cerrar la conexión?
ResponderEliminarGracias.
¿Pudisteis solucionar el problema?
ResponderEliminar