En ocasiones vamos a necesitar conectar aplicaciones externas con nuestro SAP a través de webservices. En este artículo veremos cómo consumir un WebService SOAP desde SAP.
Para empezar debemos tener en cuenta que, al ser un servicio web, necesitaremos una dirección desde la que obtendremos el WSDL, que es el fichero en el que encontraremos la estructura que deberá tendrá nuestro WebService (WS), en este caso utilizaremos el siguiente:
http://www.webservicex.net/length.asmx?WSDL
Tras conseguir nuestro link al WS y comprobar que el funcionamiento es correcto, y que al entrar a él descarga un fichero WSDL tendremos que realizar los siguientes pasos:
- Crear un Service-Consumer (SC) (Cliente Proxy).
- Crear el Logical Port.
- Crear programa ABAP para consumir Web Service.
Crear Service-Consumer (Cliente proxy)
A continuación crearemos el Service Consumer, que usaremos para consumir nuestro servicio SOAP desde SAP.
Para empezar crearemos un paquete desde SE80 (ZARTICULO en este caso) en el que guardaremos nuestro SC.
Una vez creado el paquete, para crear nuestro Service Consumer tendremos que realizar la siguiente acción:
Click derecho sobre el paquete -> Crear à Enterprise Service.
Nos saldrá a continuación la siguiente ventana, en la que deberemos elegir SC.
Una vez realizado esto, continuaremos, y nos dará a elegir entre 3 opciones:
- Backend
- Enterprise Service Respository
- External WSDL/Schema
Elegiremos External WSDL/Schema, debido a que nuestro WSDL será importado.
Pasando a la siguiente pantalla, tendremos la opción de elegir de qué manera queremos importar nuestro WSDL. En este caso podemos hacerlo mediante dos métodos:
- descargar el fichero desde la URL que he dejado anteriormente, y seleccionar la opción de Local File
- o introducir directamente la URL mediante la opción HTTP Destination.
En este caso utilizaremos la primera opción, aunque ambas son válidas.
Tras realizar esto tendremos que seleccionar el tipo de puerto que queremos usar. Como en este artículo estamos aprendiendo a consumir un servicio SOAP, elegiremos la opción lengthUnitSoap, y continuaremos con el proceso, para llegar al último paso.
Tendremos que elegir el paquete al que va a pertenecer el servicio, la orden en la que lo crearemos, y un prefijo, el cual servirá para que al crear la clase, se cree con ese prefijo. En este caso utilizaremos el prefijo ZART.
Por último, y para terminar con nuestro Service-Consumer, clicaremos en Concluir.
Nos aparecerá en la pantalla nuestro Service Consumer, desde la cual podremos editar el nombre por ejemplo, y como podemos comprobar se habrá creado con el prefijo anteriormente elegido. Guardamos y nuestro SC estará terminado.
Crear Logical Port (LP)
El Logical Port (LP) nos permitirá llamar al servicio externo. Para crearlo tenemos dos opciones:
- Desde la propia pantalla anteriormente nombrada. Tras activar nuestro SC, nos aparecerá una nueva opción en el menú, Start SOA Manager.
- La otra opción sería abrirlo desde la TX SOAMANAGER.
Tendremos que seguir los siguientes pasos para la creación de nuestro Logical Port (LP):
Create -> Create WSDL Based Configuration.
Nos pedirá un nombre para el LP. En este caso usaremos ZART_LP y checkearemos la opción de Logical Port is Default (esta opción dejará este puerto por defecto, y a la hora de ejecutar ejecutará el mismo).
En la siguiente pantalla, dependiendo de cómo hayamos creado anteriormente nuestro Service Consumer (desde fichero o mediante HTTP) elegiremos una u otra. En este caso Via File y seleccionaremos el WSDL anteriormente descargado.
Continuaremos hasta que nos salga la pantalla “Transport Binding”. En esta pantalla podremos cambiar distintas cosas, aunque en este caso tal y como viene estará bien configurado y por lo tanto no tenemos que cambiar nada, clicaremos en Finish, y nuestro LP estará creado.
Crear programa ABAP
Por último y no menos importante crearemos un programa en la SE80 en el que introduciremos el siguiente código (depende del programa el código será distinto):
REPORT ZART_CONSUMER. DATA: lv_conv TYPE REF TO zartco_length_unit_SOAP, "Clase proxy (Service Consumer) lv_out TYPE ZARTCHANGE_LENGTH_UNIT_SOAP_OU, "Método de salida lv_in TYPE ZARTCHANGE_LENGTH_UNIT_SOAP_IN, "Método de entrada int TYPE i. PARAMETERS: p_valor TYPE i. TRY. CREATE OBJECT lv_conv EXPORTING logical_port_name = 'ZART_LP'. "Nombre de nuestro Logical Port CATCH cx_ai_system_fault . ENDTRY. lv_in-from_length_unit = 'Meters'. lv_in-to_length_unit = 'Centimeters'. lv_in-length_value = p_valor. CALL METHOD lv_conv->change_length_unit EXPORTING input = lv_in IMPORTING output = lv_out. int = lv_out-change_length_unit_result. WRITE: int.
Lo único que nos queda es ejecutar nuestro programa, y verificar que la conexión y el resultado es correcto.
Así es como se conectan servicios externos con SAP mediante webservices SOAP en diferentes contextos.
En Oreka IT somos especialistas en SAP. Seguro que podemos ayudarte con tu proyecto. ¡Contáctanos!