refactor user record class (#6520)

This commit is contained in:
Lars Hvam 2023-09-30 19:15:42 +02:00 committed by GitHub
parent 90d1e1a02f
commit 0ab304420b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -15,10 +15,10 @@ CLASS zcl_abapgit_user_record DEFINITION
!iv_user TYPE sy-uname. !iv_user TYPE sy-uname.
METHODS get_name METHODS get_name
RETURNING RETURNING
VALUE(rv_name) TYPE zif_abapgit_git_definitions=>ty_git_user-name. VALUE(rv_name) TYPE string.
METHODS get_email METHODS get_email
RETURNING RETURNING
VALUE(rv_email) TYPE zif_abapgit_git_definitions=>ty_git_user-email. VALUE(rv_email) TYPE string.
CLASS-METHODS get_title CLASS-METHODS get_title
IMPORTING IMPORTING
iv_username TYPE sy-uname iv_username TYPE sy-uname
@ -32,25 +32,19 @@ CLASS zcl_abapgit_user_record DEFINITION
o_user TYPE REF TO zcl_abapgit_user_record, o_user TYPE REF TO zcl_abapgit_user_record,
END OF ty_user. END OF ty_user.
TYPES: CLASS-DATA gt_user TYPE HASHED TABLE OF ty_user WITH UNIQUE KEY user.
ty_smtp TYPE STANDARD TABLE OF bapiadsmtp WITH DEFAULT KEY.
TYPES: DATA: BEGIN OF ms_user,
ty_dev_clients TYPE SORTED TABLE OF sy-mandt WITH UNIQUE KEY table_line. name TYPE string,
email TYPE string,
CLASS-DATA: END OF ms_user .
gt_user TYPE HASHED TABLE OF ty_user
WITH UNIQUE KEY user.
DATA:
ms_user TYPE zif_abapgit_git_definitions=>ty_git_user.
METHODS check_user_exists METHODS check_user_exists
IMPORTING IMPORTING
VALUE(iv_user) TYPE sy-uname iv_user TYPE sy-uname
EXPORTING EXPORTING
VALUE(es_address) TYPE bapiaddr3 ev_fullname TYPE string
VALUE(et_smtp) TYPE ty_smtp ev_email TYPE string
RAISING RAISING
zcx_abapgit_exception. zcx_abapgit_exception.
@ -85,53 +79,50 @@ CLASS zcl_abapgit_user_record IMPLEMENTATION.
METHOD check_user_exists. METHOD check_user_exists.
DATA lt_return TYPE STANDARD TABLE OF bapiret2 WITH DEFAULT KEY. DATA lt_return TYPE STANDARD TABLE OF bapiret2 WITH DEFAULT KEY.
DATA ls_address TYPE bapiaddr3.
DATA lt_smtp TYPE TABLE OF bapiadsmtp.
DATA ls_smtp LIKE LINE OF lt_smtp.
CALL FUNCTION 'BAPI_USER_GET_DETAIL' CALL FUNCTION 'BAPI_USER_GET_DETAIL'
EXPORTING EXPORTING
username = iv_user username = iv_user
IMPORTING IMPORTING
address = es_address address = ls_address
TABLES TABLES
return = lt_return return = lt_return
addsmtp = et_smtp. addsmtp = lt_smtp.
LOOP AT lt_return TRANSPORTING NO FIELDS WHERE type CA 'EA'. LOOP AT lt_return TRANSPORTING NO FIELDS WHERE type CA 'EA'.
zcx_abapgit_exception=>raise( |User: { iv_user } not found| ). zcx_abapgit_exception=>raise( |User: { iv_user } not found| ).
ENDLOOP. ENDLOOP.
ev_fullname = ls_address-fullname.
" Choose the first email from SU01
SORT lt_smtp BY consnumber ASCENDING.
LOOP AT lt_smtp INTO ls_smtp.
ev_email = ls_smtp-e_mail.
EXIT.
ENDLOOP.
ENDMETHOD. ENDMETHOD.
METHOD constructor. METHOD constructor.
DATA: DATA ls_user TYPE ty_user.
ls_address TYPE bapiaddr3,
lt_smtp TYPE TABLE OF bapiadsmtp,
ls_smtp TYPE bapiadsmtp,
ls_user TYPE ty_user,
lo_exception TYPE REF TO zcx_abapgit_exception.
"Get user details " Get user details
TRY. TRY.
check_user_exists( check_user_exists(
EXPORTING EXPORTING
iv_user = iv_user iv_user = iv_user
IMPORTING IMPORTING
es_address = ls_address ev_fullname = ms_user-name
et_smtp = lt_smtp ). ev_email = ms_user-email ).
CATCH zcx_abapgit_exception.
" Choose the first email from SU01 " Could not find user, try to get from other clients
SORT lt_smtp BY consnumber ASCENDING.
LOOP AT lt_smtp INTO ls_smtp.
ms_user-email = ls_smtp-e_mail.
EXIT.
ENDLOOP.
" Attempt to use the full name from SU01
ms_user-name = ls_address-fullname.
CATCH zcx_abapgit_exception INTO lo_exception.
"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.
@ -154,7 +145,7 @@ CLASS zcl_abapgit_user_record IMPLEMENTATION.
METHOD get_instance. METHOD get_instance.
FIELD-SYMBOLS: <ls_user> TYPE ty_user. FIELD-SYMBOLS <ls_user> TYPE ty_user.
READ TABLE gt_user ASSIGNING <ls_user> WITH TABLE KEY user = iv_user. READ TABLE gt_user ASSIGNING <ls_user> WITH TABLE KEY user = iv_user.
IF sy-subrc = 0. IF sy-subrc = 0.
@ -178,18 +169,17 @@ CLASS zcl_abapgit_user_record IMPLEMENTATION.
METHOD get_user_dtls_from_other_clnt. METHOD get_user_dtls_from_other_clnt.
CONSTANTS lc_cc_category TYPE string VALUE 'C'. CONSTANTS lc_cc_category TYPE string VALUE 'C'.
TYPES ty_dev_clients TYPE SORTED TABLE OF sy-mandt WITH UNIQUE KEY table_line.
DATA lt_dev_clients TYPE ty_dev_clients. DATA lt_dev_clients TYPE ty_dev_clients.
FIELD-SYMBOLS <lv_dev_client> LIKE LINE OF lt_dev_clients.
FIELD-SYMBOLS: <lv_dev_client> LIKE LINE OF lt_dev_clients. " Could not find the user, try other development clients
" Could not find the user Try other development clients
SELECT mandt FROM t000 INTO TABLE lt_dev_clients SELECT mandt FROM t000 INTO TABLE lt_dev_clients
WHERE cccategory = lc_cc_category AND mandt <> sy-mandt WHERE cccategory = lc_cc_category AND mandt <> sy-mandt
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 p~name_text a~smtp_addr INTO (ms_user-name, ms_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