mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
848 lines
26 KiB
ABAP
848 lines
26 KiB
ABAP
CLASS zcl_abapgit_object_devc DEFINITION PUBLIC
|
|
INHERITING FROM zcl_abapgit_objects_super
|
|
FINAL.
|
|
|
|
PUBLIC SECTION.
|
|
INTERFACES:
|
|
zif_abapgit_object.
|
|
|
|
METHODS:
|
|
constructor IMPORTING is_item TYPE zif_abapgit_definitions=>ty_item
|
|
iv_language TYPE spras.
|
|
PROTECTED SECTION.
|
|
PRIVATE SECTION.
|
|
|
|
DATA mv_local_devclass TYPE devclass .
|
|
|
|
METHODS get_package
|
|
RETURNING
|
|
VALUE(ri_package) TYPE REF TO if_package
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
METHODS update_pinf_usages
|
|
IMPORTING
|
|
!ii_package TYPE REF TO if_package
|
|
!it_usage_data TYPE scomppdata
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
METHODS set_lock
|
|
IMPORTING
|
|
!ii_package TYPE REF TO if_package
|
|
!iv_lock TYPE abap_bool
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
METHODS is_empty
|
|
IMPORTING
|
|
!iv_package_name TYPE devclass
|
|
RETURNING
|
|
VALUE(rv_is_empty) TYPE abap_bool
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
METHODS load_package
|
|
IMPORTING
|
|
!iv_package_name TYPE devclass
|
|
RETURNING
|
|
VALUE(ri_package) TYPE REF TO if_package
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
METHODS is_local
|
|
IMPORTING
|
|
!iv_package_name TYPE devclass
|
|
RETURNING
|
|
VALUE(rv_is_local) TYPE abap_bool .
|
|
METHODS remove_obsolete_tadir
|
|
IMPORTING
|
|
!iv_package_name TYPE devclass .
|
|
ENDCLASS.
|
|
|
|
|
|
|
|
CLASS zcl_abapgit_object_devc IMPLEMENTATION.
|
|
|
|
|
|
METHOD constructor.
|
|
super->constructor( is_item = is_item
|
|
iv_language = iv_language ).
|
|
IF is_item-devclass IS NOT INITIAL.
|
|
mv_local_devclass = is_item-devclass.
|
|
ELSE.
|
|
mv_local_devclass = is_item-obj_name.
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD get_package.
|
|
IF zif_abapgit_object~exists( ) = abap_true.
|
|
ri_package = load_package( mv_local_devclass ).
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD is_empty.
|
|
|
|
DATA: lv_object_name TYPE tadir-obj_name,
|
|
lt_subpackages TYPE zif_abapgit_sap_package=>ty_devclass_tt.
|
|
|
|
lt_subpackages = zcl_abapgit_factory=>get_sap_package( iv_package_name )->list_subpackages( ).
|
|
|
|
IF lines( lt_subpackages ) > 0.
|
|
rv_is_empty = abap_false.
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
" Ignore the SOTR if is linked to the current SAP package (DEVC)
|
|
SELECT SINGLE obj_name
|
|
FROM tadir
|
|
INTO lv_object_name
|
|
WHERE pgmid = 'R3TR'
|
|
AND NOT ( ( object = 'DEVC' OR object = 'SOTR' ) AND obj_name = iv_package_name )
|
|
AND devclass = iv_package_name.
|
|
rv_is_empty = boolc( sy-subrc <> 0 ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD is_local.
|
|
|
|
DATA lv_dlvunit TYPE tdevc-dlvunit.
|
|
|
|
SELECT SINGLE dlvunit FROM tdevc INTO lv_dlvunit
|
|
WHERE devclass = iv_package_name AND intsys <> 'SAP'.
|
|
IF sy-subrc = 0 AND lv_dlvunit = 'LOCAL'.
|
|
rv_is_local = abap_true.
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD load_package.
|
|
|
|
cl_package_factory=>load_package(
|
|
EXPORTING
|
|
i_package_name = iv_package_name
|
|
i_force_reload = abap_true
|
|
IMPORTING
|
|
e_package = ri_package
|
|
EXCEPTIONS
|
|
object_not_existing = 1
|
|
unexpected_error = 2
|
|
intern_err = 3
|
|
no_access = 4
|
|
object_locked_and_modified = 5
|
|
OTHERS = 6 ).
|
|
IF sy-subrc = 1.
|
|
RETURN.
|
|
ELSEIF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD remove_obsolete_tadir.
|
|
|
|
DATA:
|
|
lv_pack TYPE devclass,
|
|
lt_pack TYPE STANDARD TABLE OF devclass,
|
|
ls_tadir TYPE zif_abapgit_definitions=>ty_tadir,
|
|
lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt,
|
|
ls_item TYPE zif_abapgit_definitions=>ty_item.
|
|
|
|
" TADIR entries must remain for transportable packages
|
|
IF is_local( iv_package_name ) = abap_false.
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
" Clean-up sub packages first
|
|
SELECT devclass FROM tdevc INTO TABLE lt_pack WHERE parentcl = iv_package_name.
|
|
|
|
LOOP AT lt_pack INTO lv_pack.
|
|
remove_obsolete_tadir( lv_pack ).
|
|
ENDLOOP.
|
|
|
|
" Remove TADIR entries for objects that do not exist anymore
|
|
SELECT * FROM tadir INTO CORRESPONDING FIELDS OF TABLE lt_tadir
|
|
WHERE devclass = iv_package_name ##TOO_MANY_ITAB_FIELDS.
|
|
|
|
LOOP AT lt_tadir INTO ls_tadir.
|
|
ls_item-obj_type = ls_tadir-object.
|
|
ls_item-obj_name = ls_tadir-obj_name.
|
|
|
|
IF zcl_abapgit_objects=>exists( ls_item ) = abap_false.
|
|
CALL FUNCTION 'TR_TADIR_INTERFACE'
|
|
EXPORTING
|
|
wi_delete_tadir_entry = abap_true
|
|
wi_tadir_pgmid = 'R3TR'
|
|
wi_tadir_object = ls_tadir-object
|
|
wi_tadir_obj_name = ls_tadir-obj_name
|
|
wi_test_modus = abap_false
|
|
EXCEPTIONS
|
|
OTHERS = 1 ##FM_SUBRC_OK.
|
|
ENDIF.
|
|
ENDLOOP.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD set_lock.
|
|
|
|
DATA: lv_changeable TYPE abap_bool.
|
|
|
|
ii_package->get_changeable( IMPORTING e_changeable = lv_changeable ).
|
|
IF lv_changeable <> iv_lock.
|
|
TRY.
|
|
CALL METHOD ii_package->('SET_CHANGEABLE')
|
|
EXPORTING
|
|
i_changeable = iv_lock
|
|
i_suppress_dialog = abap_true " Parameter missing in 702
|
|
EXCEPTIONS
|
|
object_locked_by_other_user = 1
|
|
permission_failure = 2
|
|
object_already_changeable = 3
|
|
object_already_unlocked = 4
|
|
object_just_created = 5
|
|
object_deleted = 6
|
|
object_modified = 7
|
|
object_not_existing = 8
|
|
object_invalid = 9
|
|
unexpected_error = 10
|
|
OTHERS = 11.
|
|
CATCH cx_sy_dyn_call_param_not_found.
|
|
ii_package->set_changeable(
|
|
EXPORTING
|
|
i_changeable = iv_lock
|
|
EXCEPTIONS
|
|
object_locked_by_other_user = 1
|
|
permission_failure = 2
|
|
object_already_changeable = 3
|
|
object_already_unlocked = 4
|
|
object_just_created = 5
|
|
object_deleted = 6
|
|
object_modified = 7
|
|
object_not_existing = 8
|
|
object_invalid = 9
|
|
unexpected_error = 10
|
|
OTHERS = 11 ).
|
|
ENDTRY.
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
ENDIF.
|
|
|
|
TRY.
|
|
CALL METHOD ii_package->('SET_PERMISSIONS_CHANGEABLE')
|
|
EXPORTING
|
|
i_changeable = iv_lock
|
|
i_suppress_dialog = abap_true " Parameter missing in 702
|
|
EXCEPTIONS
|
|
object_already_changeable = 1
|
|
object_already_unlocked = 2
|
|
object_locked_by_other_user = 3
|
|
object_modified = 4
|
|
object_just_created = 5
|
|
object_deleted = 6
|
|
permission_failure = 7
|
|
object_invalid = 8
|
|
unexpected_error = 9
|
|
OTHERS = 10.
|
|
CATCH cx_sy_dyn_call_param_not_found.
|
|
ii_package->set_permissions_changeable(
|
|
EXPORTING
|
|
i_changeable = iv_lock
|
|
EXCEPTIONS
|
|
object_already_changeable = 1
|
|
object_already_unlocked = 2
|
|
object_locked_by_other_user = 3
|
|
object_modified = 4
|
|
object_just_created = 5
|
|
object_deleted = 6
|
|
permission_failure = 7
|
|
object_invalid = 8
|
|
unexpected_error = 9
|
|
OTHERS = 10 ).
|
|
ENDTRY.
|
|
IF ( sy-subrc = 1 AND iv_lock = abap_true ) OR ( sy-subrc = 2 AND iv_lock = abap_false ).
|
|
" There's no getter to find out beforehand...
|
|
ELSEIF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD update_pinf_usages.
|
|
DATA: lt_current_permissions TYPE tpak_permission_to_use_list,
|
|
li_usage TYPE REF TO if_package_permission_to_use,
|
|
ls_data_sign TYPE scomppsign,
|
|
ls_add_permission_data TYPE pkgpermdat,
|
|
lt_handled TYPE SORTED TABLE OF i WITH UNIQUE KEY table_line.
|
|
FIELD-SYMBOLS: <ls_usage_data> LIKE LINE OF it_usage_data.
|
|
|
|
" Get the current permissions
|
|
ii_package->get_permissions_to_use(
|
|
IMPORTING
|
|
e_permissions = lt_current_permissions
|
|
EXCEPTIONS
|
|
object_invalid = 1
|
|
unexpected_error = 2
|
|
OTHERS = 3 ).
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
|
|
ls_data_sign-err_sever = abap_true.
|
|
|
|
" New permissions
|
|
LOOP AT it_usage_data ASSIGNING <ls_usage_data>.
|
|
READ TABLE lt_current_permissions
|
|
WITH KEY table_line->package_interface_name = <ls_usage_data>-intf_name
|
|
INTO li_usage.
|
|
|
|
IF sy-subrc = 0 AND li_usage IS BOUND.
|
|
INSERT sy-tabix INTO TABLE lt_handled.
|
|
|
|
" Permission already exists, update attributes
|
|
li_usage->set_all_attributes(
|
|
EXPORTING
|
|
i_permission_data = <ls_usage_data>
|
|
i_data_sign = ls_data_sign
|
|
EXCEPTIONS
|
|
object_not_changeable = 1
|
|
object_invalid = 2
|
|
intern_err = 3
|
|
OTHERS = 4 ).
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
|
|
ELSE.
|
|
" Permission does not exist yet, add it
|
|
MOVE-CORRESPONDING <ls_usage_data> TO ls_add_permission_data.
|
|
ii_package->add_permission_to_use(
|
|
EXPORTING
|
|
i_pkg_permission_data = ls_add_permission_data
|
|
EXCEPTIONS
|
|
object_not_changeable = 1
|
|
object_access_error = 2
|
|
object_already_existing = 3
|
|
object_invalid = 4
|
|
unexpected_error = 5
|
|
OTHERS = 6 ).
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
|
|
ENDIF.
|
|
|
|
FREE li_usage.
|
|
ENDLOOP.
|
|
|
|
" Delete missing usages
|
|
LOOP AT lt_current_permissions INTO li_usage.
|
|
READ TABLE lt_handled WITH TABLE KEY table_line = sy-tabix TRANSPORTING NO FIELDS.
|
|
IF sy-subrc = 0.
|
|
CONTINUE.
|
|
ENDIF.
|
|
|
|
li_usage->delete(
|
|
EXCEPTIONS
|
|
object_not_changeable = 1
|
|
object_invalid = 2
|
|
* deletion_not_allowed = 3 downport, does not exist in 7.30
|
|
intern_err = 4
|
|
OTHERS = 5 ).
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
ENDLOOP.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~changed_by.
|
|
rv_user = get_package( )->changed_by.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~delete.
|
|
|
|
DATA: li_package TYPE REF TO if_package,
|
|
lv_package TYPE devclass.
|
|
|
|
" Package deletion is a bit tricky. A package can only be deleted if there are no objects
|
|
" contained in it. This includes subpackages, so first the leaf packages need to be deleted.
|
|
" Unfortunately deleted objects that are still contained in an unreleased transport request
|
|
" also count towards the contained objects counter.
|
|
" -> Currently we delete only empty packages
|
|
"
|
|
" If objects are deleted, the TADIR entry is deleted when the transport request is released.
|
|
" So before we can delete the package, the transport which deletes the objects
|
|
" in the package has to be released.
|
|
|
|
lv_package = ms_item-obj_name.
|
|
|
|
" Remove remaining OTR entries
|
|
zcl_abapgit_sotr_handler=>delete_sotr_package( iv_package ).
|
|
|
|
remove_obsolete_tadir( lv_package ).
|
|
|
|
IF is_empty( lv_package ) = abap_true.
|
|
|
|
li_package = load_package( lv_package ).
|
|
|
|
IF li_package IS NOT BOUND.
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
IF lv_package(1) = '$'.
|
|
zcl_abapgit_persist_packages=>get_instance( )->modify( lv_package ).
|
|
ENDIF.
|
|
|
|
set_lock( ii_package = li_package
|
|
iv_lock = abap_true ).
|
|
|
|
TRY.
|
|
CALL METHOD li_package->('DELETE')
|
|
EXPORTING
|
|
i_suppress_dialog = abap_true " Parameter missing in 702
|
|
EXCEPTIONS
|
|
object_not_empty = 1
|
|
object_not_changeable = 2
|
|
object_invalid = 3
|
|
intern_err = 4
|
|
OTHERS = 5.
|
|
|
|
CATCH cx_sy_dyn_call_param_not_found.
|
|
|
|
li_package->delete(
|
|
EXCEPTIONS
|
|
object_not_empty = 1
|
|
object_not_changeable = 2
|
|
object_invalid = 3
|
|
intern_err = 4
|
|
OTHERS = 5 ).
|
|
|
|
ENDTRY.
|
|
|
|
IF sy-subrc <> 0.
|
|
set_lock( ii_package = li_package
|
|
iv_lock = abap_false ).
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
|
|
TRY.
|
|
CALL METHOD li_package->('SAVE')
|
|
EXPORTING
|
|
i_suppress_dialog = abap_true
|
|
EXCEPTIONS
|
|
object_invalid = 1
|
|
object_not_changeable = 2
|
|
cancelled_in_corr = 3
|
|
permission_failure = 4
|
|
unexpected_error = 5
|
|
intern_err = 6
|
|
OTHERS = 7.
|
|
|
|
CATCH cx_sy_dyn_call_param_not_found.
|
|
|
|
li_package->save(
|
|
EXCEPTIONS
|
|
object_invalid = 1
|
|
object_not_changeable = 2
|
|
cancelled_in_corr = 3
|
|
permission_failure = 4
|
|
unexpected_error = 5
|
|
intern_err = 6
|
|
OTHERS = 7 ).
|
|
|
|
ENDTRY.
|
|
IF sy-subrc <> 0.
|
|
set_lock( ii_package = li_package
|
|
iv_lock = abap_false ).
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~deserialize.
|
|
DATA: li_package TYPE REF TO if_package,
|
|
ls_package_data TYPE scompkdtln,
|
|
ls_data_sign TYPE scompksign,
|
|
lt_usage_data TYPE scomppdata,
|
|
ls_save_sign TYPE paksavsign.
|
|
|
|
FIELD-SYMBOLS: <ls_usage_data> TYPE scomppdtln.
|
|
|
|
|
|
mv_local_devclass = iv_package.
|
|
|
|
io_xml->read(
|
|
EXPORTING
|
|
iv_name = 'DEVC'
|
|
CHANGING
|
|
cg_data = ls_package_data ).
|
|
|
|
IF mv_local_devclass(1) = '$'.
|
|
IF ls_package_data-mainpack = 'X'.
|
|
zcx_abapgit_exception=>raise( |Main package { iv_package } cannot be used in local package| ).
|
|
ELSEIF ls_package_data-mainpack = 'S'.
|
|
zcx_abapgit_exception=>raise( |Structure package { iv_package } cannot be used in local package| ).
|
|
ENDIF.
|
|
ENDIF.
|
|
|
|
li_package = get_package( ).
|
|
|
|
" Swap out repository package name with the local installation package name
|
|
ls_package_data-devclass = mv_local_devclass.
|
|
IF li_package IS BOUND.
|
|
ls_package_data-pdevclass = li_package->transport_layer.
|
|
ENDIF.
|
|
|
|
" For local packages store application component
|
|
IF ls_package_data-devclass(1) = '$'.
|
|
zcl_abapgit_persist_packages=>get_instance( )->modify(
|
|
iv_package = ls_package_data-devclass
|
|
iv_component = ls_package_data-component
|
|
iv_comp_posid = ls_package_data-comp_posid ).
|
|
ENDIF.
|
|
|
|
" Parent package is not changed. Assume the folder logic already created the package and set
|
|
" the hierarchy before.
|
|
CLEAR ls_package_data-parentcl.
|
|
|
|
* Fields not set:
|
|
* korrflag
|
|
* dlvunit
|
|
* parentcl
|
|
* cli_check
|
|
* intprefx
|
|
ls_data_sign-ctext = abap_true.
|
|
ls_data_sign-as4user = abap_true.
|
|
ls_data_sign-pdevclass = abap_true.
|
|
ls_data_sign-comp_posid = abap_true.
|
|
ls_data_sign-component = abap_true.
|
|
ls_data_sign-perminher = abap_true.
|
|
ls_data_sign-packtype = abap_true.
|
|
ls_data_sign-restricted = abap_true.
|
|
ls_data_sign-mainpack = abap_true.
|
|
ls_data_sign-srv_check = abap_true.
|
|
ls_data_sign-ext_alias = abap_true.
|
|
ls_data_sign-project_guid = abap_true.
|
|
ls_data_sign-project_id = abap_true.
|
|
ls_data_sign-project_passdown = abap_true.
|
|
|
|
IF ls_package_data-ctext IS INITIAL.
|
|
ls_package_data-ctext = mv_local_devclass.
|
|
ENDIF.
|
|
IF ls_package_data-dlvunit IS INITIAL.
|
|
ls_package_data-dlvunit = 'HOME'.
|
|
ENDIF.
|
|
|
|
ls_package_data-as4user = cl_abap_syst=>get_user_name( ).
|
|
|
|
IF li_package IS BOUND.
|
|
" Package already exists, change it
|
|
set_lock( ii_package = li_package
|
|
iv_lock = abap_true ).
|
|
|
|
li_package->set_all_attributes(
|
|
EXPORTING
|
|
i_package_data = ls_package_data
|
|
i_data_sign = ls_data_sign
|
|
EXCEPTIONS
|
|
object_not_changeable = 1
|
|
object_deleted = 2
|
|
object_invalid = 3
|
|
short_text_missing = 4
|
|
author_not_existing = 5
|
|
local_package = 6
|
|
software_component_invalid = 7
|
|
layer_invalid = 8
|
|
korrflag_invalid = 9
|
|
component_not_existing = 10
|
|
component_missing = 11
|
|
authorize_failure = 12
|
|
prefix_in_use = 13
|
|
unexpected_error = 14
|
|
intern_err = 15
|
|
* wrong_mainpack_value = 16 downport, does not exist in 7.30
|
|
* superpackage_invalid = 17 downport, does not exist in 7.30
|
|
OTHERS = 18 ).
|
|
IF sy-subrc <> 0.
|
|
set_lock( ii_package = li_package
|
|
iv_lock = abap_false ).
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
|
|
ELSE.
|
|
" Package does not exist yet, create it
|
|
" This shouldn't really happen, because the folder logic initially creates the packages.
|
|
cl_package_factory=>create_new_package(
|
|
IMPORTING
|
|
e_package = li_package
|
|
CHANGING
|
|
c_package_data = ls_package_data
|
|
EXCEPTIONS
|
|
object_already_existing = 1
|
|
object_just_created = 2
|
|
not_authorized = 3
|
|
wrong_name_prefix = 4
|
|
undefined_name = 5
|
|
reserved_local_name = 6
|
|
invalid_package_name = 7
|
|
short_text_missing = 8
|
|
software_component_invalid = 9
|
|
layer_invalid = 10
|
|
author_not_existing = 11
|
|
component_not_existing = 12
|
|
component_missing = 13
|
|
prefix_in_use = 14
|
|
unexpected_error = 15
|
|
intern_err = 16
|
|
no_access = 17
|
|
* invalid_translation_depth = 18 downport, does not exist in 7.30
|
|
* wrong_mainpack_value = 19 downport, does not exist in 7.30
|
|
* superpackage_invalid = 20 downport, does not exist in 7.30
|
|
* error_in_cts_checks = 21 downport, does not exist in 7.31
|
|
OTHERS = 22 ).
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
ENDIF.
|
|
|
|
" Load package interface usages
|
|
TRY.
|
|
io_xml->read(
|
|
EXPORTING
|
|
iv_name = 'PERMISSION'
|
|
CHANGING
|
|
cg_data = lt_usage_data ).
|
|
CATCH zcx_abapgit_exception ##NO_HANDLER.
|
|
" No permissions saved
|
|
ENDTRY.
|
|
|
|
LOOP AT lt_usage_data ASSIGNING <ls_usage_data>.
|
|
<ls_usage_data>-client_pak = mv_local_devclass.
|
|
ENDLOOP.
|
|
|
|
update_pinf_usages( ii_package = li_package
|
|
it_usage_data = lt_usage_data ).
|
|
|
|
ls_save_sign-pack = abap_true.
|
|
ls_save_sign-permis = abap_true.
|
|
ls_save_sign-elems = abap_true.
|
|
ls_save_sign-interf = abap_true.
|
|
li_package->save_generic(
|
|
EXPORTING
|
|
i_save_sign = ls_save_sign
|
|
i_transport_request = iv_transport
|
|
i_suppress_dialog = abap_true
|
|
EXCEPTIONS
|
|
cancelled_in_corr = 1
|
|
permission_failure = 2
|
|
object_not_changeable = 3
|
|
object_invalid = 4
|
|
OTHERS = 5 ).
|
|
IF sy-subrc <> 0.
|
|
set_lock( ii_package = li_package
|
|
iv_lock = abap_false ).
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
|
|
set_lock( ii_package = li_package
|
|
iv_lock = abap_false ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~exists.
|
|
" Check remote package if deserialize has not been called before this
|
|
IF mv_local_devclass IS INITIAL.
|
|
rv_bool = abap_false.
|
|
ELSE.
|
|
cl_package_helper=>check_package_existence(
|
|
EXPORTING
|
|
i_package_name = mv_local_devclass
|
|
IMPORTING
|
|
e_package_exists = rv_bool
|
|
EXCEPTIONS
|
|
intern_err = 1
|
|
OTHERS = 2 ).
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~get_comparator.
|
|
RETURN.
|
|
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~is_locked.
|
|
|
|
DATA: lv_object TYPE eqegraarg.
|
|
|
|
lv_object = |DV{ ms_item-obj_name }|.
|
|
OVERLAY lv_object WITH ' '.
|
|
lv_object = lv_object && '*'.
|
|
|
|
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'EEUDB'
|
|
iv_argument = lv_object ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~jump.
|
|
" Covered by ZCL_ABAPGIT_OBJECTS=>JUMP
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~serialize.
|
|
DATA: ls_package_data TYPE scompkdtln,
|
|
ls_package_comp TYPE zcl_abapgit_persist_packages=>ty_package,
|
|
li_package TYPE REF TO if_package,
|
|
lt_intf_usages TYPE tpak_permission_to_use_list,
|
|
lt_usage_data TYPE scomppdata,
|
|
ls_usage_data TYPE scomppdtln,
|
|
li_usage TYPE REF TO if_package_permission_to_use.
|
|
|
|
FIELD-SYMBOLS: <lg_field> TYPE any.
|
|
|
|
|
|
li_package = get_package( ).
|
|
IF li_package IS NOT BOUND.
|
|
zcx_abapgit_exception=>raise( |Could not find package to serialize.| ).
|
|
ENDIF.
|
|
|
|
li_package->get_all_attributes(
|
|
IMPORTING
|
|
e_package_data = ls_package_data
|
|
EXCEPTIONS
|
|
object_invalid = 1
|
|
package_deleted = 2
|
|
intern_err = 3
|
|
OTHERS = 4 ).
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
|
|
" For local packages get application component
|
|
IF is_local( ls_package_data-devclass ) = abap_true.
|
|
ls_package_comp = zcl_abapgit_persist_packages=>get_instance( )->read( ls_package_data-devclass ).
|
|
ls_package_data-component = ls_package_comp-component.
|
|
ls_package_data-comp_posid = ls_package_comp-comp_posid.
|
|
ENDIF.
|
|
|
|
CLEAR: ls_package_data-devclass,
|
|
ls_package_data-parentcl.
|
|
|
|
" Clear administrative data to prevent diffs
|
|
CLEAR: ls_package_data-created_by,
|
|
ls_package_data-created_on,
|
|
ls_package_data-changed_by,
|
|
ls_package_data-changed_on,
|
|
ls_package_data-as4user.
|
|
|
|
" Clear text descriptions that might be localized
|
|
CLEAR: ls_package_data-comp_text,
|
|
ls_package_data-dlvu_text,
|
|
ls_package_data-layer_text.
|
|
|
|
" Clear obsolete fields
|
|
CLEAR: ls_package_data-intfprefx,
|
|
ls_package_data-cli_check.
|
|
|
|
ASSIGN COMPONENT 'TRANSLATION_DEPTH_TEXT'
|
|
OF STRUCTURE ls_package_data
|
|
TO <lg_field>.
|
|
IF sy-subrc = 0.
|
|
CLEAR: <lg_field>.
|
|
ENDIF.
|
|
|
|
ASSIGN COMPONENT 'TRANSLATION_GRAPH_DEPTH_TEXT'
|
|
OF STRUCTURE ls_package_data
|
|
TO <lg_field>.
|
|
IF sy-subrc = 0.
|
|
CLEAR: <lg_field>.
|
|
ENDIF.
|
|
|
|
" Clear things related to local installation package
|
|
CLEAR: ls_package_data-namespace,
|
|
ls_package_data-dlvunit,
|
|
ls_package_data-pdevclass.
|
|
|
|
" Not usable on customer systems
|
|
ASSIGN COMPONENT 'TRANSLATION_DEPTH'
|
|
OF STRUCTURE ls_package_data
|
|
TO <lg_field>.
|
|
IF sy-subrc = 0.
|
|
CLEAR: <lg_field>.
|
|
ENDIF.
|
|
|
|
ASSIGN COMPONENT 'TRANSLATION_GRAPH_DEPTH'
|
|
OF STRUCTURE ls_package_data
|
|
TO <lg_field>.
|
|
IF sy-subrc = 0.
|
|
CLEAR: <lg_field>.
|
|
ENDIF.
|
|
|
|
CLEAR: ls_package_data-korrflag.
|
|
|
|
io_xml->add( iv_name = 'DEVC'
|
|
ig_data = ls_package_data ).
|
|
|
|
" Save package interface usages
|
|
li_package->get_permissions_to_use(
|
|
IMPORTING
|
|
e_permissions = lt_intf_usages
|
|
EXCEPTIONS
|
|
object_invalid = 1
|
|
unexpected_error = 2
|
|
OTHERS = 3 ).
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
|
|
LOOP AT lt_intf_usages INTO li_usage.
|
|
li_usage->get_all_attributes(
|
|
IMPORTING
|
|
e_permission_data = ls_usage_data
|
|
EXCEPTIONS
|
|
object_invalid = 1
|
|
intern_err = 2
|
|
OTHERS = 3 ).
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
|
|
CLEAR: ls_usage_data-pack_name, ls_usage_data-client_pak.
|
|
|
|
APPEND ls_usage_data TO lt_usage_data.
|
|
ENDLOOP.
|
|
|
|
IF lt_usage_data IS NOT INITIAL.
|
|
io_xml->add( iv_name = 'PERMISSION'
|
|
ig_data = lt_usage_data ).
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
ENDCLASS.
|