Consolidate READ/UPDATE_PROGDIR calls (#6464)

This commit is contained in:
Marc Bernard 2023-09-06 09:28:42 -04:00 committed by GitHub
parent 4ca6c4a4ec
commit 152ae1d59c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 185 additions and 186 deletions

View File

@ -13,15 +13,14 @@ CLASS zcl_abapgit_sap_report DEFINITION
METHODS get_language_version
IMPORTING
iv_package TYPE devclass
iv_version TYPE zif_abapgit_sap_report=>ty_abap_language_version
RETURNING
VALUE(rv_version) TYPE zif_abapgit_sap_report=>ty_abap_language_version.
VALUE(rv_version) TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version.
METHODS authorization_check
IMPORTING
iv_mode TYPE csequence
is_item TYPE zif_abapgit_definitions=>ty_item
iv_version TYPE zif_abapgit_sap_report=>ty_abap_language_version OPTIONAL
iv_version TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version OPTIONAL
RAISING
zcx_abapgit_exception.
@ -65,16 +64,14 @@ CLASS zcl_abapgit_sap_report IMPLEMENTATION.
METHOD get_language_version.
ASSERT iv_version CA ' X25'.
" TODO: Determine ABAP Language Version
" https://github.com/abapGit/abapGit/issues/6154#issuecomment-1503566920)
" For now, use default for ABAP source code
IF zcl_abapgit_factory=>get_environment( )->is_sap_cloud_platform( ) = abap_true.
rv_version = '5'. " abap_for_cloud_development
rv_version = zif_abapgit_aff_types_v1=>co_abap_language_version_src-cloud_development.
ELSE.
rv_version = 'X'. " standard_abap
rv_version = zif_abapgit_aff_types_v1=>co_abap_language_version_src-standard.
ENDIF.
ENDMETHOD.
@ -97,46 +94,76 @@ CLASS zcl_abapgit_sap_report IMPLEMENTATION.
METHOD zif_abapgit_sap_report~insert_report.
DATA lv_version TYPE zif_abapgit_sap_report=>ty_abap_language_version ##NEEDED.
DATA lv_version TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version.
DATA lv_obj_name TYPE e071-obj_name.
ASSERT iv_state CA ' AI'.
ASSERT iv_program_type CA ' 1FIJKMST'.
lv_version = get_language_version(
iv_package = iv_package
iv_version = iv_version ).
lv_version = get_language_version( iv_package ).
authorization_check(
iv_mode = 'MODIFY'
is_item = is_item
iv_version = lv_version ).
" TODO: Add `VERSION lv_version` but it's not supported in lower releases
IF iv_state IS INITIAL.
INSERT REPORT iv_name FROM it_source.
"VERSION lv_version.
ELSEIF iv_program_type IS INITIAL AND iv_extension_type IS INITIAL.
INSERT REPORT iv_name FROM it_source
STATE iv_state.
"VERSION lv_version.
ELSEIF iv_extension_type IS INITIAL.
INSERT REPORT iv_name FROM it_source
STATE iv_state
PROGRAM TYPE iv_program_type.
"VERSION lv_version.
ELSE.
INSERT REPORT iv_name FROM it_source
STATE iv_state
EXTENSION TYPE iv_extension_type
PROGRAM TYPE iv_program_type.
"VERSION lv_version.
ENDIF.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Error inserting report { iv_name }| ).
ENDIF.
" In lower releases, INSERT REPORT does not support setting ABAP Language version (VERSION)
" Therefore, update the flag directly
UPDATE progdir SET uccheck = lv_version WHERE name = iv_name AND state = iv_state.
ENDMETHOD.
METHOD zif_abapgit_sap_report~read_progdir.
DATA ls_sapdir TYPE progdir.
CALL FUNCTION 'READ_PROGDIR'
EXPORTING
i_progname = iv_name
i_state = iv_state
IMPORTING
e_progdir = ls_sapdir.
MOVE-CORRESPONDING ls_sapdir TO rs_progdir.
CLEAR: rs_progdir-edtx,
rs_progdir-cnam,
rs_progdir-cdat,
rs_progdir-unam,
rs_progdir-udat,
rs_progdir-levl,
rs_progdir-vern,
rs_progdir-rmand,
rs_progdir-sdate,
rs_progdir-stime,
rs_progdir-idate,
rs_progdir-itime,
rs_progdir-varcl,
rs_progdir-state.
" TODO: Clear UCCHECK
ENDMETHOD.
@ -161,6 +188,60 @@ CLASS zcl_abapgit_sap_report IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_sap_report~update_progdir.
DATA ls_progdir_new TYPE progdir.
CALL FUNCTION 'READ_PROGDIR'
EXPORTING
i_progname = is_progdir-name
i_state = iv_state
IMPORTING
e_progdir = ls_progdir_new
EXCEPTIONS
not_exists = 1
OTHERS = 2.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Error reading program directory' ).
ENDIF.
ls_progdir_new-ldbname = is_progdir-ldbname.
ls_progdir_new-dbna = is_progdir-dbna.
ls_progdir_new-dbapl = is_progdir-dbapl.
ls_progdir_new-rload = is_progdir-rload.
ls_progdir_new-fixpt = is_progdir-fixpt.
ls_progdir_new-appl = is_progdir-appl.
ls_progdir_new-rstat = is_progdir-rstat.
ls_progdir_new-uccheck = is_progdir-uccheck. " TODO: replace with get_language_version()
ls_progdir_new-sqlx = is_progdir-sqlx.
ls_progdir_new-clas = is_progdir-clas.
ls_progdir_new-secu = is_progdir-secu.
CALL FUNCTION 'UPDATE_PROGDIR'
EXPORTING
i_progdir = ls_progdir_new
i_progname = ls_progdir_new-name
i_state = ls_progdir_new-state
EXCEPTIONS
not_executed = 1
OTHERS = 2.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Error updating program directory' ).
ENDIF.
" Function UPDATE_PROGDIR does not update VARCL, so we do it here
SELECT SINGLE * FROM progdir INTO ls_progdir_new
WHERE name = ls_progdir_new-name
AND state = ls_progdir_new-state.
IF sy-subrc = 0 AND is_progdir-varcl <> ls_progdir_new-varcl.
UPDATE progdir SET varcl = is_progdir-varcl
WHERE name = ls_progdir_new-name
AND state = ls_progdir_new-state. "#EC CI_SUBRC
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_sap_report~update_report.
DATA lt_new TYPE string_table.
@ -171,14 +252,13 @@ CLASS zcl_abapgit_sap_report IMPLEMENTATION.
IF lt_old <> lt_new.
zif_abapgit_sap_report~insert_report(
iv_name = iv_name
it_source = it_source
iv_state = iv_state
iv_program_type = iv_program_type
iv_extension_type = iv_extension_type
iv_package = iv_package
iv_version = iv_version
is_item = is_item ).
iv_name = iv_name
it_source = it_source
iv_state = iv_state
iv_program_type = iv_program_type
iv_extension_type = iv_extension_type
iv_package = iv_package
is_item = is_item ).
rv_updated = abap_true.
ELSE.

