技术开发 频道

ABAP实例:如何编程实现删除一个SAP的在线用户

【IT168 技术文章】    

REPORT ZKICK.

    
** Data ****************************************************************
    DATA: OPCODE TYPE X VALUE
2.
    DATA: BEGIN OF usr_tabl OCCURS
10.
            INCLUDE STRUCTURE uinfo.
    DATA: END OF usr_tabl.
    DATA TEMP_TEXT LIKE SM04DIC
-POPUPMSG.
    DATA: BEGIN OF fields OCCURS
10.
            INCLUDE STRUCTURE help_value.
    DATA: END OF fields.
    DATA: BEGIN OF valuetab OCCURS
10,
            line(
80),
          END OF valuetab.
    DATA: TMPUNAME LIKE SY
-UNAME.

    
** Selection Screen ****************************************************
    
* Kick Off User/s
    SELECTION
-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
    
* User Name
    SELECT
-OPTIONS: UNAME FOR SY-UNAME OBLIGATORY.
    
* Client
    PARAMETERS: CLIENT LIKE T000
-MANDT DEFAULT SY-MANDT OBLIGATORY.
    SELECTION
-SCREEN SKIP.
    
* Time To Kick User Off Until
    PARAMETERS: TIME LIKE SY
-UZEIT DEFAULT SY-UZEIT OBLIGATORY,
    
* Interval Between Logoffs
                INTERVAL(
2) TYPE N DEFAULT 1 OBLIGATORY,
    
* Warn User Before Kicking Off?
                WARN AS CHECKBOX.
    SELECTION
-SCREEN END OF BLOCK B1.

    
** At Selection Screen *************************************************
    AT SELECTION
-SCREEN ON VALUE-REQUEST FOR UNAME-LOW.
      PERFORM F4_HELP_CHECK_UNAME USING UNAME
-LOW.

    
** Start of Selection **************************************************
    START
-OF-SELECTION.

      DO.
        REFRESH USR_TABL.

    
* Get the list of logged on users
        CALL
'ThUsrInfo' ID 'OPCODE' FIELD opcode
            ID
'TAB' FIELD usr_tabl-*sys*.

        LOOP AT USR_TABL WHERE BNAME IN UNAME.
    
*     If user/s must be warned
          IF NOT WARN IS INITIAL.

            CONCATENATE
'You will be logged off from client'
                        CLIENT
                        
'in 10 seconds.' INTO TEMP_TEXT SEPARATED BY SPACE.
            CALL FUNCTION
'TH_POPUP'
                 EXPORTING
                      CLIENT        
= CLIENT
                      USER          
= USR_TABL-BNAME
                      MESSAGE        
= TEMP_TEXT
                 EXCEPTIONS
                      USER_NOT_FOUND
= 1
                      OTHERS        
= 2.

    
*       Wait 10 seconds after warning user/s
            WAIT UP TO
10 SECONDS.
          ENDIF.

    
* Kick off user/s
          CALL FUNCTION
'TH_DELETE_USER'
               EXPORTING
                    USER            
= USR_TABL-BNAME
                    CLIENT          
= CLIENT
               EXCEPTIONS
                    AUTHORITY_ERROR
= 1
                    OTHERS          
= 2.
        ENDLOOP.

    
* Once the specified time is reached, stop logging user/s off.
        IF SY
-UZEIT >= TIME.
          EXIT.
        ENDIF.

    
* Wait the specified time before logging off user/s again.
        WAIT UP TO INTERVAL SECONDS.
      ENDDO.

    
** Forms ***************************************************************
    
*&---------------------------------------------------------------------*
    
*&      Form  F4_HELP_CHECK_UNAME
    
*&---------------------------------------------------------------------*
    
*       This is to show only logged on users when F4 is pressed on
    
*       user name.
    
*----------------------------------------------------------------------*
    
*      -->P_UNAME_LOW  text
    
*----------------------------------------------------------------------*
    FORM F4_HELP_CHECK_UNAME USING P_UNAME.
      CLEAR fields.
      REFRESH fields.
      CLEAR valuetab.
      REFRESH valuetab.
      CLEAR usr_tabl.
      REFRESH usr_tabl.

    
* Fill the structure table
      fields
-tabname = 'ZTSTSTRC'.
      fields
-fieldname = 'NAME'.
      fields
-selectflag = 'X'.
      APPEND fields.
      CLEAR fields.

      fields
-tabname = 'ZTSTSTRC'.
      fields
-fieldname = 'CLIENT'.
      APPEND fields.
      CLEAR fields.

    
* Get the list of logged on users
      CALL
'ThUsrInfo' ID 'OPCODE' FIELD opcode
          ID
'TAB' FIELD usr_tabl-*sys*.

      DELETE USR_TABL WHERE BNAME
= SY-UNAME AND MANDT = SY-MANDT.
      DELETE USR_TABL WHERE BNAME IS INITIAL.
      SORT usr_tabl BY mandt bname.
      DELETE ADJACENT DUPLICATES FROM USR_TABL COMPARING BNAME MANDT.

    
* Fill the value table
      LOOP AT USR_TABL.
        valuetab
-line = usr_tabl-bname.
        APPEND valuetab.
        valuetab
-line = usr_tabl-mandt.
        APPEND valuetab.
      ENDLOOP.

    
* Call the help value screen
      CALL FUNCTION
'HELP_VALUES_GET_WITH_TABLE'
      EXPORTING
                   TITLE_IN_VALUES_LIST
= ''
                   titel
= 'Online Users'
      IMPORTING
                    SELECT_VALUE  
= TMPUNAME
      TABLES
                    fields  
= fields
                    valuetab
= valuetab.
      P_UNAME
= TMPUNAME.

    
* Change the client number to correspond with what user name the
    
* user selects.
      CLEAR CLIENT.
      READ TABLE USR_TABL WITH KEY BNAME
= TMPUNAME.
      CLIENT
= USR_TABL-MANDT.
    ENDFORM.                              
" f4_help_check_uname
0
相关文章