0% encontró este documento útil (0 votos)
153 vistas14 páginas

Api Rest

Este documento describe una clase ZCL_CONSUMER_REST_TEST que proporciona métodos para realizar solicitudes a una API REST. Contiene atributos como la URL base y el cliente HTTP, y métodos como GET, POST, PUT y POST_JSON_INPUT para realizar diferentes tipos de solicitudes a la API y procesar la respuesta. También incluye métodos para convertir datos entre formatos JSON y tablas internas.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
153 vistas14 páginas

Api Rest

Este documento describe una clase ZCL_CONSUMER_REST_TEST que proporciona métodos para realizar solicitudes a una API REST. Contiene atributos como la URL base y el cliente HTTP, y métodos como GET, POST, PUT y POST_JSON_INPUT para realizar diferentes tipos de solicitudes a la API y procesar la respuesta. También incluye métodos para convertir datos entre formatos JSON y tablas internas.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 14

ZCL_CONSUMER_REST_TEST

-- ATRIBUTOS --
HTTP_CLIENT Static Attribute Private Type Ref To IF_HTTP_CLIENT
HTTP Client Abstraction
WA_PARAMETER Static Attribute Private Type
ZESD_KEYVALUES Estructura Clave Valor para las consultas API REST
CODE_RESPONSE Static Attribute Public Type I
Codigo de respuesta HTTP
REASON_RESPONSE Static Attribute Public Type STRING
Razon de respuesta HTTP
BASE_URL Static Attribute Private Type STRING
Url base utilizada para las consultas

-- METODOS --
ADD_PARAMETER_URL Static Method Private
Generar URL para metodos GET
CLASS_CONSTRUCTOR Static Method Public Constructor STATICO
CONVERTIR_FECHA Static Method Public
Convertir STRING a fecha
CONVERTIR_HORA Static Method Public
Convertir STRING a hora
DATA_TO_JSON Static Method Private
Conversión de tabla interna a JSON
GET Static Method Private
Obtener data de una API REST mediante GET
GET_JSON_INPUT Static Method Private
Obtener data de una API REST mediante GET con input JSON
JSON_TO_DATA Static Method Private
Conversión de JSON a tabla interna
POST Static Method Private
Obtener data de una API REST mediante POST
POST_JSON_INPUT Static Method Private
Obtener data de una API REST mediante POST con input JSON
PUT Static Method Private
Obtener data de una API REST mediante PUT

METHOD put.
" @78\QImporting@ URL TYPE STRING URL de solicitud
" @78\QImporting@ TOKEN TYPE STRING Token de Autorización
" @78\QImporting@ PARAMETERS TYPE ZTTSD_KEYVALUES OPTIONAL Tipo tabla Clave Valor
para las consultas API REST
" @7A\QChanging@ RESPONSE TYPE STRING Respuesta a la petición

DATA: ls_url_parameters TYPE string.


DATA: ls_name TYPE string.
MOVE: url TO ls_url_parameters.

* Creamos el objeto para la realizacion de las peticiones


CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = ls_url_parameters
IMPORTING
client = http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4.
* Agregamos los parametros a la cosulta
LOOP AT parameters INTO wa_parameter.
MOVE wa_parameter-fieldname TO ls_name.
CALL METHOD http_client->request->set_form_field
EXPORTING
name = ls_name
value = wa_parameter-value.
ENDLOOP.

* Se establece el método GET o POST


CALL METHOD http_client->request->set_header_field
EXPORTING
name = '~request_method'
value = 'PUT'.

* Añadir el token de autorización


CALL METHOD http_client->request->set_header_field
EXPORTING
name = 'Authorization'
value = token.

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.

IF sy-subrc EQ 0.
CALL METHOD http_client->response->get_status
IMPORTING
code = code_response
reason = reason_response.

response = http_client->response->get_cdata( ).
ELSE.
code_response = -1.
ENDIF.

ENDMETHOD.

