Consumir Webservice con SAP / ABAP
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'.