*&---------------------------------------------------------------------*
*& Include ZRFC_CNT
*& RFC 调用次数统计
*& 使用时第一行直接INCLUDE ZRFC_CNT
*&---------------------------------------------------------------------*
DATA: LS_TAB_201803081656 LIKE ZRFC_CNT.
DATA:
CALLER_DESTINATION LIKE RFCDISPLAY-RFCDEST,
CALLER_IP LIKE RFCDISPLAY-RFCDEST,
CALLER_TRUSTED LIKE RFCDISPLAY-RFCSLOGIN,
CALLER_RFC_TYPE LIKE RFCDES-RFCTYPE,
CALLER_CLIENT LIKE RFCDISPLAY-RFCCLIENT,
CALLER_WHOAMI LIKE RFCDISPLAY-RFCUSER,
CALLER_START_INFO LIKE RFCDISPLAY-RFCDEST,
CALLER_TCODE LIKE SY-TCODE,
CALLER_PROGRAM LIKE SY-CPROG,
CALLER_SYSTEM_ID LIKE SY-SYSID,
CALLER_SYSTEM_RELEASE LIKE SY-SAPRL,
CALLER_KERNEL_RELEASE LIKE SY-SAPRL,
CALLER_ASYNC_TYPE LIKE SY-BATCH,
CALLER_TRANS_TYPE LIKE SY-BATCH,
CALLER_PCS LIKE SY-BATCH,
CALLER_CODEPAGE LIKE TCP00-CPCODEPAGE,
CALLER_MDMP TYPE CHAR1,
CALLER_INSTALLATION_NUMBER TYPE SLIC_INST.
CALL FUNCTION 'RFC_GET_ATTRIBUTES'
IMPORTING
CALLER_DESTINATION = CALLER_DESTINATION
CALLER_IP = CALLER_IP
CALLER_TRUSTED = CALLER_TRUSTED
CALLER_RFC_TYPE = CALLER_RFC_TYPE
CALLER_CLIENT = CALLER_CLIENT
CALLER_WHOAMI = CALLER_WHOAMI
CALLER_START_INFO = CALLER_START_INFO
CALLER_TCODE = CALLER_TCODE
CALLER_PROGRAM = CALLER_PROGRAM
CALLER_SYSTEM_ID = CALLER_SYSTEM_ID
CALLER_SYSTEM_RELEASE = CALLER_SYSTEM_RELEASE
CALLER_KERNEL_RELEASE = CALLER_KERNEL_RELEASE
CALLER_ASYNC_TYPE = CALLER_ASYNC_TYPE
CALLER_TRANS_TYPE = CALLER_TRANS_TYPE
CALLER_PCS = CALLER_PCS
CALLER_CODEPAGE = CALLER_CODEPAGE
CALLER_MDMP = CALLER_MDMP
CALLER_INSTALLATION_NUMBER = CALLER_INSTALLATION_NUMBER
EXCEPTIONS
SYSTEM_CALL_NOT_SUPPORTED = 1
NO_RFC_COMMUNICATION = 2
INTERNAL_ERROR = 3
OTHERS = 4.
IF SY-SUBRC > 0.
DATA:
L_LONG_LINE TYPE C LENGTH 2048,
L_TERMINAL TYPE STRING,
L_IP_ADDRESS TYPE NI_NODEADDR,
TERMINAL_ID TYPE SYINDEX,
LI_USR_TABL TYPE STANDARD TABLE OF UINFO,
NODEADDR TYPE NI_NODEADDR.
" Get user's terminal information
CALL FUNCTION 'TH_USER_INFO'
IMPORTING
TID = TERMINAL_ID
ADDRSTR = L_IP_ADDRESS.
CALL FUNCTION 'THUSRINFO'
TABLES
USR_TABL = LI_USR_TABL.
DATA(LONGNAME) = LI_USR_TABL[ TID = TERMINAL_ID ]-TERM.
CALL FUNCTION 'NI_NAME_TO_ADDR'
EXPORTING
HOSTNAME = CONV NI_HOSTNAME( LONGNAME )
IMPORTING
NODEADDR = NODEADDR
EXCEPTIONS
EHOST_UNKNOWN = 1
EINVAL = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
IF L_IP_ADDRESS IS NOT INITIAL.
* OUT = L_IP_ADDRESS && |-| && LONGNAME.
MOVE L_IP_ADDRESS TO CALLER_IP.
MOVE LONGNAME TO CALLER_DESTINATION.
ELSE.
* OUT = 'Not available' ##NO_TEXT.
ENDIF.
ELSE.
* OUT = NODEADDR && |-| && LONGNAME && |-| && SY-XFORM ..
MOVE NODEADDR TO CALLER_IP.
MOVE LONGNAME TO CALLER_DESTINATION.
ENDIF.
ENDIF.
DATA: V_RPT TYPE STRING.
SELECT SINGLE RPTNAME INTO V_RPT FROM ZRPT_STOP WHERE RPTNAME = SY-XFORM.
IF SY-SUBRC = 0.
RAISE EXCEPTION type CX_SY_FILE_AUTHORITY .
ENDIF.
SELECT SINGLE * INTO LS_TAB_201803081656
FROM ZRFC_CNT
WHERE RPTNAME = SY-XFORM
AND SPMON = SY-DATUM+0(6)
AND CALLER_IP = CALLER_IP
.
IF SY-SUBRC = 0.
LS_TAB_201803081656-RPTCNT = LS_TAB_201803081656-RPTCNT + 1.
ELSE.
LS_TAB_201803081656-RPTCNT = 1.
ENDIF