Default committer name and e-mail from SU01 (#1310)

* Default committer name and e-mail from SU01

* Refactoring: introduce get_name and get_email meth
This commit is contained in:
Christian Günter 2018-04-18 19:57:24 +02:00 committed by Lars Hvam
parent 4125b7d119
commit e4c1de4732
4 changed files with 153 additions and 23 deletions

View File

@ -44,7 +44,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_GUI_PAGE_COMMIT IMPLEMENTATION. CLASS zcl_abapgit_gui_page_commit IMPLEMENTATION.
METHOD constructor. METHOD constructor.
@ -96,11 +96,19 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_COMMIT IMPLEMENTATION.
IF lv_user IS INITIAL. IF lv_user IS INITIAL.
lv_user = lo_user->get_default_git_user_name( ). lv_user = lo_user->get_default_git_user_name( ).
ENDIF. 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( ) ). lv_email = lo_user->get_repo_git_user_email( mo_repo->get_url( ) ).
IF lv_email IS INITIAL. IF lv_email IS INITIAL.
lv_email = lo_user->get_default_git_user_email( ). lv_email = lo_user->get_default_git_user_email( ).
ENDIF. 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. CREATE OBJECT ro_html.

View File

@ -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: <ls_user> TYPE ty_user.
READ TABLE mt_user ASSIGNING <ls_user>
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 <ls_user>.
ENDIF.
ro_user = <ls_user>-o_user.
ENDMETHOD.
METHOD get_name.
rv_name = ms_user-name.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_USER_MASTER_RECORD</CLSNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>ZCL_ABAPGIT_USER</DESCRIPT>
<STATE>1</STATE>
<CLSFINAL>X</CLSFINAL>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -31,7 +31,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_BACKGROUND IMPLEMENTATION. CLASS zcl_abapgit_background IMPLEMENTATION.
METHOD build_comment. METHOD build_comment.
@ -64,33 +64,20 @@ CLASS ZCL_ABAPGIT_BACKGROUND IMPLEMENTATION.
METHOD determine_user_details. METHOD determine_user_details.
DATA: lt_return TYPE TABLE OF bapiret2, DATA: lt_return TYPE TABLE OF bapiret2,
ls_address TYPE bapiaddr3, ls_address TYPE bapiaddr3,
lt_smtp TYPE TABLE OF bapiadsmtp, lt_smtp TYPE TABLE OF bapiadsmtp,
ls_smtp TYPE 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 the method is to use real user values, call the BAPI
IF iv_method = zcl_abapgit_persist_background=>c_amethod-user. IF iv_method = zcl_abapgit_persist_background=>c_amethod-user.
CALL FUNCTION 'BAPI_USER_GET_DETAIL' lo_user_master_record = zcl_abapgit_user_master_record=>get_instance( iv_changed_by ).
EXPORTING
username = iv_changed_by
IMPORTING
address = ls_address
TABLES
return = lt_return
addsmtp = lt_smtp.
* Choose the first email from SU01 rs_user-name = lo_user_master_record->get_name( ).
SORT lt_smtp BY consnumber ASCENDING. 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. ENDIF.
* If no email, fall back to localhost/default email * If no email, fall back to localhost/default email