diff --git a/src/env/zcl_abapgit_user_record.clas.abap b/src/env/zcl_abapgit_user_record.clas.abap index 47e848a35..3d34e4316 100644 --- a/src/env/zcl_abapgit_user_record.clas.abap +++ b/src/env/zcl_abapgit_user_record.clas.abap @@ -6,20 +6,20 @@ CLASS zcl_abapgit_user_record DEFINITION PUBLIC SECTION. CLASS-METHODS reset. CLASS-METHODS get_instance - IMPORTING - !iv_user TYPE sy-uname RETURNING VALUE(ro_user) TYPE REF TO zcl_abapgit_user_record. - METHODS constructor - IMPORTING - !iv_user TYPE sy-uname. + METHODS get_name + IMPORTING + iv_username TYPE sy-uname RETURNING VALUE(rv_name) TYPE string. METHODS get_email + IMPORTING + iv_username TYPE sy-uname RETURNING VALUE(rv_email) TYPE string. - CLASS-METHODS get_title + METHODS get_title IMPORTING iv_username TYPE sy-uname RETURNING @@ -28,17 +28,13 @@ CLASS zcl_abapgit_user_record DEFINITION PRIVATE SECTION. TYPES: BEGIN OF ty_user, - user TYPE sy-uname, - o_user TYPE REF TO zcl_abapgit_user_record, + user TYPE sy-uname, + name TYPE string, + email TYPE string, END OF ty_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 IMPORTING iv_user TYPE sy-uname @@ -48,14 +44,31 @@ CLASS zcl_abapgit_user_record DEFINITION RAISING zcx_abapgit_exception. - METHODS get_user_dtls_from_other_clnt + CLASS-METHODS get_user_dtls_from_other_clnt 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. CLASS zcl_abapgit_user_record IMPLEMENTATION. + METHOD get_instance. + RETURN. " todo, implement method + ENDMETHOD. METHOD get_title. @@ -120,9 +133,7 @@ CLASS zcl_abapgit_user_record IMPLEMENTATION. ENDMETHOD. - METHOD constructor. - - DATA ls_user TYPE ty_user. + METHOD build_cache. " Get user details TRY. @@ -130,18 +141,17 @@ CLASS zcl_abapgit_user_record IMPLEMENTATION. EXPORTING iv_user = iv_user IMPORTING - ev_fullname = ms_user-name - ev_email = ms_user-email ). + ev_fullname = rs_user-name + ev_email = rs_user-email ). CATCH zcx_abapgit_exception. " Could not find user, try to get from other clients get_user_dtls_from_other_clnt( iv_user ). ENDTRY. " 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. - ls_user-user = iv_user. - ls_user-o_user = me. - INSERT ls_user INTO TABLE gt_user. + IF rs_user-name IS NOT INITIAL AND rs_user-email IS NOT INITIAL. + rs_user-user = iv_user. + INSERT rs_user INTO TABLE gt_user. ENDIF. ENDMETHOD. @@ -149,22 +159,16 @@ CLASS zcl_abapgit_user_record IMPLEMENTATION. METHOD get_email. - rv_email = ms_user-email. + rv_email = read_cache( iv_username )-email. ENDMETHOD. - METHOD get_instance. + METHOD read_cache. - FIELD-SYMBOLS TYPE ty_user. - - READ TABLE gt_user ASSIGNING WITH TABLE KEY user = iv_user. - IF sy-subrc = 0. - ro_user = -o_user. - ELSE. - CREATE OBJECT ro_user - EXPORTING - iv_user = iv_user. + READ TABLE gt_user INTO rs_user WITH TABLE KEY user = iv_user. + IF sy-subrc <> 0. + rs_user = build_cache( iv_user ). ENDIF. ENDMETHOD. @@ -172,7 +176,7 @@ CLASS zcl_abapgit_user_record IMPLEMENTATION. METHOD get_name. - rv_name = ms_user-name. + rv_name = read_cache( iv_username )-name. ENDMETHOD. @@ -190,7 +194,7 @@ CLASS zcl_abapgit_user_record IMPLEMENTATION. ORDER BY PRIMARY KEY. LOOP AT lt_dev_clients ASSIGNING . - 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 INNER JOIN adrp AS p ON p~persnumber = u~persnumber AND p~client = u~mandt