Inicio > Abap > Consumir Webservice con SAP / ABAP

Consumir Webservice con SAP / ABAP

Miércoles, 18 de Marzo de 2009 Nessy Dejar un comentario Ir a comentarios

Un ejemplo simple de como consumir Webservice (hecho en .NET) con SAP / ABAP, ya que los ejemplos encontrados en la web en general no me resultaron muy didáctico.

El Webservice a titulo de ejemplo tiene los sigientes parametros: title y details.

REPORT zwebconsume.

DATA: http_client TYPE REF TO if_http_client .

DATA: w_string TYPE string ,
w_result
TYPE string ,
r_str
TYPE string .

DATA: result_tab TYPE TABLE OF string.

START-OF-SELECTION .
CLEAR w_string .
w_string = 'http://urlhost/Logs/main.asmx/SetLog'.

CALL METHOD cl_http_client=>create_by_url
EXPORTING
url                = w_string
IMPORTING
client = http_client
EXCEPTIONS
argument_not_found =
1
plugin_not_active  =
2
internal_error     =
3
OTHERS = 4.

CALL METHOD HTTP_CLIENT->REQUEST->SET_HEADER_FIELD
EXPORTING
NAME =
'~request_method'
VALUE = 'POST'.

CALL METHOD http_client->REQUEST->SET_FORM_FIELD
EXPORTING
NAME =
'title'
VALUE = 'Mail sistema'.

CALL METHOD http_client->REQUEST->SET_FORM_FIELD
EXPORTING
NAME =
'details'
VALUE = 'Funcion 1234'.

CALL METHOD http_client->send
EXCEPTIONS
http_communication_failure =
1
http_invalid_state         =
2.

CALL METHOD http_client->receive
EXCEPTIONS
http_communication_failure =
1
http_invalid_state         =
2
http_processing_failed     =
3.
CLEAR w_result .
w_result = http_client->response->get_cdata( ).

REFRESH result_tab .
SPLIT w_result AT cl_abap_char_utilities=>cr_lf INTO TABLE
result_tab .

READ TABLE result_tab INTO r_str INDEX 2.

Lo que hay que tener en cuenta es que el envio de parametros se efectua con REQUEST->SET_FORM_FIELD y no con REQUEST->SET_DATA ya que este es para enviar todo el encabezado.

Tambien la invocación siguiente es para pasar los parametros por el metodo POST:

CALL METHOD HTTP_CLIENT->REQUEST->SET_HEADER_FIELD
EXPORTING
NAME =
'~request_method'
VALUE = 'POST'.

Share and Enjoy:
  • E-mail this story to a friend!
  • Google Bookmarks
  • Live
  • Facebook
  • Technorati
  • TwitThis
  • Pownce
  1. Daniel
    Domingo, 18 de Octubre de 2009 a las 15:49 | #1

    Hola Francisco,

    Gracias por el articulo.

    El web service al que haces referncia esta construido en .NET y tiene 2 parametros de entrada claros.

    El web service al que quiero llamar tiene la siguiente URL

    http://sas-d.sermepa.es/TPV_PC/services/SerClsWSPeticionSOAP

    y el XML que quiero enviar a esta URL es el siguiente

    <![CDATA[

    5410080008888005
    1212
    123

    840
    0.50
    309571370
    1
    FAC-0001
    PAGO

    20091016 140000
    0a355912412f858ec52cfb5634967146c2c7a8e0

    ]]>

    Como lo pasaria segun tus llamadas??

    Muchas gracias
    Daniel

  2. Lunes, 19 de Octubre de 2009 a las 20:20 | #2

    @Daniel Hola Daniel, gracias por tu comentario, no veo el XML en tu comentario porque seguro que el Wordpress lo saco. En mi caso yo no enviaría XML como parámetros sino simple valores texto o en de ultima en formato JSON.
    En todo caso si puedo ayudar con indicarte en tu caso que reemplaze la linea:

    w_string = ‘http://urlhost/Logs/main.asmx/SetLog’.

    por

    w_string = ‘http://sas-d.sermepa.es/TPV_PC/services/SerClsWSPeticionSOAP’.

    El parametros en cuestion seria el XML como un parametro texto llamado “xmlData” de la siguiente forma:

    CALL METHOD http_client->REQUEST->SET_FORM_FIELD
    EXPORTING
    NAME = ‘xmlData’
    VALUE = ‘… aca iria el xml en formato texto …’.

  3. juanca
    Miércoles, 6 de Enero de 2010 a las 09:44 | #3

    Si quiere consumir un webservice hecho en SAP, sería igual?

  4. Mario
    Lunes, 29 de Marzo de 2010 a las 15:26 | #4

    Hola Francisco, si yo quiero consumir un webservice al momento de grabar una factura, y enviar como parametro el folio que se acaba de grabar, como podría hacerlo? muchas gracias!

  5. Miércoles, 31 de Marzo de 2010 a las 14:32 | #5

    No conozco el consumo de un Webservice del lado de SAP. Pero si este respesta los estandares de SOAP, seria lo mismo.

  6. Miércoles, 31 de Marzo de 2010 a las 14:45 | #6

    Hola Mario, para enviar una imagen, conviene que el cliente que consume el Webservice envie ese parámetro en un Array de Bytes para eso te sugiero que el cliente sea una aplicación ejecutable.

  1. Sin trackbacks aún.