一.登陆时候记录用户的IP地址等信息首先在系统建立数据库表ZLOGONINFO记录用户登陆信息,包括信息(R/3用户名/终端名/IP地址/登陆日期/登陆时间). 其次在R/3用户登陆增强(SUSR0001)写代码记录用户相关的信息到数据库表ZLOGONINFO,完成用户登陆信息的记录增强代码如下: *---------------------------------------------------------------------- * INCLUDE ZXUSRU01 *---------------------------------------------------------------------- ************************************************ * PROGRAM SAPMTZST * * CREATED BY TXB, 10/18/2000 * * LAST CHANGE BY TXB, 10/19/2000 * * PURPOSE: DEMONSTRATION * ************************************************ DATA HOSTADR LIKE UINFO-HOSTADR. DATA HOSTADDR(8). DATA TERM LIKE UINFO-TERM. DATA XHCOUNT TYPE I. DATA: IPTXT(15),ITIMES TYPE I,ITIMES1 TYPE I,HX(2). DATA: RESULT TYPE I,RESULTTXT(3). TABLES ZLOGONINFO. CALL FUNCTION 'TH_USER_INFO' IMPORTING HOSTADDR = HOSTADR "like UINFO-HOSTADR (hex)
TERMINAL = TERM. "like UINFO-TERM SELECT MAX( XH ) INTO XHCOUNT FROM ZLOGONINFO. XHCOUNT = XHCOUNT + 1. ZLOGONINFO-XH = XHCOUNT. ZLOGONINFO-MANDT = SY-MANDT. ZLOGONINFO-BNAME = SY-UNAME. HOSTADDR = HOSTADR. DO 4 TIMES. HX = HOSTADDR+ITIMES1(2). ITIMES = 0. RESULT = 0. DO 2 TIMES. CASE HX+ITIMES(1). WHEN 'A'. IF ITIMES = 0. RESULT = RESULT + 10 * 16. ELSE. RESULT = RESULT + 10. ENDIF. WHEN 'B'. IF ITIMES = 0. RESULT = RESULT + 11 * 16. ELSE. RESULT = RESULT + 11. ENDIF. WHEN 'C'. IF ITIMES = 0. RESULT = RESULT + 12 * 16. ELSE. RESULT = RESULT + 12. ENDIF. WHEN 'D'. IF ITIMES = 0. RESULT = RESULT + 13 * 16. ELSE. RESULT = RESULT + 13. ENDIF. WHEN 'E'. IF ITIMES = 0. RESULT = RESULT + 14 * 16. ELSE. RESULT = RESULT + 14. ENDIF. WHEN 'F'. IF ITIMES = 0. RESULT = RESULT + 15 * 16. ELSE. RESULT = RESULT + 15. ENDIF. WHEN OTHERS. IF ITIMES = 0. RESULT = RESULT + HX+ITIMES(1) * 16. ELSE. RESULT = RESULT + HX+ITIMES(1). ENDIF. ENDCASE. ITIMES = ITIMES + 1. ENDDO. RESULTTXT = RESULT. IF IPTXT <> ''. CONCATENATE IPTXT '.' RESULTTXT INTO IPTXT. ELSE. IPTXT = RESULTTXT. ENDIF. ITIMES1 = ITIMES1 + 2. ENDDO. ZLOGONINFO-IP = IPTXT. ZLOGONINFO-TERMINAL = TERM. ZLOGONINFO-LOGON_DATE = SY-DATUM. ZLOGONINFO-LOGON_TIME = SY-UZEIT. INSERT INTO ZLOGONINFO CLIENT SPECIFIED VALUES ZLOGONINFO. 二.登陆时候与用户IP地址绑定登陆首先在系统里建立R/3用户和IP地址的对应的关系表USERLOGON,包括信息(R/3用户名/IP地址),然后通过批导入的方式将对应关系数据导入系统表里. 其次在R/3用户登陆增强(SUSR0001)写代码验证用户登陆时候的R/3用户名和IP地址在系统对应关系表里是否有,通过则允许登陆,未通过则不允许登陆. 增强代码如下: CALL FUNCTION 'TH_USER_INFO' IMPORTING HOSTADDR = HOSTADR "like UINFO-HOSTADR (hex) HOSTADDR = HOSTADR. DO 4 TIMES. HX = HOSTADDR+ITIMES1(2). ITIMES = 0. RESULT = 0. DO 2 TIMES. CASE HX+ITIMES(1). WHEN 'A'. IF ITIMES = 0. RESULT = RESULT + 10 * 16. ELSE. RESULT = RESULT + 10. ENDIF. WHEN 'B'. IF ITIMES = 0. RESULT = RESULT + 11 * 16. ELSE. RESULT = RESULT + 11. ENDIF. WHEN 'C'. IF ITIMES = 0. RESULT = RESULT + 12 * 16. ELSE. RESULT = RESULT + 12. ENDIF. WHEN 'D'. IF ITIMES = 0. RESULT = RESULT + 13 * 16. ELSE. RESULT = RESULT + 13. ENDIF. WHEN 'E'. IF ITIMES = 0. RESULT = RESULT + 14 * 16. ELSE. RESULT = RESULT + 14. ENDIF. WHEN 'F'. IF ITIMES = 0. RESULT = RESULT + 15 * 16. ELSE. RESULT = RESULT + 15. ENDIF. WHEN OTHERS. IF ITIMES = 0. RESULT = RESULT + HX+ITIMES(1) * 16. ELSE. RESULT = RESULT + HX+ITIMES(1). ENDIF. ENDCASE. ITIMES = ITIMES + 1. ENDDO. RESULTTXT = RESULT. IF IPTXT <> ''. CONCATENATE IPTXT '.' RESULTTXT INTO IPTXT. ELSE. IPTXT = RESULTTXT. ENDIF. ITIMES1 = ITIMES1 + 2. ENDDO. SELECT COUNT(*) INTO XHCOUNT FROM USERLOGON WHERE BNAME = SY-UNAME AND IP = IPTXT. IF XHCOUNT < 0. MESSAGE I003(ZTXBHB). CALL 'SYST_LOGOFF'."退出SAP系统 ELSE. MESSAGE I002(ZTXBHB).”登陆 ENDIF.