Object Handler of type HTTP

This commit is contained in:
Thomas Ploski 2024-12-04 12:48:20 +00:00
parent 6f0dfc5a81
commit a72014fdcb
2 changed files with 333 additions and 0 deletions

View File

@ -0,0 +1,317 @@
CLASS zcl_abapgit_object_http DEFINITION
PUBLIC
INHERITING FROM zcl_abapgit_objects_super
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES zif_abapgit_object .
PROTECTED SECTION.
PRIVATE SECTION.
TYPES: BEGIN OF s_uconservhttphandler,
id TYPE c LENGTH 30,
version TYPE c LENGTH 1,
serviceorder TYPE n LENGTH 2,
servicehandler TYPE c LENGTH 30,
END OF s_uconservhttphandler.
TYPES: BEGIN OF s_uconhttpservtext,
id TYPE c LENGTH 30,
version TYPE c LENGTH 1,
lang TYPE lang,
shorttext TYPE c LENGTH 255,
END OF s_uconhttpservtext.
TYPES: BEGIN OF s_handler,
id TYPE c LENGTH 30,
version TYPE c LENGTH 1,
serviceorder TYPE n LENGTH 2,
servicehandler TYPE c LENGTH 30,
END OF s_handler.
TYPES: BEGIN OF s_ty_gs_object_version ,
id TYPE c LENGTH 1,
object_state TYPE c LENGTH 1,
END OF s_ty_gs_object_version.
ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_HTTP IMPLEMENTATION.
METHOD zif_abapgit_object~changed_by.
TRY.
SELECT SINGLE changedby FROM ('uconhttpservhead') INTO rv_user WHERE id = ms_item-obj_name.
if sy-subrc <> 0.
rv_user = c_user_unknown.
endif.
CATCH cx_root.
zcx_abapgit_exception=>raise( 'HTTP not supported' ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~delete.
DATA lx TYPE REF TO cx_root.
data lo_name type c length 30.
lo_name = ms_item-obj_name.
TRY.
CALL METHOD ('CL_UCON_API_FACTORY')=>('DELETE_HTTP_SERVICE')
EXPORTING
name = lo_name
devclass = iv_package.
CATCH cx_ucon_api_http_service INTO lx. " Exception class: HTTP Service
zcx_abapgit_exception=>raise( iv_text = lx->get_text( )
ix_previous = lx->previous ).
CATCH cx_root.
zcx_abapgit_exception=>raise( 'HTTP not supported' ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
TRY.
DATA: lv_http_servid TYPE c LENGTH 30.
DATA: lt_handler TYPE TABLE OF s_handler.
DATA: ls_handler LIKE LINE OF lt_handler.
DATA: ls_description TYPE s_uconhttpservtext.
DATA: ls_korr TYPE trkorr.
DATA: lv_check_object_name TYPE c LENGTH 40.
DATA: lx TYPE REF TO cx_root,
lv_id TYPE c LENGTH 30,
lo_http TYPE REF TO object,
lv_abap_lang TYPE s_ty_gs_object_version.
TRY.
io_xml->read(
EXPORTING iv_name = 'HTTPID'
CHANGING cg_data = lv_http_servid ).
io_xml->read(
EXPORTING iv_name = 'HTTPTEXT'
CHANGING cg_data = ls_description ).
io_xml->read(
EXPORTING iv_name = 'HTTPHDL'
CHANGING cg_data = lt_handler ).
data lo_transport type ref to zcl_abapgit_default_transport.
create object lo_transport.
ls_korr = lo_transport->zif_abapgit_default_transport~get( )-ordernum.
CATCH zcx_abapgit_exception INTO lx. " Exception
zcx_abapgit_exception=>raise( iv_text = lx->get_text( )
ix_previous = lx->previous ).
ENDTRY.
SELECT SINGLE id FROM ('uconhttpservhead') INTO lv_id WHERE id = lv_http_servid AND version = 'A'.
TRY.
IF sy-subrc = 0.
"update
CALL METHOD ('CL_UCON_API_FACTORY')=>('GET_HTTP_SERVICE')
EXPORTING
name = lv_http_servid
no_auth_check = abap_true
RECEIVING
http_service = lo_http.
ELSE.
"create
CALL METHOD ('CL_UCON_API_FACTORY')=>('NEW_HTTP_SERVICE')
EXPORTING
name = lv_http_servid
RECEIVING
http_service = lo_http.
ENDIF.
CALL METHOD lo_http->('IF_UCON_API_HTTP_SERVICE~SET_HANDLER')
EXPORTING
handler = lt_handler.
IF lt_handler IS NOT INITIAL.
READ TABLE lt_handler INTO ls_handler INDEX 1.
"get language version from abap class
lv_check_object_name = ls_handler-servicehandler.
IF lv_check_object_name IS NOT INITIAL.
TRY.
DATA lv_instance TYPE REF TO object.
CALL METHOD ('CL_ABAP_LANGUAGE_VERSION')=>('GET_INSTANCE') RECEIVING ro_version_handler = lv_instance.
CALL METHOD lv_instance->('IF_ABAP_LANGUAGE_VERSION~GET_VERSION_OF_OBJECT')
EXPORTING
iv_object_type = 'CLAS'
iv_object_name = lv_check_object_name
RECEIVING
rs_object_version = lv_abap_lang.
if lv_abap_lang-id = 'X'. "language version X not supported, use space instead
lv_abap_lang-id = space.
endif.
CALL METHOD lo_http->('IF_UCON_API_HTTP_SERVICE~SET_LANGUAGE_VERSION') EXPORTING iv_langu_version = lv_abap_lang-id.
CATCH cx_abap_language_version INTO lx.
zcx_abapgit_exception=>raise( iv_text = lx->get_text( )
ix_previous = lx ).
ENDTRY.
ENDIF.
ENDIF.
CALL METHOD lo_http->('IF_UCON_API_HTTP_SERVICE~SET_DESCRIPTION')
EXPORTING
texts = ls_description.
* CALL METHOD lo_http->('IF_UCON_API_HTTP_SERVICE~ACTIVATE').
CALL METHOD lo_http->('IF_UCON_API_HTTP_SERVICE~SAVE')
EXPORTING
run_dark = abap_true
dev_class = iv_package
korrnum = ls_korr.
CALL METHOD lo_http->('IF_UCON_API_HTTP_SERVICE~FREE').
CATCH cx_ucon_api_http_service INTO lx.
zcx_abapgit_exception=>raise( iv_text = lx->get_text( )
ix_previous = lx->previous ).
ENDTRY.
DATA: lv_tadir_name TYPE tadir-obj_name.
DATA: lt_ret TYPE bapiret2_t.
lv_tadir_name = lv_http_servid.
CALL METHOD ('CL_AUTH_START_TOOLS')=>('SUSH_CREATE')
EXPORTING
iv_type = 'HTTP'
iv_name = lv_tadir_name
iv_silent = abap_true
iv_task = ls_korr
IMPORTING
et_log = lt_ret.
CATCH cx_root INTO lx.
zcx_abapgit_exception=>raise( lx->get_text( ) ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~exists.
TRY.
DATA lv_id TYPE c LENGTH 30 .
SELECT SINGLE id FROM ('uconhttpservhead') INTO lv_id WHERE id = ms_item-obj_name AND version = 'A'.
IF sy-subrc = 0.
rv_bool = abap_true.
ELSE.
rv_bool = abap_false.
ENDIF.
CATCH cx_root.
zcx_abapgit_exception=>raise( 'HTTP not supported' ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~get_comparator.
ENDMETHOD.
METHOD zif_abapgit_object~get_deserialize_steps.
APPEND zif_abapgit_object=>gc_step_id-abap TO rt_steps.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD.
METHOD zif_abapgit_object~is_active.
rv_active = is_active( ).
ENDMETHOD.
METHOD zif_abapgit_object~jump.
* TRY.
* jump_adt( iv_obj_name = ms_item-obj_name
* iv_obj_type = ms_item-obj_type ).
*
* CATCH cx_abapgit_exception.
* cx_abapgit_exception=>raise( 'SIA1 Jump Error' ). "#EC NOTEXT
* ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
* data for http service from tables
*UCONHTTPSERVHEAD
*UCONHTTPSERVTEXT
*Key Column id uconhttpservid char(30) HTTP Service ID
*Key Column version r3state char(1) ABAP: Program Status (Active, Saved, Transported...)
*Key Column lang sprsl lang(1) Language Key
*Column shorttext ucontext char(255) Unified Connectivity Text (short)
DATA: lv_http_srv_id TYPE c LENGTH 30,
lo_serv TYPE REF TO object, "if_ucon_api_http_service
lt_handler TYPE TABLE OF s_uconservhttphandler,
ls_description TYPE s_uconhttpservtext,
lv_text TYPE string,
lx TYPE REF TO cx_root.
TRY.
lv_http_srv_id = ms_item-obj_name.
"read http service object
CALL METHOD ('CL_UCON_API_FACTORY')=>('GET_HTTP_SERVICE')
EXPORTING
name = lv_http_srv_id
no_auth_check = abap_true
RECEIVING
http_service = lo_serv.
CALL METHOD lo_serv->('IF_UCON_API_HTTP_SERVICE~GET_HANDLER') RECEIVING handler = lt_handler.
CALL METHOD lo_serv->('IF_UCON_API_HTTP_SERVICE~GET_DESCRIPTION')
EXPORTING
lang = sy-langu
RECEIVING
text = ls_description.
*
"add data to output
DATA lv_name TYPE c LENGTH 30.
CALL METHOD lo_serv->('IF_UCON_API_HTTP_SERVICE~GET_NAME') RECEIVING name = lv_name.
io_xml->add(
iv_name = 'HTTPID'
ig_data = lv_name ).
io_xml->add(
iv_name = 'HTTPTEXT'
ig_data = ls_description
).
io_xml->add(
iv_name = 'HTTPHDL'
ig_data = lt_handler
).
CATCH zcx_abapgit_exception INTO lx.
lv_text = lx->get_text( ).
"ii_log->add_error( iv_msg = lv_text is_item = ms_item ). " Exception
CATCH cx_ucon_api_http_service INTO lx.
lv_text = lx->get_text( ).
"ii_log->add_error( iv_msg = lv_text is_item = ms_item ).
CATCH cx_root INTO lx.
zcx_abapgit_exception=>raise( 'HTTP not supported' ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~map_filename_to_object.
RETURN.
ENDMETHOD.
METHOD zif_abapgit_object~get_deserialize_order.
RETURN.
ENDMETHOD.
METHOD zif_abapgit_object~map_object_to_filename.
RETURN.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_OBJECT_HTTP</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>zcl_abapgit_object_http</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>