*&---------------------------------------------------------------------*
*& 使用场景,系统自动清理一段时期内未登录过的用户,节省用户资源
*&
*&---------------------------------------------------------------------*
*&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 0 WITH HEADER LINE.
TYPES: BEGIN 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