在新增/刪除/修改資料時,常需要log使用者的基本資料,但使用者的IP Address、Windows帳號及電腦名稱在syst中又找不到。
FUNCTION zbc_get_user_info.
*"----------------------------------------------------------------------
*"*"區域介面:
*" EXPORTING
*" REFERENCE(R_IPADD) TYPE EWAWA_IPADDRESS User IP Address
*" REFERENCE(R_STAMP) TYPE ZTIMESTAMP Time Stamp Time Stamp
*" REFERENCE(R_OSUSER) TYPE /BEV2/ED_GEN_TABLEDATA OS User Name
*" REFERENCE(R_DOMAIN) TYPE /BEV2/ED_GEN_TABLEDATA Domain
*" REFERENCE(R_DNSDOMAIN) TYPE /BEV2/ED_GEN_TABLEDATA DNS Domain
*" REFERENCE(R_COMPUTERNAME) TYPE /BEV2/ED_GEN_TABLEDATA Computer Name
*"----------------------------------------------------------------------
DATA: l_hostaddr1 TYPE msxxlist-hostadr,
l_hostaddr2(8) TYPE c,
itimes TYPE i,
itimes1 TYPE i,
hx(2),
result TYPE i,
resulttxt(3),
iptxt(15),
l_time TYPE timestampl,
l_timestamp(9) TYPE c.
GET TIME STAMP FIELD l_time.
l_timestamp = FRAC( l_time )."l_time.
l_timestamp = l_timestamp+2(7).
REPLACE ALL OCCURRENCES OF '.' IN l_timestamp WITH ''.
r_stamp = l_timestamp. "時間戳記
*Get Computer name
CALL METHOD cl_gui_frontend_services=>get_computer_name
CHANGING
computer_name = r_computername
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* Get IP Address
CALL METHOD cl_gui_frontend_services=>get_ip_address
RECEIVING
ip_address = r_ipadd
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 99.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*Get OS User name
CALL METHOD cl_gui_frontend_services=>get_user_name
CHANGING
user_name = r_osuser
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*因為Get Domain及Get DNS Domain需要SAP GUI端另放行權限,
*若沒有需求,可以將該兩段Mark.
**Get Domain
* CALL METHOD cl_gui_frontend_services=>environment_get_variable
* EXPORTING
* variable = 'USERDOMAIN'
* CHANGING
* value = r_domain
* EXCEPTIONS
* cntl_error = 1
* error_no_gui = 2
* not_supported_by_gui = 3
* OTHERS = 4.
*
* IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* ENDIF.
*
**Get DNS Domain
* CALL METHOD cl_gui_frontend_services=>environment_get_variable
* EXPORTING
* variable = 'USERDNSDOMAIN'
* CHANGING
* value = r_dnsdomain
* EXCEPTIONS
* cntl_error = 1
* error_no_gui = 2
* not_supported_by_gui = 3
* OTHERS = 4.
*
* IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* ENDIF.
*Flush
CALL METHOD cl_gui_cfw=>flush
EXCEPTIONS
cntl_system_error = 1
cntl_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFUNCTION.