From 066812ef84fb2a7f97028b75cdea102e707697a1 Mon Sep 17 00:00:00 2001 From: Marc Bernard <59966492+mbtools@users.noreply.github.com> Date: Sat, 30 Sep 2023 08:55:33 -0400 Subject: [PATCH] SFxx: Fix missing lock checks and unlocking (#6519) Co-authored-by: Lars Hvam --- src/objects/zcl_abapgit_object_sfbf.clas.abap | 22 ++++++++++++++++--- src/objects/zcl_abapgit_object_sfbs.clas.abap | 20 ++++++++++++++++- src/objects/zcl_abapgit_object_sfsw.clas.abap | 20 ++++++++++++++++- 3 files changed, 57 insertions(+), 5 deletions(-) diff --git a/src/objects/zcl_abapgit_object_sfbf.clas.abap b/src/objects/zcl_abapgit_object_sfbf.clas.abap index 48c4b18ad..abac543d1 100644 --- a/src/objects/zcl_abapgit_object_sfbf.clas.abap +++ b/src/objects/zcl_abapgit_object_sfbf.clas.abap @@ -16,6 +16,7 @@ CLASS zcl_abapgit_object_sfbf DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje DATA mv_bf TYPE sfw_bfunction. METHODS: + unlock, activate RAISING zcx_abapgit_exception, create @@ -97,6 +98,19 @@ CLASS zcl_abapgit_object_sfbf IMPLEMENTATION. ENDMETHOD. + METHOD unlock. + + CALL FUNCTION 'DEQUEUE_EEUDB' + EXPORTING + relid = 'SF' + name = ms_item-obj_name + _synchron = 'X' + _scope = '1' + mode_eudb = abap_true. + + ENDMETHOD. + + METHOD zif_abapgit_object~changed_by. DATA: ls_data TYPE sfw_bf. @@ -204,6 +218,8 @@ CLASS zcl_abapgit_object_sfbf IMPLEMENTATION. lo_bf->save_all( ). + unlock( ). + deserialize_longtexts( ii_xml = io_xml iv_longtext_id = c_longtext_id_sfbf ). @@ -261,9 +277,9 @@ CLASS zcl_abapgit_object_sfbf IMPLEMENTATION. METHOD zif_abapgit_object~is_locked. - - rv_is_locked = abap_false. - + rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'EEUDB' + iv_argument = ms_item-obj_name + iv_prefix = 'SF' ). ENDMETHOD. diff --git a/src/objects/zcl_abapgit_object_sfbs.clas.abap b/src/objects/zcl_abapgit_object_sfbs.clas.abap index 86831fed4..f64a4d41a 100644 --- a/src/objects/zcl_abapgit_object_sfbs.clas.abap +++ b/src/objects/zcl_abapgit_object_sfbs.clas.abap @@ -16,6 +16,7 @@ CLASS zcl_abapgit_object_sfbs DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje DATA mv_bfset TYPE sfw_bset. METHODS: + unlock, activate RAISING zcx_abapgit_exception, create @@ -97,6 +98,19 @@ CLASS zcl_abapgit_object_sfbs IMPLEMENTATION. ENDMETHOD. + METHOD unlock. + + CALL FUNCTION 'DEQUEUE_EEUDB' + EXPORTING + relid = 'SS' + name = ms_item-obj_name + _synchron = 'X' + _scope = '1' + mode_eudb = abap_true. + + ENDMETHOD. + + METHOD zif_abapgit_object~changed_by. DATA: ls_data TYPE sfw_bs. @@ -187,6 +201,8 @@ CLASS zcl_abapgit_object_sfbs IMPLEMENTATION. lo_bfs->save_all( ). + unlock( ). + deserialize_longtexts( ii_xml = io_xml iv_longtext_id = c_longtext_id_sfbs ). @@ -243,7 +259,9 @@ CLASS zcl_abapgit_object_sfbs IMPLEMENTATION. METHOD zif_abapgit_object~is_locked. - rv_is_locked = abap_false. + rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'EEUDB' + iv_argument = ms_item-obj_name + iv_prefix = 'SS' ). ENDMETHOD. diff --git a/src/objects/zcl_abapgit_object_sfsw.clas.abap b/src/objects/zcl_abapgit_object_sfsw.clas.abap index 38f2c9cf8..e5e1ddf00 100644 --- a/src/objects/zcl_abapgit_object_sfsw.clas.abap +++ b/src/objects/zcl_abapgit_object_sfsw.clas.abap @@ -16,6 +16,7 @@ CLASS zcl_abapgit_object_sfsw DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje DATA mv_switch TYPE sfw_switch_id. METHODS: + unlock, activate RAISING zcx_abapgit_exception, create @@ -97,6 +98,19 @@ CLASS zcl_abapgit_object_sfsw IMPLEMENTATION. ENDMETHOD. + METHOD unlock. + + CALL FUNCTION 'DEQUEUE_EEUDB' + EXPORTING + relid = 'SW' + name = ms_item-obj_name + _synchron = 'X' + _scope = '1' + mode_eudb = abap_true. + + ENDMETHOD. + + METHOD zif_abapgit_object~changed_by. DATA: ls_data TYPE sfw_switch. @@ -190,6 +204,8 @@ CLASS zcl_abapgit_object_sfsw IMPLEMENTATION. zcx_abapgit_exception=>raise( 'error in CL_SFW_SW->SAVE_ALL' ). ENDIF. + unlock( ). + deserialize_longtexts( ii_xml = io_xml iv_longtext_id = c_longtext_id_sfsw ). @@ -246,7 +262,9 @@ CLASS zcl_abapgit_object_sfsw IMPLEMENTATION. METHOD zif_abapgit_object~is_locked. - rv_is_locked = abap_false. + rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'EEUDB' + iv_argument = ms_item-obj_name + iv_prefix = 'SW' ). ENDMETHOD.