METHOD post_json_input.
" @78\QImporting@ URL TYPE STRING Url de la API a consultar
" @78\QImporting@ TOKEN TYPE STRING
" @78\QImporting@ JSON TYPE STRING Input JSON para la petición
" @7A\QChanging@ RESPONSE TYPE STRING Respuesta

DATA: ls_url_parameters TYPE string.


DATA: ls_name TYPE string.
MOVE: url TO ls_url_parameters.

* Creamos el objeto para la realizacion de las peticiones


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

* Agregamos la data a la cosulta


CALL METHOD http_client->request->set_cdata
EXPORTING
data = json.

* Se establece el método GET o POST


CALL METHOD http_client->request->set_header_field
EXPORTING
name = '~request_method'
value = 'POST'.

* Se establece el tipo de input a enviar


CALL METHOD http_client->request->set_header_field
EXPORTING
name = 'Content-Type'
value = 'application/json'.

* Añadir el token de autorización


CALL METHOD http_client->request->set_header_field
EXPORTING
name = 'Authorization'
value = token.

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.

IF sy-subrc EQ 0.
CALL METHOD http_client->response->get_status
IMPORTING
code = code_response
reason = reason_response.

response = http_client->response->get_cdata( ).
ELSE.
code_response = -1.
ENDIF.
ENDMETHOD.

METHOD post.
" @78\QImporting@ URL TYPE STRING Url de petición
" @78\QImporting@ PARAMETERS TYPE ZTTSD_KEYVALUES OPTIONAL Tipo tabla Clave Valor
para las consultas API REST
" @78\QImporting@ TOKEN TYPE STRING OPTIONAL Token de autorización
" @7A\QChanging@ RESPONSE TYPE STRING Respuesta de petición

DATA: ls_url_parameters TYPE string.


DATA: ls_name TYPE string.
MOVE: url TO ls_url_parameters.

* Creamos el objeto para la realizacion de las peticiones


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

* Agregamos los parametros a la cosulta


LOOP AT parameters INTO wa_parameter.
MOVE wa_parameter-fieldname TO ls_name.
CALL METHOD http_client->request->set_form_field
EXPORTING
name = ls_name
value = wa_parameter-value.
ENDLOOP.

* Se establece el método GET o POST


CALL METHOD http_client->request->set_header_field
EXPORTING
name = '~request_method'
value = 'POST'.

* Añadir el token de autorización


CALL METHOD http_client->request->set_header_field
EXPORTING
name = 'Authorization'
value = token.

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.

IF sy-subrc EQ 0.
CALL METHOD http_client->response->get_status
IMPORTING
code = code_response
reason = reason_response.
response = http_client->response->get_cdata( ).
ELSE.
code_response = -1.
ENDIF.
ENDMETHOD.

METHOD json_to_data.
CHECK: json IS NOT INITIAL.

" @78\QImporting@ JSON TYPE STRING String en JSON a convertir en tabla interna
" @7A\QChanging@ DATA TYPE ANY Tabla interna del string JSON

DATA: lv_off TYPE i.


