zoukankan      html  css  js  c++  java
  • 如何编程实现删除一个sap的在线用户

    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 

  • 相关阅读:
    java 或者 js 获取项目访问路径(域名)
    jquery validate 使用示例
    项目中调试SQLServer 方便的查看SQL语句的执行时间的方法
    Oracle Replace函数的简单使用
    LINE_NO in format of XXXX example -> Line 10 is 0010
    Oracle序列使用:建立、删除、使用
    Oracle 存储过程创建及调用
    char、varchar、varchar2区别
    missing equal sign
    [转]Windows中的句柄(handle)
  • 原文地址:https://www.cnblogs.com/xiaomaohai/p/6157447.html
Copyright © 2011-2022 走看看