Domingo, 23 Marzo 2014 00:00

Consumir Servicios Web externos desde SAP

Escrito por
Valora este artículo
(2 votos)

El objetivo de este artículo es utilizar un servicio web desde un sistema SAP, basándonos en el uso de un servicio externo que puede ser otro sistema SAP, o un servicio creado con otra tecnología, para ello utilizaremos la definición suministrada por nuestro proveedor de servicio, bien a través de una URL o a través de un fichero XML con la definición WSDL. Para lograrlo lo primero que debemos hacer es configurar un cliente proxy en SAP que nos permita conectar con el proveedor.


Para consumir un servicio web desde SAP, debemos crear un cliente proxy desde la transacción SE80, pulsando “Tratar Objeto”, y luego seleccionando la pestaña “Enterprise Service”, pulsamos crear cliente, y nos aparecerá el asistente que nos guiará en el proceso.
Seleccionamos la opción de “Externa WSDL”, le damos a continuar, luego marcamos la opción de URL, si vamos a indicar la dirección web del servicio, o “Local File” si vamos a cargar el fichero XML con la definición del servicio WSDL.
Especificamos la orden de transporte, y finalizamos indicando nuestro usuario SAP, guardando y activando.


Al igual que ocurría al crear una definición de servicio, el  cliente proxy no se encuentra disponible aún.
Debemos acceder a la transacción SOAMANAGER y crear una puerta de enlace para poder usar el cliente generado.
Accedemos a la opción “Web Service Configuration”, y allí buscamos por “Consumer Proxy”, y pulsamos “Apply Selection”, luego vamos a la pestaña “Configurations”, y pulsamos “Create”, para diseñar la puerta lógica. Completamos los datos requeridos, marcando la opción de “Logical Port is Default”, para no tener que indicar en cada ejecución el nombre de la puerta, y volvemos a añadir la URL del servicio, o a cargar el fichero WSDL.


Si queremos usar un usuario por defecto para consumir el servicio podemos indicarlo antes de finalizar.
Una vez aceptada la configuración de la puerta lógica, volveremos a la pantalla inicial, y deberemos hacer scroll para configurar algunos parámetros más, o simplemente guardar la puerta lógica.

 


Ahora podemos consumir el cliente desde SAP, volvemos a la SE80, accedemos al objeto cliente proxy, y lo ejecutamos.
Se mostrará una plantilla basada en la definición de servicio, y debemos cambiar los valores propuestos por los deseados para la ejecución del servicio. Para ello pulsaremos sobre el editor XML, y cambiaremos los datos, luego volveremos y lo ejecutaremos. Finalmente, si todo está bien obtendremos una nueva pestaña con la respuesta del servicio.

 

 

La principal diferencia entre montar un cliente para consumir un servicio de otro sistema SAP, y montar un cliente para un servicio externo creado con otra tecnología, es que dependeremos de que nuestro sistema SAP sea capaz de implementar bien todos los estándares, y los protocolos necesarios para el uso del servicio. Si SAP no da soporte a la definición de servicio usada en el fichero WSDL externo, no nos permitirá montar el cliente para utilizarlo, o surgirán posibles errores durante la ejecución.

 

Acciones para solventar posibles errores
Podemos probar a realizar varios intentos desde el asistente, usando la URL del servicio, y el fichero guardado en local, para descartar un fallo por fichero corrupto, o un problema en el servidor, en el caso de que sólo nos permita montar el cliente de una de la formas.
Si no podemos montarlo de ninguna forma, lo siguiente que debemos descartar es si se trata de un error del asistente de SAP al tratar de montar el cliente, para ello podemos recurrir a la transacción SOAMANAGER, que permite cargar y analizar ficheros WSDL desde la pestaña “Tool”, y nos dejará cargar el fichero, informando de los posibles errores.
Si desde un programa externo como SoapUI, si se carga y consume bien el servicio, podemos determinar que la definición WSDL es correcta, y que por lo tanto se trata de un problema del sistema SAP para montar el cliente.

Bajo SAP existen una serie de elementos y atributos del esquema XML que no están soportados por motivos técnicos, y existe un documento oficial al respecto en el que se detallan aquellas características no soportadas, y el nivel de incompatibilidad que presentan con el sistema.
En ocasiones puede editarse el fichero para evitar elementos no soportados, y puede que SAP lo identifique como válido, pero eso no garantiza que se vaya a soportar el servicio por completo, por lo que  pueden aparecer fallos parciales o totales.

 

Ejemplo de fallo tras editar un fichero WSDL
Tras editar un fichero WSDL, SAP pudo montar un cliente, y ofrecer una URL para montar una puerta lógica, asociada al cliente proxy creado.
Pero al lanzar el cliente obteníamos una ejecución correcta si marcábamos la opción “Pass through XML data”, en los métodos sin parámetros de entrada, y un error “SOAP:1.001 CX_ST_GROUP_MISSING_CASE”, si no se marcaba la opción.
Pero en los métodos con parámetros de entrada, se generaba siempre el error “SoapFaultCode:5 Found element X but could not find matching RPC/Literal part”, incluso cuando se llamaba al método desde el código de un programa.
A continuación ampliaremos en que consistía este error, que está relacionado con el formato RPC/Literal, en el que estaba basada la definición WSDL.

 

Tipos de ficheros WSDL según su " Estilo / Uso "
Ya hemos visto que un documento WSDL describe un servicio web, y el enlace describe como el servicio esta usando el protocolo SOAP. Para el enlace WSDL, SOAP tiene dos atributos principales: El atributo “estilo”, que puede ser RPC o document, y el atributo “uso” que puede ser igual a enconded o literal.
Esto da cuatro combinaciones de modelos style/use:

  • RPC / ENCODED
  • RPC / LITERAL
  • DOCUMENT / ENCODED
  • DOCUMENT / LITERAL

 

Error RPC/LITERAL
Al parecer, los servicios Web de estilo RPC no son compatibles dentro del adaptador de SOAP XI. En su lugar hay que cambiar la definición WSDL de estilo RPC a estilo DOCUMENT/LITERAL.

 

Visto 144327 veces Modificado por última vez en Miércoles, 23 Septiembre 2015 15:13
Más en esta categoría: « SAPconnect y el envío de correos