abapGit/src/objects/zcl_abapgit_object_enqu.clas.abap
2025-04-10 18:11:22 +00:00

252 lines
5.7 KiB
ABAP

CLASS zcl_abapgit_object_enqu DEFINITION
PUBLIC
INHERITING FROM zcl_abapgit_objects_super
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES zif_abapgit_object .
PROTECTED SECTION.
PRIVATE SECTION.
TYPES: ty_dd27p TYPE STANDARD TABLE OF dd27p WITH DEFAULT KEY.
" Fields that are not part of dd25v
TYPES:
BEGIN OF ty_extra,
abap_language_version TYPE uccheck,
END OF ty_extra.
METHODS _clear_dd27p_fields CHANGING ct_dd27p TYPE ty_dd27p.
ENDCLASS.
CLASS zcl_abapgit_object_enqu IMPLEMENTATION.
METHOD zif_abapgit_object~changed_by.
SELECT SINGLE as4user FROM dd25l
INTO rv_user
WHERE viewname = ms_item-obj_name
AND as4local = 'A'
AND as4vers = '0000'.
IF sy-subrc <> 0.
rv_user = c_user_unknown.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~delete.
IF zif_abapgit_object~exists( ) = abap_false.
RETURN.
ENDIF.
delete_ddic( 'L' ).
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: lv_name TYPE ddobjname,
ls_dd25v TYPE dd25v,
ls_extra TYPE ty_extra,
lt_dd26e TYPE TABLE OF dd26e,
lt_dd27p TYPE ty_dd27p.
io_xml->read( EXPORTING iv_name = 'DD25V'
CHANGING cg_data = ls_dd25v ).
io_xml->read( EXPORTING iv_name = 'DD26E_TABLE'
CHANGING cg_data = lt_dd26e ).
io_xml->read( EXPORTING iv_name = 'DD27P_TABLE'
CHANGING cg_data = lt_dd27p ).
corr_insert( iv_package = iv_package
ig_object_class = 'DICT' ).
lv_name = ms_item-obj_name.
CALL FUNCTION 'DDIF_ENQU_PUT'
EXPORTING
name = lv_name
dd25v_wa = ls_dd25v
TABLES
dd26e_tab = lt_dd26e
dd27p_tab = lt_dd27p
EXCEPTIONS
enqu_not_found = 1
name_inconsistent = 2
enqu_inconsistent = 3
put_failure = 4
put_refused = 5
OTHERS = 6.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
" Fields that are not part of dd25v
io_xml->read( EXPORTING iv_name = 'DD25L_EXTRA'
CHANGING cg_data = ls_extra ).
TRY.
set_abap_language_version( CHANGING cv_abap_language_version = ls_extra-abap_language_version ).
UPDATE ('DD25L') SET abap_language_version = ls_extra-abap_language_version WHERE viewname = lv_name.
CATCH cx_sy_dynamic_osql_semantics ##NO_HANDLER.
ENDTRY.
zcl_abapgit_objects_activation=>add_item( ms_item ).
ENDMETHOD.
METHOD zif_abapgit_object~exists.
DATA: lv_viewname TYPE dd25l-viewname.
SELECT SINGLE viewname FROM dd25l INTO lv_viewname
WHERE viewname = ms_item-obj_name.
rv_bool = boolc( sy-subrc = 0 ).
ENDMETHOD.
METHOD zif_abapgit_object~get_comparator.
RETURN.
ENDMETHOD.
METHOD zif_abapgit_object~get_deserialize_order.
RETURN.
ENDMETHOD.
METHOD zif_abapgit_object~get_deserialize_steps.
APPEND zif_abapgit_object=>gc_step_id-ddic 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~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
METHOD zif_abapgit_object~jump.
" Covered by ZCL_ABAPGIT_OBJECT=>JUMP
ENDMETHOD.
METHOD zif_abapgit_object~map_filename_to_object.
RETURN.
ENDMETHOD.
METHOD zif_abapgit_object~map_object_to_filename.
RETURN.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: lv_name TYPE ddobjname,
lv_state TYPE ddgotstate,
ls_dd25v TYPE dd25v,
ls_extra TYPE ty_extra,
lt_dd26e TYPE TABLE OF dd26e,
lt_dd27p TYPE ty_dd27p.
lv_name = ms_item-obj_name.
CALL FUNCTION 'DDIF_ENQU_GET'
EXPORTING
name = lv_name
state = 'A'
langu = mv_language
IMPORTING
gotstate = lv_state
dd25v_wa = ls_dd25v
TABLES
dd26e_tab = lt_dd26e
dd27p_tab = lt_dd27p
EXCEPTIONS
illegal_input = 1
OTHERS = 2.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
IF ls_dd25v IS INITIAL OR lv_state <> 'A'.
RETURN.
ENDIF.
CLEAR: ls_dd25v-as4user,
ls_dd25v-as4date,
ls_dd25v-as4time,
ls_dd25v-as4local,
ls_dd25v-as4vers.
_clear_dd27p_fields( CHANGING ct_dd27p = lt_dd27p ).
io_xml->add( iv_name = 'DD25V'
ig_data = ls_dd25v ).
io_xml->add( ig_data = lt_dd26e
iv_name = 'DD26E_TABLE' ).
io_xml->add( ig_data = lt_dd27p
iv_name = 'DD27P_TABLE' ).
ls_extra-abap_language_version = get_abap_language_version( ).
io_xml->add( iv_name = 'DD25L_EXTRA'
ig_data = ls_extra ).
ENDMETHOD.
METHOD _clear_dd27p_fields.
FIELD-SYMBOLS <ls_dd27p> TYPE dd27p.
LOOP AT ct_dd27p ASSIGNING <ls_dd27p>.
"taken from table
CLEAR <ls_dd27p>-headlen.
CLEAR <ls_dd27p>-scrlen1.
CLEAR <ls_dd27p>-scrlen2.
CLEAR <ls_dd27p>-scrlen3.
CLEAR <ls_dd27p>-intlen.
CLEAR <ls_dd27p>-outputlen.
CLEAR <ls_dd27p>-flength.
CLEAR <ls_dd27p>-ddtext.
CLEAR <ls_dd27p>-reptext.
CLEAR <ls_dd27p>-scrtext_s.
CLEAR <ls_dd27p>-scrtext_m.
CLEAR <ls_dd27p>-scrtext_l.
CLEAR <ls_dd27p>-rollname.
CLEAR <ls_dd27p>-rollnamevi.
CLEAR <ls_dd27p>-entitytab.
CLEAR <ls_dd27p>-datatype.
CLEAR <ls_dd27p>-inttype.
CLEAR <ls_dd27p>-ddlanguage.
CLEAR <ls_dd27p>-domname.
CLEAR <ls_dd27p>-signflag.
ENDLOOP.
ENDMETHOD.
ENDCLASS.