文章目录
1.Requirement
以下是这样的一个需求,密码在最后一次180天之前给锁定,然后180-170天,通知用户,然后小于170天,不用理会. 以下通过程序实现,通过策略配置后也可以实现.
2.Demo
REPORT zjgltest02.
DATA:lv_date TYPE sy-datum,
lv_date1 TYPE sy-datum,
lt_return TYPE STANDARD TABLE OF bapiret2,
lv_mes TYPE c LENGTH 220.
lv_date = sy-datum - 180.
lv_date1 = sy-datum - 170.
DATA: BEGIN OF lt_data OCCURS 0,
bname LIKE ush02-bname,
ustyp LIKE ush02-ustyp,
tcode LIKE ush02-tcode,
modda LIKE ush02-modda,
END OF lt_data.
SELECT a~bname a~ustyp a~tcode a~modda
INTO CORRESPONDING FIELDS OF TABLE lt_data
FROM ush02 AS a INNER JOIN usr21 AS b
ON a~bname = b~bname
WHERE
a~tcode = 'KRNL' " krnl 表示用户登录时修改密码
AND a~ustyp = 'A' . " A表示是会话用户
SORT lt_data BY bname modda DESCENDING.
DELETE ADJACENT DUPLICATES FROM lt_data COMPARING bname.
LOOP AT lt_data INTO DATA(ls_data).
IF ls_data-modda > lv_date1 and ls_data-modda <= sy-datum.
ELSEIF ls_data-modda < lv_date.
CALL FUNCTION 'BAPI_USER_LOCK'
EXPORTING
username = ls_data-bname
TABLES
return = lt_return.
ELSEIF ls_data-modda >= lv_date1 AND ls_data-modda <= lv_date.
PERFORM FRM_SEND_MAIL USING LS_DATA.
ENDIF.
CLEAR : lv_mes,
ls_data.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form FRM_SEND_MAIL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LS_DATA
*&---------------------------------------------------------------------*
FORM frm_send_mail USING is_data TYPE ush02.
ENDFORM.