1. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2. *--[ Clase genérica para WS
  3.  
  4. CLASS Cl_MY_WS DEFINITION.
  5.  
  6.   PUBLIC SECTION.
  7.  
  8.     CONSTANTS: ws_error_system_fault TYPE i VALUE '99'.
  9.  
  10. *--[ Esto se cambiará dependiendo del servicio
  11.     DATA: ws_obj             TYPE REF TO zavlco_si_avl_cp_piae_verifica, " #CHANGE Ver constructor
  12.           ws_output          TYPE zavlmt_avl_piae_obtener_reque1,        " #CHANGE Parámetros del WS
  13.           ws_input           TYPE zavlmt_avl_piae_obtener_respo1,        " #CHANGE Parámetros del WS
  14.  
  15.           ws_msgid           TYPE string,
  16.  
  17.           ws_error_text      TYPE string,
  18.           ws_error_text_long TYPE string,
  19.  
  20.           ws_xml_request     TYPE string,
  21.           ws_xml_response    TYPE string,
  22.           ws_xml_exception   TYPE string,
  23.  
  24.           ws_error           TYPE sysubrc,
  25.  
  26.           ws_extra_data      type xfeld.
  27.  
  28.     METHODS: ws_data_load,
  29.       ws_main,
  30.       ws_call RETURNING VALUE(p_ret) TYPE i,
  31.       ws_return_OK,
  32.       ws_return_KO,
  33.       constructor.
  34.  
  35.   PROTECTED SECTION.
  36.  
  37.   PRIVATE SECTION.
  38.  
  39. ENDCLASS.
  40.  
  41. CLASS cl_my_ws IMPLEMENTATION.
  42.  
  43.   METHOD constructor.
  44.  
  45. *--[ Pos si se quiere meter en un método y reutilizar
  46.     CLEAR: ws_error, ws_output, ws_input, ws_msgid, ws_error_text,
  47.            ws_error_text_long, ws_xml_request, ws_xml_response,
  48.            ws_xml_exception, ws_extra_data.
  49.  
  50.     ws_obj = NEW zavlco_si_avl_cp_piae_verifica( ). "<-- Se crea el objeto
  51.   ENDMETHOD.
  52.  
  53.  
  54.   METHOD ws_main.
  55.     ws_data_load( ).
  56.     IF ws_Call( ) IS INITIAL.
  57.       ws_return_ok( ).
  58.     ELSE.
  59.       ws_return_KO( ).
  60.     ENDIF.
  61.   ENDMETHOD.
  62.  
  63.   METHOD ws_data_load.
  64.  
  65.   ENDMETHOD.
  66.  
  67.  
  68.   METHOD ws_call.
  69.  
  70.     DATA: lr_proxy_basis    TYPE REF TO if_proxy_basis,
  71.           lr_prot_payload   TYPE REF TO if_wsprotocol_payload,
  72.           lo_protocol       TYPE REF TO if_wsprotocol_message_id,
  73.           lo_server_context TYPE REF TO if_ws_server_context.
  74.  
  75.     DATA: lv_msgid        TYPE sxmsmguid.
  76.     DATA: lv_msgid_string TYPE string.
  77.     DATA: payload_OBJ TYPE REF TO if_ws_payload.
  78.  
  79.     lr_proxy_basis ?= ws_obj.
  80.     lr_prot_payload ?= lr_proxy_basis->get_protocol( if_wsprotocol=>payload ).
  81.     lr_prot_payload->announce_payload_consumption( ).
  82.     lr_prot_payload->set_extended_xml_handling( extended_xml_handling = abap_true ).
  83.     CLEAR p_ret.
  84.     DATA: l_catch_sf TYPE REF TO     cx_ai_system_fault.
  85.  
  86.     TRY.
  87.         CALL METHOD ws_obj->o_obtener_sync " #CHANGE <-- Método al que llamaremos
  88.           EXPORTING
  89.             output = ws_output "<-- Parámetros de salida
  90.           IMPORTING
  91.             input  = ws_input. "<-- Parámetros de entrada
  92.  
  93.       CATCH cx_ai_system_fault INTO l_catch_sf.
  94.         ws_error_text = l_catch_sf->get_text( ).
  95.         ws_error_text_long = l_catch_sf->get_longtext( ).
  96.         ws_error = p_ret = ws_error_system_fault.
  97.  
  98.     ENDTRY.
  99.  
  100.    check not ws_extra_data is INITIAL. "<-- Para debuging
  101. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  102. *--[ Descargamos los XML de comunicación por si queremos tratarlos
  103.     TRY.
  104.         payload_OBJ  ?= lr_prot_payload->get_sent_request_payload( ).
  105.         ws_xml_request = payload_OBJ->get_xml_text( ).
  106.       CATCH cx_ai_system_fault.
  107.  
  108.     ENDTRY.
  109.  
  110.     TRY.
  111.         payload_OBJ  ?= lr_prot_payload->get_sent_exception_payload( ).
  112.         ws_xml_exception = payload_OBJ->get_xml_text( ).
  113.       CATCH cx_ai_system_fault.
  114.  
  115.     ENDTRY.
  116.     TRY.
  117.         payload_OBJ  ?= lr_prot_payload->get_sent_response_payload( ).
  118.         ws_xml_response = payload_OBJ->get_xml_text( ).
  119.       CATCH cx_ai_system_fault.
  120.  
  121.     ENDTRY.
  122.  
  123. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  124. *--[ Obtenemos el MSGID de la llamada
  125.     TRY.
  126.         lo_protocol ?= lr_proxy_basis->get_protocol( if_wsprotocol=>message_id ).
  127.         DATA(msgid) = lo_protocol->get_message_id( ).
  128.         ws_msgid = msgid.
  129.  
  130.       CATCH cx_ai_system_fault.
  131.  
  132.     ENDTRY.
  133.   ENDMETHOD.
  134.  
  135.  
  136.   METHOD ws_return_OK.
  137.  
  138.   ENDMETHOD.
  139.  
  140.  
  141.   METHOD ws_return_KO.
  142.  
  143.   ENDMETHOD.
  144.  
  145. ENDCLASS.
  146.  
  147.  
  148. end-of-SELECTION.
  149. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  150. *--[ Ejemplo de USO
  151.   DATA: my_ws TYPE REF TO Cl_MY_WS.
  152.  
  153.   my_ws = NEW Cl_MY_WS( ).
  154.  
  155.   my_ws->ws_main( ).