SOTR: Refactor (#5441)

This commit is contained in:
Marc Bernard 2022-04-29 08:51:17 +02:00 committed by GitHub
parent 43b0d95335
commit 2bc6e2a8ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -5,12 +5,9 @@ CLASS zcl_abapgit_sotr_handler DEFINITION
PUBLIC SECTION.
TYPES:
ty_sotr_use_tt TYPE STANDARD TABLE OF sotr_use WITH DEFAULT KEY .
CLASS-METHODS read_sotr
IMPORTING
!iv_pgmid TYPE pgmid
!iv_pgmid TYPE pgmid DEFAULT 'R3TR'
!iv_object TYPE trobjtype
!iv_obj_name TYPE csequence
!io_xml TYPE REF TO zif_abapgit_xml_output OPTIONAL
@ -26,6 +23,25 @@ CLASS zcl_abapgit_sotr_handler DEFINITION
!io_xml TYPE REF TO zif_abapgit_xml_input
RAISING
zcx_abapgit_exception .
CLASS-METHODS create_sotr_from_data
IMPORTING
!iv_package TYPE devclass
!it_sotr TYPE zif_abapgit_definitions=>ty_sotr_tt
!it_sotr_use TYPE zif_abapgit_definitions=>ty_sotr_use_tt
RAISING
zcx_abapgit_exception .
CLASS-METHODS delete_sotr
IMPORTING
!iv_pgmid TYPE pgmid DEFAULT 'R3TR'
!iv_object TYPE trobjtype
!iv_obj_name TYPE csequence
RAISING
zcx_abapgit_exception .
CLASS-METHODS delete_sotr_package
IMPORTING
!iv_package TYPE devclass
RAISING
zcx_abapgit_exception .
PROTECTED SECTION.
CLASS-METHODS get_sotr_usage
IMPORTING
@ -33,7 +49,7 @@ CLASS zcl_abapgit_sotr_handler DEFINITION
!iv_object TYPE trobjtype
!iv_obj_name TYPE csequence
RETURNING
VALUE(rt_sotr_use) TYPE ty_sotr_use_tt.
VALUE(rt_sotr_use) TYPE zif_abapgit_definitions=>ty_sotr_use_tt.
CLASS-METHODS get_sotr_4_concept
IMPORTING
@ -51,20 +67,32 @@ CLASS zcl_abapgit_sotr_handler IMPLEMENTATION.
METHOD create_sotr.
DATA:
lt_objects TYPE sotr_objects,
ls_paket TYPE sotr_pack,
lv_object LIKE LINE OF lt_objects,
lt_sotr TYPE zif_abapgit_definitions=>ty_sotr_tt,
lt_sotr_use TYPE zif_abapgit_definitions=>ty_sotr_use_tt.
FIELD-SYMBOLS: <ls_sotr> LIKE LINE OF lt_sotr.
io_xml->read( EXPORTING iv_name = 'SOTR'
CHANGING cg_data = lt_sotr ).
io_xml->read( EXPORTING iv_name = 'SOTR_USE'
CHANGING cg_data = lt_sotr_use ).
LOOP AT lt_sotr ASSIGNING <ls_sotr>.
create_sotr_from_data(
iv_package = iv_package
it_sotr = lt_sotr
it_sotr_use = lt_sotr_use ).
ENDMETHOD.
METHOD create_sotr_from_data.
DATA:
lt_objects TYPE sotr_objects,
ls_paket TYPE sotr_pack,
lv_object LIKE LINE OF lt_objects.
FIELD-SYMBOLS: <ls_sotr> LIKE LINE OF it_sotr.
LOOP AT it_sotr ASSIGNING <ls_sotr>.
CALL FUNCTION 'SOTR_OBJECT_GET_OBJECTS'
EXPORTING
object_vector = <ls_sotr>-header-objid_vec
@ -117,15 +145,79 @@ CLASS zcl_abapgit_sotr_handler IMPLEMENTATION.
CALL FUNCTION 'SOTR_USAGE_MODIFY'
EXPORTING
sotr_usage = lt_sotr_use.
sotr_usage = it_sotr_use.
ENDMETHOD.
METHOD delete_sotr.
DATA lt_sotr_use TYPE zif_abapgit_definitions=>ty_sotr_use_tt.
FIELD-SYMBOLS <ls_sotr_use> LIKE LINE OF lt_sotr_use.
lt_sotr_use = get_sotr_usage( iv_pgmid = iv_pgmid
iv_object = iv_object
iv_obj_name = iv_obj_name ).
LOOP AT lt_sotr_use ASSIGNING <ls_sotr_use> WHERE concept IS NOT INITIAL.
CALL FUNCTION 'SOTR_DELETE_CONCEPT'
EXPORTING
concept = <ls_sotr_use>-concept
EXCEPTIONS
no_entry_found = 1
text_not_found = 2
invalid_package = 3
text_not_changeable = 4
text_enqueued = 5
no_correction = 6
parameter_error = 7
OTHERS = 8.
IF sy-subrc > 2.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD delete_sotr_package.
DATA lt_sotr_head TYPE STANDARD TABLE OF sotr_head WITH DEFAULT KEY.
FIELD-SYMBOLS <ls_sotr_head> LIKE LINE OF lt_sotr_head.
SELECT * FROM sotr_head INTO TABLE lt_sotr_head WHERE paket = iv_package.
LOOP AT lt_sotr_head ASSIGNING <ls_sotr_head> WHERE concept IS NOT INITIAL.
CALL FUNCTION 'SOTR_DELETE_CONCEPT'
EXPORTING
concept = <ls_sotr_head>-concept
EXCEPTIONS
no_entry_found = 1
text_not_found = 2
invalid_package = 3
text_not_changeable = 4
text_enqueued = 5
no_correction = 6
parameter_error = 7
OTHERS = 8.
IF sy-subrc > 2.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD get_sotr_4_concept.
DATA: ls_header TYPE sotr_head,
lt_entries TYPE sotr_text_tt.
DATA: ls_header TYPE zif_abapgit_definitions=>ty_sotr-header,
lt_entries TYPE zif_abapgit_definitions=>ty_sotr-entries.
FIELD-SYMBOLS: <ls_entry> LIKE LINE OF lt_entries.
@ -171,7 +263,7 @@ CLASS zcl_abapgit_sotr_handler IMPLEMENTATION.
lv_obj_name = iv_obj_name.
" Objects with multiple components
IF iv_pgmid = 'LIMU' AND ( iv_object = 'WDYV' OR iv_object = 'WAPP' ).
IF iv_pgmid = 'LIMU' AND ( iv_object CP 'WDY*' OR iv_object = 'WAPP' ).
lv_obj_name+30 = '%'.
ENDIF.
@ -195,13 +287,13 @@ CLASS zcl_abapgit_sotr_handler IMPLEMENTATION.
METHOD read_sotr.
FIELD-SYMBOLS <ls_sotr_use> TYPE sotr_use.
FIELD-SYMBOLS <ls_sotr_use> LIKE LINE OF et_sotr_use.
DATA lv_sotr TYPE zif_abapgit_definitions=>ty_sotr.
" Known SOTR usage...
" LIMU: CPUB, WAPP, WDYV
" R3TR: ENHC, ENHO, ENHS, ENSC, SCGR, SMIF, WDYA, WEBI, WEBS
" SOTR usage (see LSOTR_SYSTEM_SETTINGSF01, FORM GET_OBJECT_TABLE)
" LIMU: CPUB, WAPP, WDYC, WDYD, WDYV
" R3TR: ENHC, ENHD, ENHO, ENHS, ENSC, SCGR, SICF, WDCA, WDCC, WDYA, WEBI, WEBS, XSLT
et_sotr_use = get_sotr_usage( iv_pgmid = iv_pgmid
iv_object = iv_object