功能: 用户长期未登录,程序设置自动过期

*&---------------------------------------------------------------------*
*& 使用场景,系统自动清理一段时期内未登录过的用户,节省用户资源
*&
*&---------------------------------------------------------------------*
*&1、RSUSR200   拉出所有用户,  里面有一个字段 (Date of Last Logon);
*&2、用户设置过期  使用su01  在"Logon data" 里面 有 validity Period;
*&---------------------------------------------------------------------*
REPORT ZDLUSER.
DATA:ZRETURN TYPE TABLE OF  BAPIRET2 .

FIELD-SYMBOLS:<LT_DATA>      TYPE ANY TABLE,
              <LT_DATA_LINE> TYPE ANY TABLE.
DATA:         LR_DATA      TYPE REF TO DATA,
              LR_DATA_LINE TYPE REF TO DATA.
DATA:         LR_DATA_DESCR      TYPE REF TO CL_ABAP_DATADESCR,
              LR_DATA_DESCR_LINE TYPE REF TO CL_ABAP_DATADESCR.
DATA:          USERNAME   TYPE BAPIBNAME-BAPIBNAME,
               LOGONDATA  LIKE BAPILOGOND,
               LOGONDATAX LIKE BAPILOGONX,
               RETURN     LIKE  BAPIRET2 OCCURS WITH HEADER LINE.

TYPESBEGIN OF TYP_ITAB,
         BNAME  TYPE XUBNAME,          "用户名
         TRDAT1 TYPE XULDATE_ALV,     "最后一次登录日期
       END OF TYP_ITAB.

DATA:GT_ITAB TYPE STANDARD TABLE OF TYP_ITAB,
     GS_ITAB TYPE TYP_ITAB.

DATA:LV_FLAG TYPE CHAR1.
*  Important to set display = abap_false so the standard program won’t display the ALV
CL_SALV_BS_RUNTIME_INFO=>SET(
  EXPORTING DISPLAY  = ABAP_FALSE
            METADATA = ABAP_FALSE
            DATA     = ABAP_TRUE ).

* Submit standard program with selection table
SUBMIT RSUSR200
  USING SELECTION-SET 'UEXPIRE90'
        EXPORTING LIST TO MEMORY
       AND RETURN.

CLEAR:LV_FLAG.
TRY."因MB51中ALV输出有header,list 所以要有2个参数
    CL_SALV_BS_RUNTIME_INFO=>GET_DATA_REF(
         IMPORTING R_DATA_DESCR      = LR_DATA_DESCR
                   R_DATA_LINE_DESCR = LR_DATA_DESCR_LINE ).

    CREATE DATA LR_DATA TYPE HANDLE LR_DATA_DESCR.
    CREATE DATA LR_DATA_LINE TYPE HANDLE LR_DATA_DESCR_LINE.

    ASSIGN LR_DATA->* TO <LT_DATA>.
    ASSIGN LR_DATA_LINE->* TO <LT_DATA_LINE>.

    CL_SALV_BS_RUNTIME_INFO=>GET_DATA(
      IMPORTING
        T_DATA      =      <LT_DATA>
*        T_DATA_LINE      =      <LT_DATA_LINE>
           ).

  CATCH CX_SALV_BS_SC_RUNTIME_INFO.
    WRITE `Unable to retrieve ALV data` .
    LV_FLAG 'X'.
  CATCH CX_SY_REF_IS_INITIAL.
    WRITE 'NO DATA'.
    LV_FLAG 'X'.
ENDTRY.

CL_SALV_BS_RUNTIME_INFO=>CLEAR_ALL).
CHECK LV_FLAG IS INITIAL .
IF <LT_DATA>  IS NOT ASSIGNED.
  RETURN.
ENDIF.
MOVE-CORRESPONDING <LT_DATA> TO GT_ITAB.

"用户设置过期
CLEAR:GS_ITAB.
LOOP AT GT_ITAB INTO GS_ITAB.

  USERNAME = GS_ITAB-BNAME.

  LOGONDATA-GLTGV = SY-DATUM 1.

  LOGONDATAX-GLTGV 'X'.

  LOGONDATA-GLTGB = SY-DATUM 1.

  LOGONDATAX-GLTGB 'X'.

  CALL FUNCTION 'BAPI_USER_CHANGE'
    EXPORTING
      USERNAME   = USERNAME
      LOGONDATA  = LOGONDATA
      LOGONDATAX = LOGONDATAX
    TABLES
      RETURN     RETURN.

  IF  SY-SUBRC .
    LOOP AT RETURN.
      WRITERETURN-MESSAGE .
    ENDLOOP.
  ENDIF.
ENDLOOP.

原文地址:https://www.cnblogs.com/twttafku/p/ZDLUSER.html