1.- Creamos el servicio como se muestra en la ventana, este debe ser creado desde el paquete para que pueda aparecer la opción (Enterprise Service- desde la versión Sap Netweaver 7.0)
3.- En este paso seleccionamos la ubicación de nuestro servicio, para nuestro caso seleccionamos URL Http Destination.
4.- Introducimos el WSDL (Web Service Description Language) de nuestro servicio.
http://www.webservicex.net/globalweather.asmx?WSDL
5.- Seleccionamos el Paquete y prefijo que usaremos.
6.- Finalizamos
7.- Seleccionamos el tipo de puerto que usaremos.
8-. Importante que luego del paso 7 se presione SALVAR y luego ACTIVAR. Para asi luego poder navegar y curiosear sobre las características de nuestro servicio.
9.- Características desde el punto de vista externo.
10.- Características desde el punto de vista interno.
11.- El servicio creado de manera automatica es ZCO_GLOBAL_WEATHER_SOAP
12.- Soamanager. es la transacción por la cual configuramos el puerto lógico de comunicación con el servicio, es una herramienta poderosa que nos permite enlazar nuestra aplicación. De esta manera una vez transportado nuestra aplicación a otro ambiente, solo bastara con crear el puerto lógico, sea Calidad o Producción.
13.- Seleccionaremos la pestaña de Service Administration, luego el link Single Service Configuration.
14.- Haremos una búsqueda de nuestro servicio para así crear el puerto lógico relacionado con el.
15.- Con nuestro servicio seleccionado, presionamos aplicar selección, con esto se nos mostrara una ventana mas abajo para la creación del puerto lógico.
16.- Click en el puerto logico y pasamos a llenar los valores que nos solicitan.
NO PASAR POR ALTO el valor Default y las demás características para el puerto. Nuevamente en este paso usaremos la WSDL de nuestro servicio. De necesitar crear varios puertos para la misma aplicación dejaremos el ckeck field de DEFAULT vacio. para que así luego sea ingresado por código.
17.- Importante una vez seleccionado la configuración presionar el botón SAVE para salvar. nuestro puerto se activara automáticamente una vez salvado.
18.- Luego crearemos nuestra aplicación ABAP para asi consumirlo.
DROP & DRAG: seleccionamos nuestro servicio y lo arrastraremos hasta nuestro programa. Este nos generara el siguiente codigo.
Aparecerá nuestro servicio y escogeremos el method que querremos implementar.
DATA: XXXXXXXX TYPE REF TO ZCO_GLOBAL_WEATHER_SOAP .
TRY.
CREATE OBJECT XXXXXXXX
* EXPORTING
* LOGICAL_PORT_NAME =
.
CATCH CX_AI_SYSTEM_FAULT .
ENDTRY.
* data: OUTPUT type ZGET_WEATHER_SOAP_OUT .
* data: INPUT type ZGET_WEATHER_SOAP_IN .
*TRY.
CALL METHOD XXXXXXXX->GET_WEATHER
EXPORTING
INPUT =
* IMPORTING
* OUTPUT =
.
* CATCH CX_AI_SYSTEM_FAULT .
* CATCH CX_AI_APPLICATION_FAULT .
*ENDTRY.
TRY.
CREATE OBJECT XXXXXXXX
* EXPORTING
* LOGICAL_PORT_NAME =
.
CATCH CX_AI_SYSTEM_FAULT .
ENDTRY.
* data: OUTPUT type ZGET_WEATHER_SOAP_OUT .
* data: INPUT type ZGET_WEATHER_SOAP_IN .
*TRY.
CALL METHOD XXXXXXXX->GET_WEATHER
EXPORTING
INPUT =
* IMPORTING
* OUTPUT =
.
* CATCH CX_AI_SYSTEM_FAULT .
* CATCH CX_AI_APPLICATION_FAULT .
*ENDTRY.
Luego de algunos cambios al codigo adecuandolo a nuestro requerimiento tendriamos algo como esto.
*&---------------------------------------------------------------------*
*& Report ZTEST_SERVICES_TEMP
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_SERVICES_TEMP.
DATA err_fault TYPE REF TO CX_AI_SYSTEM_FAULT.
DATA app_fault TYPE REF TO CX_AI_APPLICATION_FAULT.
DATA: r_weather TYPE REF TO ZCO_GLOBAL_WEATHER_SOAP .
TRY.
CREATE OBJECT r_weather
* EXPORTING
* LOGICAL_PORT_NAME =
.
CATCH CX_AI_SYSTEM_FAULT into err_fault.
MESSAGE err_fault TYPE 'E'.
ENDTRY.
data: OUTPUT type ZGET_WEATHER_SOAP_OUT .
data: INPUT type ZGET_WEATHER_SOAP_IN .
input-CITY_NAME = 'Caracas'.
input-COUNTRY_NAME = 'Venezuela'.
TRY.
CALL METHOD r_weather->GET_WEATHER
EXPORTING
INPUT = input
IMPORTING
OUTPUT = output
.
data: ntotaltable TYPE sy-tabix,
nindextable type sy-index.
data: i_result type table of string,
wa_result TYPE string.
split output-GET_WEATHER_RESULT at ' / '
into table i_result.
describe table i_result lines ntotaltable.
loop at i_result into wa_result.
nindextable = sy-tabix.
if nindextable = ntotaltable.
delete i_result index nindextable.
continue.
endif.
write:/ wa_result.
endloop.
*write: output-GET_WEATHER_RESULT.
CATCH CX_AI_SYSTEM_FAULT into err_fault.
MESSAGE err_fault TYPE 'E'.
CATCH CX_AI_APPLICATION_FAULT into app_fault.
MESSAGE app_fault type 'E'.
ENDTRY.
*& Report ZTEST_SERVICES_TEMP
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_SERVICES_TEMP.
DATA err_fault TYPE REF TO CX_AI_SYSTEM_FAULT.
DATA app_fault TYPE REF TO CX_AI_APPLICATION_FAULT.
DATA: r_weather TYPE REF TO ZCO_GLOBAL_WEATHER_SOAP .
TRY.
CREATE OBJECT r_weather
* EXPORTING
* LOGICAL_PORT_NAME =
.
CATCH CX_AI_SYSTEM_FAULT into err_fault.
MESSAGE err_fault TYPE 'E'.
ENDTRY.
data: OUTPUT type ZGET_WEATHER_SOAP_OUT .
data: INPUT type ZGET_WEATHER_SOAP_IN .
input-CITY_NAME = 'Caracas'.
input-COUNTRY_NAME = 'Venezuela'.
TRY.
CALL METHOD r_weather->GET_WEATHER
EXPORTING
INPUT = input
IMPORTING
OUTPUT = output
.
data: ntotaltable TYPE sy-tabix,
nindextable type sy-index.
data: i_result type table of string,
wa_result TYPE string.
split output-GET_WEATHER_RESULT at ' / '
into table i_result.
describe table i_result lines ntotaltable.
loop at i_result into wa_result.
nindextable = sy-tabix.
if nindextable = ntotaltable.
delete i_result index nindextable.
continue.
endif.
write:/ wa_result.
endloop.
*write: output-GET_WEATHER_RESULT.
CATCH CX_AI_SYSTEM_FAULT into err_fault.
MESSAGE err_fault TYPE 'E'.
CATCH CX_AI_APPLICATION_FAULT into app_fault.
MESSAGE app_fault type 'E'.
ENDTRY.
FINALMENTE:
MUY PRONTO CONSUMIÉNDOLO DESDE WEB DYNPRO ABAP
Gracias por compartirlo, dure varias semanas buscando algo al respecto y esto me ayudo mucho.
ResponderEliminarDebo aclarar que en la versión 700, no acepta llamados http ni soap 1.2, por lo cual se debe bajar el fichero WSDL a la maquina local y editarlo, eliminando todos los puertos, mesages y binding del archivo que contengan llamados a http.
Hola Estoy trabajando con un caso parecido me indicas como bajar el WSDL?
ResponderEliminarGracias.