View File

@ -2,7 +2,38 @@ INTERFACE zif_abapgit_sap_report
PUBLIC.
TYPES:
ty_abap_language_version TYPE c LENGTH 1.
BEGIN OF ty_progdir,
name TYPE progdir-name,
state TYPE progdir-state,
sqlx TYPE progdir-sqlx,
edtx TYPE progdir-edtx,
varcl TYPE progdir-varcl,
dbapl TYPE progdir-dbapl,
dbna TYPE progdir-dbna,
clas TYPE progdir-clas,
type TYPE progdir-type,
occurs TYPE progdir-occurs,
subc TYPE progdir-subc,
appl TYPE progdir-appl,
secu TYPE progdir-secu,
cnam TYPE progdir-cnam,
cdat TYPE progdir-cdat,
unam TYPE progdir-unam,
udat TYPE progdir-udat,
vern TYPE progdir-vern,
levl TYPE progdir-levl,
rstat TYPE progdir-rstat,
rmand TYPE progdir-rmand,
rload TYPE progdir-rload,
fixpt TYPE progdir-fixpt,
sset TYPE progdir-sset,
sdate TYPE progdir-sdate,
stime TYPE progdir-stime,
idate TYPE progdir-idate,
itime TYPE progdir-itime,
ldbname TYPE progdir-ldbname,
uccheck TYPE progdir-uccheck,
END OF ty_progdir.
METHODS read_report
IMPORTING
@ -22,7 +53,6 @@ INTERFACE zif_abapgit_sap_report
iv_program_type TYPE c OPTIONAL
iv_extension_type TYPE c OPTIONAL
iv_package TYPE devclass
iv_version TYPE ty_abap_language_version OPTIONAL
is_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL
RAISING
zcx_abapgit_exception.
@ -35,7 +65,6 @@ INTERFACE zif_abapgit_sap_report
iv_program_type TYPE c OPTIONAL
iv_extension_type TYPE c OPTIONAL
iv_package TYPE devclass
iv_version TYPE ty_abap_language_version OPTIONAL
is_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL
RETURNING
VALUE(rv_updated) TYPE abap_bool
@ -46,9 +75,25 @@ INTERFACE zif_abapgit_sap_report
IMPORTING
iv_name TYPE syrepid
iv_raise_error TYPE abap_bool DEFAULT abap_false
iv_version TYPE ty_abap_language_version OPTIONAL
is_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL
RAISING
zcx_abapgit_exception.
METHODS read_progdir
IMPORTING
iv_name TYPE syrepid
iv_state TYPE r3state DEFAULT 'A'
RETURNING
VALUE(rs_progdir) TYPE ty_progdir
RAISING
zcx_abapgit_exception.
METHODS update_progdir
IMPORTING
is_progdir TYPE ty_progdir
iv_package TYPE devclass
iv_state TYPE r3state DEFAULT 'I'
RAISING
zcx_abapgit_exception.
ENDINTERFACE.