DATA: lv_len TYPE i.
DATA: lv_key TYPE string.
DATA: lv_value TYPE string.
DATA: lv_char TYPE char1. "Current chacater
DATA: lv_pchar TYPE char1. "Previous character
DATA: lv_instr TYPE boole_d. "Indicator: cursor in string
DATA: lv_level TYPE i. "Depth inside a block
DATA: lv_table TYPE boole_d.
FIELD-SYMBOLS: <fk> TYPE string.
FIELD-SYMBOLS: <data> TYPE ANY.
FIELD-SYMBOLS: <table> TYPE ANY TABLE.
FIELD-SYMBOLS: <sotab> TYPE SORTED TABLE.
FIELD-SYMBOLS: <sttab> TYPE STANDARD TABLE.
FIELD-SYMBOLS: <line> TYPE ANY.
DATA: ls_line TYPE REF TO data.
DATA: lr_td TYPE REF TO cl_abap_typedescr.
DATA: lr_ttd TYPE REF TO cl_abap_tabledescr.
*If the incoming json contains no '{}[]', we are dealing with
*a basic (scalar) value that is simply assigned to the data
*and then we return
IF json NA '{}[]'.
*Replace escape characters (TODO: Check if there are more!)
lv_value = json.
REPLACE ALL OCCURRENCES OF '\n' IN lv_value WITH
cl_abap_char_utilities=>newline.
REPLACE ALL OCCURRENCES OF '\t' IN lv_value WITH
cl_abap_char_utilities=>horizontal_tab.
REPLACE ALL OCCURRENCES OF '\f' IN lv_value WITH
cl_abap_char_utilities=>form_feed.
REPLACE ALL OCCURRENCES OF '\v' IN lv_value WITH
cl_abap_char_utilities=>vertical_tab.
REPLACE ALL OCCURRENCES OF '\b' IN lv_value WITH
cl_abap_char_utilities=>backspace.
REPLACE ALL OCCURRENCES OF '\\' IN lv_value WITH '\'.
*TODO: Deal with specific data types, e.g. dates etc.
IF lv_value NE 'null'.
data = lv_value.
ENDIF.
EXIT.
ENDIF.
lv_len = STRLEN( json ).
*Check if we are dealing with a table
lr_td = cl_abap_typedescr=>describe_by_data( data ).
IF lr_td->type_kind = cl_abap_typedescr=>typekind_table.
*This information is used later...
lv_table = 'X'.
ASSIGN data TO <table>.
CREATE DATA ls_line LIKE LINE OF <table>.
ASSIGN ls_line->* TO <line>.
ELSE.
lv_table = ' '.
ENDIF.
*Reset counters/flags
lv_off = 0.
lv_instr = ' '.
lv_level = 0.
ASSIGN lv_key TO <fk>.
WHILE lv_off < lv_len.
lv_char = json+lv_off(1).
**********************************************************************
*IN STRING
**********************************************************************
*Character is in a string delimited by double quotes
IF lv_instr = 'X'.
IF lv_char = '"'.
*Switch out of delimited character string
IF lv_pchar NE '\'.
lv_instr = ' '.
ELSE.
CONCATENATE <fk> lv_char INTO <fk> RESPECTING BLANKS.
ENDIF.
ELSE.
CONCATENATE <fk> lv_char INTO <fk> RESPECTING BLANKS.
ENDIF.
**********************************************************************
*OUTSIDE STRING
**********************************************************************
*Character is not in a string delimited by double quotes
ELSE.
*On opening character, shift level up
IF lv_char CA '{['.
ADD 1 TO lv_level.
ENDIF.
*When the value is contained in a {}/[], the entire value must
*be passed to the next level of processing
IF lv_level > 1.
CONCATENATE <fk> lv_char INTO <fk> RESPECTING BLANKS.
ELSE.
IF lv_char CA '[{'. "<- Chars ignored outside of str
ELSEIF lv_char = ':'.
ASSIGN lv_value TO <fk>.
*The key collected up to now is assigned to the data member
TRANSLATE lv_key TO UPPER CASE.
SHIFT lv_key LEFT DELETING LEADING space.
ASSIGN COMPONENT lv_key OF STRUCTURE data TO <data>.
*End of a key/value pair (we bump up against delimiter) - pass to next level
ELSEIF ( lv_char = ',' OR lv_char = '}' ) AND lv_table = space.
IF lv_key = 'SORT' OR lv_key = 'FILTER'.
lv_value = ''.
ENDIF.

*Process collected value


SHIFT lv_value LEFT DELETING LEADING space.
json_to_data( EXPORTING json = lv_value CHANGING data = <data> ).
*Clear key and value
CLEAR: lv_key, lv_value.
ASSIGN lv_key TO <fk>.
CLEAR: lv_key, lv_value.
*End of a key/value pair (we bump up against delimiter) - pass to next level
*But in table mode, we pass an instance of a row of the table, and afterward
*add it to the table

