diff --git a/src/ui/zcl_abapgit_gui_page_commit.clas.abap b/src/ui/zcl_abapgit_gui_page_commit.clas.abap index e88d6bec3..06e1063cf 100644 --- a/src/ui/zcl_abapgit_gui_page_commit.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_commit.clas.abap @@ -44,7 +44,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_GUI_PAGE_COMMIT IMPLEMENTATION. +CLASS zcl_abapgit_gui_page_commit IMPLEMENTATION. METHOD constructor. @@ -96,11 +96,19 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_COMMIT IMPLEMENTATION. IF lv_user IS INITIAL. lv_user = lo_user->get_default_git_user_name( ). ENDIF. + IF lv_user IS INITIAL. + " get default from user master record + lv_user = zcl_abapgit_user_master_record=>get_instance( sy-uname )->get_name( ). + ENDIF. lv_email = lo_user->get_repo_git_user_email( mo_repo->get_url( ) ). IF lv_email IS INITIAL. lv_email = lo_user->get_default_git_user_email( ). ENDIF. + IF lv_email IS INITIAL. + " get default from user master record + lv_email = zcl_abapgit_user_master_record=>get_instance( sy-uname )->get_email( ). + ENDIF. CREATE OBJECT ro_html. diff --git a/src/utils/zcl_abapgit_user_master_record.clas.abap b/src/utils/zcl_abapgit_user_master_record.clas.abap new file mode 100644 index 000000000..384c090df --- /dev/null +++ b/src/utils/zcl_abapgit_user_master_record.clas.abap @@ -0,0 +1,117 @@ +CLASS zcl_abapgit_user_master_record DEFINITION + PUBLIC + FINAL + CREATE PRIVATE . + + PUBLIC SECTION. + + CLASS-METHODS: + get_instance + IMPORTING + !iv_user TYPE uname + RETURNING + VALUE(ro_user) TYPE REF TO zcl_abapgit_user_master_record. + + METHODS: + constructor + IMPORTING + !iv_user TYPE uname, + + get_name + RETURNING + VALUE(rv_name) TYPE zif_abapgit_definitions=>ty_git_user-name, + + get_email + RETURNING + VALUE(rv_email) TYPE zif_abapgit_definitions=>ty_git_user-email. + + PRIVATE SECTION. + TYPES: + BEGIN OF ty_user, + user TYPE uname, + o_user TYPE REF TO zcl_abapgit_user_master_record, + END OF ty_user. + + CLASS-DATA: + mt_user TYPE HASHED TABLE OF ty_user + WITH UNIQUE KEY user. + + DATA: + ms_user TYPE zif_abapgit_definitions=>ty_git_user. + +ENDCLASS. + + + +CLASS zcl_abapgit_user_master_record IMPLEMENTATION. + + + METHOD constructor. + + DATA: lt_return TYPE TABLE OF bapiret2, + ls_address TYPE bapiaddr3, + lt_smtp TYPE TABLE OF bapiadsmtp, + ls_smtp TYPE bapiadsmtp. + + CALL FUNCTION 'BAPI_USER_GET_DETAIL' + EXPORTING + username = iv_user + IMPORTING + address = ls_address + TABLES + return = lt_return + addsmtp = lt_smtp. + +* Choose the first email from SU01 + 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. + + ENDMETHOD. + + + METHOD get_email. + + rv_email = ms_user-email. + + ENDMETHOD. + + + METHOD get_instance. + + DATA: ls_user TYPE ty_user. + FIELD-SYMBOLS: TYPE ty_user. + + READ TABLE mt_user ASSIGNING + WITH KEY user = iv_user. + IF sy-subrc <> 0. + + ls_user-user = iv_user. + CREATE OBJECT ls_user-o_user + EXPORTING + iv_user = iv_user. + + INSERT ls_user + INTO TABLE mt_user + ASSIGNING . + + ENDIF. + + ro_user = -o_user. + + ENDMETHOD. + + + METHOD get_name. + + rv_name = ms_user-name. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/utils/zcl_abapgit_user_master_record.clas.xml b/src/utils/zcl_abapgit_user_master_record.clas.xml new file mode 100644 index 000000000..c9ffb44ef --- /dev/null +++ b/src/utils/zcl_abapgit_user_master_record.clas.xml @@ -0,0 +1,18 @@ + + + + + + ZCL_ABAPGIT_USER_MASTER_RECORD + 1 + E + ZCL_ABAPGIT_USER + 1 + X + X + X + X + + + + diff --git a/src/zcl_abapgit_background.clas.abap b/src/zcl_abapgit_background.clas.abap index 944cb91dd..4b567b59b 100644 --- a/src/zcl_abapgit_background.clas.abap +++ b/src/zcl_abapgit_background.clas.abap @@ -31,7 +31,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_BACKGROUND IMPLEMENTATION. +CLASS zcl_abapgit_background IMPLEMENTATION. METHOD build_comment. @@ -64,33 +64,20 @@ CLASS ZCL_ABAPGIT_BACKGROUND IMPLEMENTATION. METHOD determine_user_details. - DATA: lt_return TYPE TABLE OF bapiret2, - ls_address TYPE bapiaddr3, - lt_smtp TYPE TABLE OF bapiadsmtp, - ls_smtp TYPE bapiadsmtp. + DATA: lt_return TYPE TABLE OF bapiret2, + ls_address TYPE bapiaddr3, + lt_smtp TYPE TABLE OF bapiadsmtp, + ls_smtp TYPE bapiadsmtp, + lo_user_master_record TYPE REF TO zcl_abapgit_user_master_record. * IF the method is to use real user values, call the BAPI IF iv_method = zcl_abapgit_persist_background=>c_amethod-user. - CALL FUNCTION 'BAPI_USER_GET_DETAIL' - EXPORTING - username = iv_changed_by - IMPORTING - address = ls_address - TABLES - return = lt_return - addsmtp = lt_smtp. + lo_user_master_record = zcl_abapgit_user_master_record=>get_instance( iv_changed_by ). -* Choose the first email from SU01 - SORT lt_smtp BY consnumber ASCENDING. + rs_user-name = lo_user_master_record->get_name( ). + rs_user-email = lo_user_master_record->get_email( ). - LOOP AT lt_smtp INTO ls_smtp. - rs_user-email = ls_smtp-e_mail. - EXIT. - ENDLOOP. - -* Attempt to use the full name from SU01 - rs_user-name = ls_address-fullname. ENDIF. * If no email, fall back to localhost/default email