Additional Blogs by Members
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member

Buenas días,

me gustaría ayudar con mi granito de arena en esta comunidad.

A continuación os detallo como consumir un web service desde un sistema SAP Gateway. Prácticamente los pasos son muy similares en otros sistemas, por lo que os puede servir en otros entornos:

  • Creación de Cliente Proxy y Puerta Lógica:
    • Creación de un Cliente Proxy (Service Consumer): Tx: SPROXY -> New Object -> Service Consumer...
    • Creación de puerta Lógica para cliente Proxy: Tx: SOAMANAGER -> Web Service Configuration:
    • Buscamos nuestro Cliente Proxy y pulsamos sobre él.
    • Creamos puerta lógica, con los siguientes datos:
      • El nombre del Proxy: "nombreElegidoClienteProxy"
      • El nombre del puerto que hay que añadir: "ZLP_NOMBRE_PUERTO"
      • La descripción del puerto: "descripcion"
      • El sistema: "sistema_gateway"
      • La URL: "URL del web service terminado en ?wsdl"
      • Puerto por defecto (Si/No): Si

  • Lógica: Este servicio GW actúa como puente entre una aplicación SAPUI5 y y un Web Service externo, por lo que simplemente me limitaré a recoger el parámetro de entrada de GW y mandarlo al Servicio Web externo. La respuesta del Servicio GW consiste en devolver el parámetro retornado por el Web Service Externo.

  • Implementación del código: Os detallo antes los detalles técnicos de nuestro servicio GW, Servicio Web externo y el código fuente:
    • Servicio GW: Contiene un parámetro de entrada y parámetro de salida.
    • Servicio Web externo:  Contiene un parámetro de entrada y otro de salida.


DATA: proxy           TYPE REF TO " Nombre de proxy creado"
              p_port          TYPE prx_logical_port_name VALUE 'Puerto logico"
              lw_input        TYPE "Parametro entrada WS"
              lw_output       TYPE "Parametro salida WS"
**Recogemos parametro de entrada de servicio invocado en Gateway
READ TABLE it_parameter INTO ls_parameter WITH KEY name = "nombreParam".
    IF sy-subrc = 0.
      parametro_entrada_1 = ls_parameter-value.
    ENDIF.
**Creamos instancia de proxy
TRY.
    CREATE OBJECT proxy
      EXPORTING
        logical_port_name = p_port.
  CATCH cx_ai_system_fault.
    lv_msg_error = 'MENSAJE_ERROR'.
ENDTRY.
**Preparamos parametro de entrada para llamada a Web Service
lw_input-parameters-.... = .....
** llamada al Web Service
    TRY.
        CALL METHOD proxy->"OPERACION_WEB_SERVICE"
          EXPORTING
            input  = lw_input
          IMPORTING
            output = lw_output.
      CATCH cx_ai_system_fault.
        lv_msg_error = 'MENSAJE_ERROR.
    ENDTRY.
**Devolvemos resultados
resultados = lw_output-.......

Bueno, si tenéis alguna duda o queréis hacer alguna corrección aquí estamos, :smile: .

Saludos!