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.