mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
194 lines
4.6 KiB
ABAP
194 lines
4.6 KiB
ABAP
CLASS zcl_abapgit_object_auth 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
|
|
!io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
|
|
!io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
|
|
RAISING
|
|
zcx_abapgit_exception.
|
|
|
|
PROTECTED SECTION.
|
|
PRIVATE SECTION.
|
|
DATA: mv_fieldname TYPE authx-fieldname.
|
|
|
|
ENDCLASS.
|
|
|
|
|
|
|
|
CLASS zcl_abapgit_object_auth IMPLEMENTATION.
|
|
|
|
|
|
METHOD constructor.
|
|
|
|
super->constructor(
|
|
is_item = is_item
|
|
iv_language = iv_language
|
|
io_files = io_files
|
|
io_i18n_params = io_i18n_params ).
|
|
|
|
mv_fieldname = ms_item-obj_name.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~changed_by.
|
|
* looks like "changed by user" is not stored in the database
|
|
rv_user = c_user_unknown.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~delete.
|
|
|
|
" there is a bug in SAP standard, the TADIR entries are not deleted
|
|
" when the AUTH object is deleted in transaction SU20
|
|
|
|
" FM SUSR_AUTF_DELETE_FIELD calls the UI, therefore we reimplement its logic
|
|
|
|
DATA:
|
|
lt_objlst TYPE susr_t_xuobject,
|
|
lo_auth TYPE REF TO cl_auth_tools.
|
|
|
|
" authority check
|
|
CREATE OBJECT lo_auth.
|
|
IF lo_auth->authority_check_suso( actvt = '06'
|
|
fieldname = mv_fieldname ) <> 0.
|
|
MESSAGE e463(01) WITH mv_fieldname INTO zcx_abapgit_exception=>null.
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
|
|
" if field is used check
|
|
lt_objlst = lo_auth->suso_where_used_afield( mv_fieldname ).
|
|
IF lt_objlst IS NOT INITIAL.
|
|
MESSAGE i453(01) WITH mv_fieldname INTO zcx_abapgit_exception=>null.
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
|
|
" collect fieldname into a transport task
|
|
IF lo_auth->add_afield_to_trkorr( mv_fieldname ) <> 0.
|
|
"no transport -> no deletion
|
|
MESSAGE e507(0m) INTO zcx_abapgit_exception=>null.
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
|
|
DELETE FROM authx WHERE fieldname = mv_fieldname.
|
|
IF sy-subrc <> 0.
|
|
MESSAGE e507(0m) INTO zcx_abapgit_exception=>null.
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~deserialize.
|
|
* see include LSAUT_FIELDF02
|
|
|
|
DATA: ls_authx TYPE authx,
|
|
lo_auth TYPE REF TO cl_auth_tools.
|
|
|
|
|
|
io_xml->read( EXPORTING iv_name = 'AUTHX'
|
|
CHANGING cg_data = ls_authx ).
|
|
|
|
tadir_insert( iv_package ).
|
|
|
|
CREATE OBJECT lo_auth.
|
|
|
|
IF lo_auth->add_afield_to_trkorr( ls_authx-fieldname ) <> 0.
|
|
zcx_abapgit_exception=>raise( 'Error deserializing AUTH' ).
|
|
ENDIF.
|
|
|
|
MODIFY authx FROM ls_authx.
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise( 'Error deserializing AUTH' ).
|
|
ENDIF.
|
|
|
|
CALL FUNCTION 'DB_COMMIT'.
|
|
lo_auth->set_authfld_info_from_db( ls_authx-fieldname ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~exists.
|
|
|
|
SELECT SINGLE fieldname FROM authx
|
|
INTO mv_fieldname
|
|
WHERE fieldname = ms_item-obj_name. "#EC CI_GENBUFF
|
|
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-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.
|
|
rv_is_locked = abap_false.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~jump.
|
|
IF zcl_abapgit_factory=>get_function_module( )->function_exists( 'SU20_MAINTAIN_SNGL' ) = abap_true.
|
|
" this function module does not exist in 740
|
|
CALL FUNCTION 'SU20_MAINTAIN_SNGL'
|
|
EXPORTING
|
|
id_field = mv_fieldname
|
|
id_wbo_mode = abap_false ##EXISTS.
|
|
rv_exit = abap_true.
|
|
ENDIF.
|
|
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: ls_authx TYPE authx.
|
|
|
|
|
|
SELECT SINGLE * FROM authx INTO ls_authx
|
|
WHERE fieldname = ms_item-obj_name. "#EC CI_GENBUFF
|
|
IF sy-subrc <> 0.
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
io_xml->add( iv_name = 'AUTHX'
|
|
ig_data = ls_authx ).
|
|
|
|
ENDMETHOD.
|
|
ENDCLASS.
|