View File

@ -362,7 +362,7 @@ CLASS zcl_abapgit_object_fugr IMPLEMENTATION.
METHOD deserialize_includes.
DATA: lo_xml TYPE REF TO zif_abapgit_xml_input,
ls_progdir TYPE ty_progdir,
ls_progdir TYPE zif_abapgit_sap_report=>ty_progdir,
lt_includes TYPE ty_sobj_name_tt,
lt_tpool TYPE textpool_table,
lt_tpool_ext TYPE zif_abapgit_definitions=>ty_tpool_tt,
@ -548,7 +548,7 @@ CLASS zcl_abapgit_object_fugr IMPLEMENTATION.
METHOD get_abap_version.
DATA: lt_includes TYPE ty_sobj_name_tt,
ls_progdir TYPE ty_progdir,
ls_progdir TYPE zif_abapgit_sap_report=>ty_progdir,
lo_xml TYPE REF TO zif_abapgit_xml_input.
FIELD-SYMBOLS: <lv_include> LIKE LINE OF lt_includes.
@ -1369,7 +1369,7 @@ CLASS zcl_abapgit_object_fugr IMPLEMENTATION.
* function group SUNI
DATA: lt_functions TYPE ty_function_tt,
ls_progdir TYPE ty_progdir,
ls_progdir TYPE zif_abapgit_sap_report=>ty_progdir,
lv_program_name TYPE syrepid,
lt_dynpros TYPE ty_dynpro_tt,
ls_cua TYPE ty_cua.
@ -1388,7 +1388,8 @@ CLASS zcl_abapgit_object_fugr IMPLEMENTATION.
serialize_includes( ).
lv_program_name = main_name( ).
ls_progdir = read_progdir( lv_program_name ).
ls_progdir = zcl_abapgit_factory=>get_sap_report( )->read_progdir( lv_program_name ).
IF mo_i18n_params->is_lxe_applicable( ) = abap_false.
serialize_texts(

View File

@ -17,7 +17,7 @@ CLASS zcl_abapgit_object_prog DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
METHODS deserialize_with_ext
IMPORTING
!is_progdir TYPE ty_progdir
!is_progdir TYPE zif_abapgit_sap_report=>ty_progdir
!it_source TYPE abaptxt255_tab
!iv_package TYPE devclass
RAISING
@ -41,7 +41,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_PROG IMPLEMENTATION.
CLASS zcl_abapgit_object_prog IMPLEMENTATION.
METHOD deserialize_texts.
@ -81,17 +81,10 @@ CLASS ZCL_ABAPGIT_OBJECT_PROG IMPLEMENTATION.
iv_program_type = is_progdir-subc
iv_extension_type = is_progdir-name+30 ).
CALL FUNCTION 'UPDATE_PROGDIR'
EXPORTING
i_progdir = is_progdir
i_progname = is_progdir-name
i_state = 'I'
EXCEPTIONS
not_executed = 1
OTHERS = 2.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Error updating program directory' ).
ENDIF.
zcl_abapgit_factory=>get_sap_report( )->update_progdir(
is_progdir = is_progdir
iv_state = 'I'
iv_package = iv_package ).
zcl_abapgit_objects_activation=>add(
iv_type = 'REPS'
@ -213,7 +206,7 @@ CLASS ZCL_ABAPGIT_OBJECT_PROG IMPLEMENTATION.
METHOD zif_abapgit_object~deserialize.
DATA: lv_program_name TYPE syrepid,
ls_progdir TYPE ty_progdir,
ls_progdir TYPE zif_abapgit_sap_report=>ty_progdir,
lt_tpool TYPE textpool_table,
lt_dynpros TYPE ty_dynpro_tt,
lt_tpool_ext TYPE zif_abapgit_definitions=>ty_tpool_tt,

View File

@ -5,39 +5,6 @@ CLASS zcl_abapgit_objects_program DEFINITION
PUBLIC SECTION.
TYPES:
BEGIN OF ty_progdir,
name TYPE progdir-name,
state TYPE progdir-state,
sqlx TYPE progdir-sqlx,
edtx TYPE progdir-edtx,
varcl TYPE progdir-varcl,
dbapl TYPE progdir-dbapl,
dbna TYPE progdir-dbna,
clas TYPE progdir-clas,
type TYPE progdir-type,
occurs TYPE progdir-occurs,
subc TYPE progdir-subc,
appl TYPE progdir-appl,
secu TYPE progdir-secu,
cnam TYPE progdir-cnam,
cdat TYPE progdir-cdat,
unam TYPE progdir-unam,
udat TYPE progdir-udat,
vern TYPE progdir-vern,
levl TYPE progdir-levl,
rstat TYPE progdir-rstat,
rmand TYPE progdir-rmand,
rload TYPE progdir-rload,
fixpt TYPE progdir-fixpt,
sset TYPE progdir-sset,
sdate TYPE progdir-sdate,
stime TYPE progdir-stime,
idate TYPE progdir-idate,
itime TYPE progdir-itime,
ldbname TYPE progdir-ldbname,
uccheck TYPE progdir-uccheck,
END OF ty_progdir.
TYPES:
BEGIN OF ty_cua,
adm TYPE rsmpe_adm,
@ -63,14 +30,9 @@ CLASS zcl_abapgit_objects_program DEFINITION
!iv_extra TYPE clike OPTIONAL
RAISING
zcx_abapgit_exception.
METHODS read_progdir
IMPORTING
!iv_program TYPE syrepid
RETURNING
VALUE(rs_progdir) TYPE ty_progdir.
METHODS deserialize_program
IMPORTING
!is_progdir TYPE ty_progdir
!is_progdir TYPE zif_abapgit_sap_report=>ty_progdir
!it_source TYPE abaptxt255_tab
!it_tpool TYPE textpool_table
!iv_package TYPE devclass
@ -178,7 +140,7 @@ CLASS zcl_abapgit_objects_program DEFINITION
VALUE(rv_title) TYPE repti .
METHODS insert_program
IMPORTING
!is_progdir TYPE ty_progdir
!is_progdir TYPE zif_abapgit_sap_report=>ty_progdir
!it_source TYPE abaptxt255_tab
!iv_title TYPE repti
!iv_package TYPE devclass
@ -186,16 +148,11 @@ CLASS zcl_abapgit_objects_program DEFINITION
zcx_abapgit_exception .
METHODS update_program
IMPORTING
!is_progdir TYPE ty_progdir
!is_progdir TYPE zif_abapgit_sap_report=>ty_progdir
!it_source TYPE abaptxt255_tab
!iv_title TYPE repti
RAISING
zcx_abapgit_exception .
METHODS update_progdir
IMPORTING
!is_progdir TYPE ty_progdir
RAISING
zcx_abapgit_exception .
ENDCLASS.
@ -497,7 +454,9 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION.
iv_package = iv_package ).
ENDIF.
update_progdir( is_progdir ).
zcl_abapgit_factory=>get_sap_report( )->update_progdir(
is_progdir = is_progdir
iv_package = iv_package ).
zcl_abapgit_objects_activation=>add(
iv_type = 'REPS'
@ -671,37 +630,6 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION.
ENDMETHOD.
METHOD read_progdir.
DATA: ls_sapdir TYPE progdir.
CALL FUNCTION 'READ_PROGDIR'
EXPORTING
i_progname = iv_program
i_state = 'A'
IMPORTING
e_progdir = ls_sapdir.
MOVE-CORRESPONDING ls_sapdir TO rs_progdir.
CLEAR: rs_progdir-edtx,
rs_progdir-cnam,
rs_progdir-cdat,
rs_progdir-unam,
rs_progdir-udat,
rs_progdir-levl,
rs_progdir-vern,
rs_progdir-rmand,
rs_progdir-sdate,
rs_progdir-stime,
rs_progdir-idate,
rs_progdir-itime,
rs_progdir-varcl,
rs_progdir-state.
ENDMETHOD.
METHOD read_tpool.
FIELD-SYMBOLS: <ls_tpool_in> LIKE LINE OF it_tpool,
@ -878,7 +806,7 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION.
METHOD serialize_program.
DATA: ls_progdir TYPE ty_progdir,
DATA: ls_progdir TYPE zif_abapgit_sap_report=>ty_progdir,
lv_program_name TYPE syrepid,
lt_dynpros TYPE ty_dynpro_tt,
ls_cua TYPE ty_cua,
@ -919,7 +847,7 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION.
zcl_abapgit_language=>restore_login_language( ).
ls_progdir = read_progdir( lv_program_name ).
ls_progdir = zcl_abapgit_factory=>get_sap_report( )->read_progdir( lv_program_name ).
IF io_xml IS BOUND.
li_xml = io_xml.
@ -1039,61 +967,6 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION.
ENDMETHOD.
METHOD update_progdir.
DATA ls_progdir_new TYPE progdir.
CALL FUNCTION 'READ_PROGDIR'
EXPORTING
i_progname = is_progdir-name
i_state = 'I'
IMPORTING
e_progdir = ls_progdir_new
EXCEPTIONS
not_exists = 1
OTHERS = 2.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Error reading program directory' ).
ENDIF.
ls_progdir_new-ldbname = is_progdir-ldbname.
ls_progdir_new-dbna = is_progdir-dbna.
ls_progdir_new-dbapl = is_progdir-dbapl.
ls_progdir_new-rload = is_progdir-rload.
ls_progdir_new-fixpt = is_progdir-fixpt.
ls_progdir_new-varcl = is_progdir-varcl.
ls_progdir_new-appl = is_progdir-appl.
ls_progdir_new-rstat = is_progdir-rstat.
ls_progdir_new-sqlx = is_progdir-sqlx.
ls_progdir_new-uccheck = is_progdir-uccheck.
ls_progdir_new-clas = is_progdir-clas.
ls_progdir_new-secu = is_progdir-secu.
CALL FUNCTION 'UPDATE_PROGDIR'
EXPORTING
i_progdir = ls_progdir_new
i_progname = ls_progdir_new-name
i_state = ls_progdir_new-state
EXCEPTIONS
not_executed = 1
OTHERS = 2.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Error updating program directory' ).
ENDIF.
" function UPDATE_PROGDIR does not update VARCL, so we do it here
SELECT SINGLE * FROM progdir INTO ls_progdir_new
WHERE name = ls_progdir_new-name
AND state = ls_progdir_new-state.
IF sy-subrc = 0 AND is_progdir-varcl <> ls_progdir_new-varcl.
UPDATE progdir SET varcl = is_progdir-varcl
WHERE name = ls_progdir_new-name
AND state = ls_progdir_new-state. "#EC CI_SUBRC
ENDIF.
ENDMETHOD.
METHOD update_program.
zcl_abapgit_language=>set_current_language( mv_language ).

View File

@ -1,22 +1,26 @@
CLASS zcl_abapgit_abap_language_vers DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
CREATE PUBLIC.
PUBLIC SECTION.
CONSTANTS c_feature_flag TYPE string VALUE 'ALAV'.
METHODS get_abap_language_vers_by_objt
IMPORTING
!iv_object_type TYPE trobjtype
!iv_package TYPE devclass
RETURNING
VALUE(rv_allowed_abap_langu_version) TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version .
VALUE(rv_allowed_abap_langu_version) TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version.
METHODS is_import_allowed
IMPORTING
!io_repo TYPE REF TO zif_abapgit_repo
!iv_package TYPE devclass
RETURNING
VALUE(rv_allowed) TYPE abap_bool .
VALUE(rv_allowed) TYPE abap_bool.
PROTECTED SECTION.
PRIVATE SECTION.
@ -24,12 +28,14 @@ CLASS zcl_abapgit_abap_language_vers DEFINITION
IMPORTING
!iv_package TYPE devclass
RETURNING
VALUE(rv_abap_language_version) TYPE string .
VALUE(rv_abap_language_version) TYPE string.
METHODS get_abap_language_vers_by_repo
IMPORTING
!io_repo TYPE REF TO zif_abapgit_repo
RETURNING
VALUE(rv_abap_language_version) TYPE string .
VALUE(rv_abap_language_version) TYPE string.
ENDCLASS.
@ -70,6 +76,7 @@ CLASS zcl_abapgit_abap_language_vers IMPLEMENTATION.
CATCH cx_root.
rv_abap_language_version = zif_abapgit_dot_abapgit=>c_abap_language_version-undefined.
ENDTRY.
ENDMETHOD.