ELSEIF ( lv_char = ',' OR lv_char = ']' ) AND lv_table = 'X'.


*Process collected value
*Inside array in JSON, there are no keys, only list of values, the collected
*value is in lv_key
SHIFT lv_key LEFT DELETING LEADING space.
json_to_data( EXPORTING json = lv_key CHANGING data = <line> ).
*On return: if dealing with table, add the record to the table
lr_ttd ?= lr_td.
IF lr_ttd->table_kind = cl_abap_tabledescr=>tablekind_sorted
OR lr_ttd->table_kind = cl_abap_tabledescr=>tablekind_hashed.
ASSIGN data TO <sotab>.
INSERT <line> INTO TABLE <sotab>.
ELSE.
ASSIGN data TO <sttab>.
APPEND <line> TO <sttab>.
ENDIF.
CLEAR <line>.
*Clear key and value
CLEAR: lv_key, lv_value.
ASSIGN lv_key TO <fk>.
CLEAR: lv_key, lv_value.
*Switch cursor into delimited string; consecutive characters
*are then treated as part of a key or value, even if they are
*special characters
ELSEIF lv_char = '"'.
lv_instr = 'X'.
*Other chars processed as either key or value
ELSE.
CONCATENATE <fk> lv_char INTO <fk> RESPECTING BLANKS.
ENDIF.
ENDIF.
*On closing character, shift level down again
IF lv_char CA '}]'.
SUBTRACT 1 FROM lv_level.
ENDIF.
*END: Are we in string or out?
ENDIF.
lv_pchar = lv_char.
ADD 1 TO lv_off.
ENDWHILE.
ENDMETHOD.

METHOD get_json_input.
" @78\QImporting@ URL TYPE STRING Url de la API a consultar
" @78\QImporting@ TOKEN TYPE STRING
" @78\QImporting@ JSON TYPE STRING Input JSON para la petición
" @7A\QChanging@ RESPONSE TYPE STRING Respuesta

DATA: ls_url_parameters TYPE string.


MOVE: url TO ls_url_parameters.
* Creamos el objeto para la realizacion de las peticiones
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = ls_url_parameters
IMPORTING
client = http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4.

* Agregamos la data a la cosulta


CALL METHOD http_client->request->set_cdata
EXPORTING
data = json.

* Se establece el método GET o POST


CALL METHOD http_client->request->set_header_field
EXPORTING
name = '~request_method'
value = 'GET'.

* Se establece el tipo de input a enviar


CALL METHOD http_client->request->set_header_field
EXPORTING
name = 'Content-Type'
value = 'application/json'.

* Añadir el token de autorización


CALL METHOD http_client->request->set_header_field
EXPORTING
name = 'Authorization'
value = token.

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.

IF sy-subrc EQ 0.
CALL METHOD http_client->response->get_status
IMPORTING
code = code_response
reason = reason_response.

response = http_client->response->get_cdata( ).
ELSE.
code_response = -1.
ENDIF.
ENDMETHOD.

METHOD get.
" @78\QImporting@ URL TYPE STRING Url de la API a consultar
" @78\QImporting@ TOKEN TYPE STRING
" @7A\QChanging@ RESPONSE TYPE STRING Respuesta

DATA: ls_url_parameters TYPE string.


DATA: ls_reason TYPE string.
MOVE: url TO ls_url_parameters.

* Creamos el objeto para la realizacion de las peticiones


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

* Se establece el método GET o POST


CALL METHOD http_client->request->set_header_field
EXPORTING
name = '~request_method'
value = 'GET'.

* Añadir el token de autorización


CALL METHOD http_client->request->set_header_field
EXPORTING
name = 'Authorization'
value = token.

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.
IF sy-subrc EQ 0.
CALL METHOD http_client->response->get_status
IMPORTING
code = code_response
reason = reason_response.

