refactor zcl_abapgit_user_record

This commit is contained in:
Lars Hvam 2025-04-15 12:42:54 +02:00
parent 1fa75ebb47
commit 94bc357d90

View File

@ -6,20 +6,20 @@ CLASS zcl_abapgit_user_record DEFINITION
PUBLIC SECTION. PUBLIC SECTION.
CLASS-METHODS reset. CLASS-METHODS reset.
CLASS-METHODS get_instance CLASS-METHODS get_instance
IMPORTING
!iv_user TYPE sy-uname
RETURNING RETURNING
VALUE(ro_user) TYPE REF TO zcl_abapgit_user_record. VALUE(ro_user) TYPE REF TO zcl_abapgit_user_record.
METHODS constructor
IMPORTING
!iv_user TYPE sy-uname.
METHODS get_name METHODS get_name
IMPORTING
iv_username TYPE sy-uname
RETURNING RETURNING
VALUE(rv_name) TYPE string. VALUE(rv_name) TYPE string.
METHODS get_email METHODS get_email
IMPORTING
iv_username TYPE sy-uname
RETURNING RETURNING
VALUE(rv_email) TYPE string. VALUE(rv_email) TYPE string.
CLASS-METHODS get_title METHODS get_title
IMPORTING IMPORTING
iv_username TYPE sy-uname iv_username TYPE sy-uname
RETURNING RETURNING
@ -28,17 +28,13 @@ CLASS zcl_abapgit_user_record DEFINITION
PRIVATE SECTION. PRIVATE SECTION.
TYPES: TYPES:
BEGIN OF ty_user, BEGIN OF ty_user,
user TYPE sy-uname, user TYPE sy-uname,
o_user TYPE REF TO zcl_abapgit_user_record, name TYPE string,
email TYPE string,
END OF ty_user. END OF ty_user.
CLASS-DATA gt_user TYPE HASHED TABLE OF ty_user WITH UNIQUE KEY user. CLASS-DATA gt_user TYPE HASHED TABLE OF ty_user WITH UNIQUE KEY user.
DATA: BEGIN OF ms_user,
name TYPE string,
email TYPE string,
END OF ms_user .
METHODS check_user_exists METHODS check_user_exists
IMPORTING IMPORTING
iv_user TYPE sy-uname iv_user TYPE sy-uname
@ -48,14 +44,31 @@ CLASS zcl_abapgit_user_record DEFINITION
RAISING RAISING
zcx_abapgit_exception. zcx_abapgit_exception.
METHODS get_user_dtls_from_other_clnt CLASS-METHODS get_user_dtls_from_other_clnt
IMPORTING IMPORTING
iv_user TYPE sy-uname. iv_user TYPE sy-uname
RETURNING
VALUE(rs_user) TYPE ty_user.
CLASS-METHODS build_cache
IMPORTING
iv_user TYPE sy-uname
RETURNING
VALUE(rs_user) TYPE ty_user.
CLASS-METHODS read_cache
IMPORTING
iv_user TYPE sy-uname
RETURNING
VALUE(rs_user) TYPE ty_user.
ENDCLASS. ENDCLASS.
CLASS zcl_abapgit_user_record IMPLEMENTATION. CLASS zcl_abapgit_user_record IMPLEMENTATION.
METHOD get_instance.
RETURN. " todo, implement method
ENDMETHOD.
METHOD get_title. METHOD get_title.
@ -120,9 +133,7 @@ CLASS zcl_abapgit_user_record IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD constructor. METHOD build_cache.
DATA ls_user TYPE ty_user.
" Get user details " Get user details
TRY. TRY.
@ -130,18 +141,17 @@ CLASS zcl_abapgit_user_record IMPLEMENTATION.
EXPORTING EXPORTING
iv_user = iv_user iv_user = iv_user
IMPORTING IMPORTING
ev_fullname = ms_user-name ev_fullname = rs_user-name
ev_email = ms_user-email ). ev_email = rs_user-email ).
CATCH zcx_abapgit_exception. CATCH zcx_abapgit_exception.
" Could not find user, try to get from other clients " Could not find user, try to get from other clients
get_user_dtls_from_other_clnt( iv_user ). get_user_dtls_from_other_clnt( iv_user ).
ENDTRY. ENDTRY.
" If the user has been found add it to the list " If the user has been found add it to the list
IF ms_user-name IS NOT INITIAL AND ms_user-email IS NOT INITIAL. IF rs_user-name IS NOT INITIAL AND rs_user-email IS NOT INITIAL.
ls_user-user = iv_user. rs_user-user = iv_user.
ls_user-o_user = me. INSERT rs_user INTO TABLE gt_user.
INSERT ls_user INTO TABLE gt_user.
ENDIF. ENDIF.
ENDMETHOD. ENDMETHOD.
@ -149,22 +159,16 @@ CLASS zcl_abapgit_user_record IMPLEMENTATION.
METHOD get_email. METHOD get_email.
rv_email = ms_user-email. rv_email = read_cache( iv_username )-email.
ENDMETHOD. ENDMETHOD.
METHOD get_instance. METHOD read_cache.
FIELD-SYMBOLS <ls_user> TYPE ty_user. READ TABLE gt_user INTO rs_user WITH TABLE KEY user = iv_user.
IF sy-subrc <> 0.
READ TABLE gt_user ASSIGNING <ls_user> WITH TABLE KEY user = iv_user. rs_user = build_cache( iv_user ).
IF sy-subrc = 0.
ro_user = <ls_user>-o_user.
ELSE.
CREATE OBJECT ro_user
EXPORTING
iv_user = iv_user.
ENDIF. ENDIF.
ENDMETHOD. ENDMETHOD.
@ -172,7 +176,7 @@ CLASS zcl_abapgit_user_record IMPLEMENTATION.
METHOD get_name. METHOD get_name.
rv_name = ms_user-name. rv_name = read_cache( iv_username )-name.
ENDMETHOD. ENDMETHOD.
@ -190,7 +194,7 @@ CLASS zcl_abapgit_user_record IMPLEMENTATION.
ORDER BY PRIMARY KEY. ORDER BY PRIMARY KEY.
LOOP AT lt_dev_clients ASSIGNING <lv_dev_client>. LOOP AT lt_dev_clients ASSIGNING <lv_dev_client>.
SELECT SINGLE p~name_text a~smtp_addr INTO (ms_user-name, ms_user-email) SELECT SINGLE u~bname p~name_text a~smtp_addr INTO (rs_user, rs_user-name, rs_user-email)
FROM usr21 AS u FROM usr21 AS u
INNER JOIN adrp AS p ON p~persnumber = u~persnumber INNER JOIN adrp AS p ON p~persnumber = u~persnumber
AND p~client = u~mandt AND p~client = u~mandt