sábado, 16 de abril de 2011

Consuming Service with ABAP SOAP

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) 


2.- Seleccionamos Service Consumer


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.



DATAXXXXXXXX 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.



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.

DATAr_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.

   dataOUTPUT type ZGET_WEATHER_SOAP_OUT .
   dataINPUT  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
    .

datantotaltable TYPE sy-tabix,
      nindextable type sy-index.

datai_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