response = http_client->response->get_cdata( ).
ELSE.
code_response = -1.
ENDIF.
ENDMETHOD.

METHOD data_to_json.
" @78\QImporting@ DATA TYPE ANY Tabla interna a convertir a JSON
" @7B\QReturning@ VALUE( JSON ) TYPE STRING String en JSON de la tabla interna

DATA: lr_desc TYPE REF TO cl_abap_typedescr.


DATA: lr_elem TYPE REF TO cl_abap_elemdescr.
DATA: lr_sdes TYPE REF TO cl_abap_structdescr.
DATA: ls_comp TYPE cl_abap_structdescr=>component.
DATA: lt_comp TYPE cl_abap_structdescr=>component_table.
DATA: lv_json TYPE string.
DATA: lv_field TYPE string.
DATA: lv_value TYPE text255.

FIELD-SYMBOLS: <field> TYPE ANY.

DATA: lt_x031l TYPE dd_x031l_table.


DATA: ls_x031l TYPE x031l.
DATA: ls_dfies TYPE dfies.
DATA: lv_meth(30) TYPE c VALUE 'GET_DDIC_FIELD'.
DATA: lv_date TYPE d.
DATA: lv_date_c(10) TYPE c.
DATA: lv_time TYPE t.
DATA: lv_time_c(8) TYPE c.
DATA: lv_tabix TYPE i.
DATA: lv_index TYPE i.
DATA: lv_passed1st TYPE boole_d.

lr_desc = cl_abap_typedescr=>describe_by_data( data ).

CASE lr_desc->type_kind.

WHEN cl_abap_typedescr=>typekind_struct1 OR
cl_abap_typedescr=>typekind_struct2.
json = '{'.
*Use RTTI to discover structure members and process them individually
lr_sdes ?= lr_desc.
lt_comp = lr_sdes->get_components( ).
LOOP AT lt_comp INTO ls_comp.
ASSIGN COMPONENT ls_comp-name OF STRUCTURE data
TO <field>.
IF sy-subrc = 0 AND <field> IS NOT INITIAL.
*For consecutive elements, add a comma separator after the previous value
IF lv_passed1st = 'X'.
CONCATENATE json ',' INTO json.
ENDIF.
lv_json = data_to_json( data = <field> ).
" { INSERT Everis
" VALOR
CASE lv_json.
WHEN '"true"'.
lv_json = 'true'.
WHEN '"false"'.
lv_json = 'false'.
ENDCASE.
" CLAVE
TRANSLATE: ls_comp-name TO LOWER CASE.
CASE ls_comp-name.
WHEN 'measurementpoints'.
CONCATENATE json ' "' 'measurementPoints' '": ' lv_json INTO json.
WHEN 'measurementpointattributes'.
CONCATENATE json ' "' 'measurementPointAttributes' '": ' lv_json INTO
json.
WHEN 'measurementpointattributekeyid'.
CONCATENATE json ' "' 'measurementPointAttributeKeyId' '": ' lv_json
INTO json.
WHEN 'measurementpointcategory'.
CONCATENATE json ' "' 'measurementPointCategory' '": ' lv_json INTO
json.
WHEN 'measurementpointtypeid'.
CONCATENATE json ' "' 'measurementPointTypeId' '": ' lv_json INTO
json.
WHEN 'customerid'.
CONCATENATE json ' "' 'customerId' '": ' lv_json INTO json.
WHEN 'timezoneid'.
CONCATENATE json ' "' 'timeZoneId' '": ' lv_json INTO json.
WHEN 'createfieldoperation'.
CONCATENATE json ' "' 'createFieldOperation' '": ' lv_json INTO json.
WHEN 'createmeasurementpoint'.
CONCATENATE json ' "' 'createMeasurementPoint' '": ' lv_json INTO
json.
WHEN 'publicid'.
CONCATENATE json ' "' 'publicId' '": ' lv_json INTO json.

WHEN 'siteid'.
CONCATENATE json ' "' 'siteId' '": ' lv_json INTO json.
WHEN 'measurementpointid'.
CONCATENATE json ' "' 'measurementPointId' '": ' lv_json INTO json.
WHEN 'externalreference'.
CONCATENATE json ' "' 'externalReference' '": ' lv_json INTO json.
WHEN OTHERS.
CONCATENATE json ' "' ls_comp-name '": ' lv_json INTO json. " DELETE
EVERIS
ENDCASE.
TRANSLATE: ls_comp-name TO UPPER CASE.
" } INSERT Everis
lv_passed1st = 'X'.
ENDIF.
ENDLOOP.
CONCATENATE json '}' INTO json.
WHEN cl_abap_typedescr=>typekind_table.
DATA: ld_line TYPE REF TO data.
FIELD-SYMBOLS: <tab> TYPE ANY TABLE.
FIELD-SYMBOLS: <line> TYPE ANY.
ASSIGN data TO <tab>.
CREATE DATA ld_line LIKE LINE OF <tab>.
ASSIGN ld_line->* TO <line>.
*Open array for table entries
json = '['.
LOOP AT <tab> INTO <line>.
lv_json = data_to_json( data = <line> ).
CONCATENATE json lv_json INTO json SEPARATED BY space.
AT LAST.
CONTINUE.
ENDAT.
*Separate consecutive values by commas
CONCATENATE json ',' INTO json.
ENDLOOP.
*Close array for table entries
CONCATENATE json ']' INTO json SEPARATED BY space.
WHEN cl_abap_typedescr=>typekind_dref.
*For data references, dereference the data and call method again
FIELD-SYMBOLS: <data> TYPE ANY.
ASSIGN data->* TO <data>.
IF sy-subrc = 0.
json = data_to_json( data = <data> ).
ELSE.
json = '{}'. "Will produce empty JS object
ENDIF.
WHEN OTHERS.
*For elementary types, we merely return a text representation of the value
json = data.
CONDENSE json.
*Escape special characters
REPLACE ALL OCCURRENCES OF '\' IN json
WITH '\\'.
REPLACE ALL OCCURRENCES OF '"' IN json
WITH '\"'.
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>newline IN json
WITH '\n'.
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>horizontal_tab IN json
WITH '\t'.
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>form_feed IN json
WITH '\f'.
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>vertical_tab IN json
WITH '\v'.
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>backspace IN json
WITH '\b'.
*Numeric values do not need to be escaped
IF lr_desc->type_kind NE cl_abap_typedescr=>typekind_num AND
lr_desc->type_kind NE cl_abap_typedescr=>typekind_packed AND
lr_desc->type_kind NE cl_abap_typedescr=>typekind_float AND
lr_desc->type_kind NE cl_abap_typedescr=>typekind_int AND
lr_desc->type_kind NE cl_abap_typedescr=>typekind_int1 AND
lr_desc->type_kind NE cl_abap_typedescr=>typekind_int2.
CONCATENATE '"' json '"' INTO json.
ENDIF.
ENDCASE.
ENDMETHOD.

METHOD convertir_hora.
" @78\QImporting@ CADENA TYPE STRING Cadena a convertir en hora
" @7B\QReturning@ VALUE( HORA ) TYPE STRING Hora convertida

CHECK: STRLEN( cadena ) >= 20.

CLEAR: hora.
CONCATENATE: cadena+11(2) cadena+14(2) cadena+17(2) INTO hora.
ENDMETHOD.

METHOD convertir_fecha.
" @78\QImporting@ CADENA TYPE STRING Cadena a convertir
" @7B\QReturning@ VALUE( FECHA ) TYPE STRING Cadena convertida

CHECK: STRLEN( cadena ) >= 10.

CLEAR: fecha.
CONCATENATE: cadena+0(4) cadena+5(2) cadena+8(2) INTO fecha.
ENDMETHOD.
METHOD add_parameter_url.
" @78\QImporting@ PARAMETER TYPE STRING
" @78\QImporting@ VALUE TYPE STRING
" @7A\QChanging@ URL TYPE STRING

" PARAMETER TYPE STRING


" VALUE TYPE STRING
" URL TYPE STRING

IF NOT url CS '?'.


CONCATENATE url '?' INTO url.
CONCATENATE url parameter '=' value INTO url.
ELSE.
CONCATENATE url '&' parameter '=' value INTO url.
ENDIF.

ENDMETHOD.

METHOD class_constructor.
DATA: lwa_constantes TYPE zesd_const_telemetria.
DATA: ls_json TYPE string.
DATA: ls_string TYPE string.
DATA: ldt_parameters TYPE STANDARD TABLE OF zesd_keyvalues.
DATA: lwa_parameter TYPE zesd_keyvalues.

CLEAR: lwa_parameter.
CLEAR: base_url.
REFRESH: ldt_parameters.

" Obtencion de constantes


REFRESH: it_constantes.
SELECT * FROM zttlconst
INTO CORRESPONDING FIELDS OF TABLE it_constantes.

" Obtencion de TOKEN


READ TABLE it_constantes INTO lwa_constantes WITH KEY campo = 'USER_PROGNOS'.
lwa_parameter-fieldname = lwa_constantes-valor1.
lwa_parameter-value = lwa_constantes-valor2.
INSERT lwa_parameter INTO TABLE ldt_parameters.

READ TABLE it_constantes INTO lwa_constantes WITH KEY campo = 'PASSWORD_PROGNOS'.


lwa_parameter-fieldname = lwa_constantes-valor1.
lwa_parameter-value = lwa_constantes-valor2.
INSERT lwa_parameter INTO TABLE ldt_parameters.

READ TABLE it_constantes INTO lwa_constantes WITH KEY campo = 'URL_BASE' valor1 =
sy-sysid.
MOVE: lwa_constantes-valor2 TO base_url.

READ TABLE it_constantes INTO lwa_constantes WITH KEY campo = 'URL_TOKEN'.


MOVE: lwa_constantes-valor1 TO ls_string.
CONCATENATE: base_url ls_string INTO ls_string.

CALL METHOD zcl_sd_consumer_rest=>post


EXPORTING
url = ls_string
PARAMETERS = ldt_parameters
CHANGING
response = ls_json.
CHECK: zcl_sd_consumer_rest=>code_response EQ 200.
* " BORRAR ---------
* ls_json =
'{"timeout":15651066468552830,"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2t
lbkV4cCI6MTU2NTEwNjY0Njg1NTI4MzAsInJlZnJlc2hUb2tlbkV4cCI6'.
* CONCATENATE: ls_json
'MTU2NTI3OTQ0Njg1NTI4MzAsInVzZXJJZCI6MjA0LCJwcm9maWxlSWQiOjV9.MyBArf7bLEBSrrkPw951J
fnVCJouSBusvnztz61z9Ng"' INTO ls_json.
* CONCATENATE: ls_json
',"refreshToken":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbkV4cCI6MTU2NTEwNjY0
Njg1NTI4MzAsInJlZnJlc2h' INTO ls_json.
* CONCATENATE: ls_json
'Ub2tlbkV4cCI6MTU2NTI3OTQ0Njg1NTI4MzAsInVzZXJJZCI6MjA0LCJwcm9maWxlSWQiOjV9.Dj1viqAj
YEFKa9ipE1TcBg8VmB7uP1b0nGICGvrWphI"}' INTO ls_json.
* " BORRAR ---------

CALL METHOD zcl_sd_consumer_rest=>json_to_data


EXPORTING
json = ls_json
CHANGING
data = wa_token.

" OBTENER REPORTE ID


CLEAR: reporte_id.
reporte_id = zcl_sd_consumer_rest=>obtener_reporte_id( ).
ENDMETHOD.

También podría gustarte