*&---------------------------------------------------------------------*
*& Report ZPMRP032
*&---------------------------------------------------------------------*
*&用户锁定及有效期设置程序--Creat by Bruce King220200527
*&将ZPMRP029及ZPMRP030结合起来,并使用BDC录屏形式控制程序*
*&增加了新建后不立即登录的排除*
*&---------------------------------------------------------------------*
REPORT ZPMRP032.
TABLES:USR02.
TYPES:BEGIN OF TY_DATA,
BNAME TYPE USR02-BNAME,
TRDAT TYPE USR02-TRDAT,
END OF TY_DATA.
DATA:LT_BNAME TYPE STANDARD TABLE OF TY_DATA.
DATA:ITAB_BDCTAB TYPE TABLE OF BDCDATA WITH HEADER LINE.
DATA:P_MODE TYPE CHAR1 VALUE 'N',
P_UPDA TYPE CHAR1 VALUE 'L'.
DATA LV_MESS TYPE STRING.
DATA BEGIN OF MESSTAB OCCURS 10.
INCLUDE STRUCTURE BDCMSGCOLL.
DATA END OF MESSTAB.
DATA:ZTIME TYPE USR02-GLTGB.
ZTIME = SY-DATUM.
PARAMETERS:P_BACK AS CHECKBOX."后台
SELECT-OPTIONS:S_BNAME FOR USR02-BNAME."前台用户名
START-OF-SELECTION.
IF P_BACK NE 'X'.
LOOP AT S_BNAME.
PERFORM USER_LOCK USING S_BNAME-LOW."用户锁定
PERFORM MODIFY_DATE USING S_BNAME-LOW SY-DATUM."用户有效期设置
CLEAR:S_BNAME.
ENDLOOP.
ELSE.
PERFORM GET_NAME."取得三个月前到现在当前时间没有登录的用户名
LOOP AT LT_BNAME ASSIGNING FIELD-SYMBOL(<FS_BNAME>).
PERFORM USER_LOCK USING <FS_BNAME>-BNAME.
PERFORM MODIFY_DATE USING <FS_BNAME>-BNAME SY-DATUM.
ENDLOOP.
ENDIF.
FORM USER_LOCK USING P_S_BNAME TYPE USR02-BNAME.
DATA:MSG1 TYPE STRING.
DATA:MSG2 TYPE STRING.
REFRESH ITAB_BDCTAB[].
REFRESH MESSTAB[].
PERFORM BDC_DYNPRO USING 'SAPLSUID_MAINTENANCE' '1050'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'SUID_ST_BNAME-BNAME'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=LOCK'.
PERFORM BDC_FIELD USING 'SUID_ST_BNAME-BNAME'
P_S_BNAME.
PERFORM BDC_DYNPRO USING 'SAPLSUID_MAINTENANCE' '1500'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'G_STATTEXT'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=LOCK'.
*PERFORM bdc_transaction USING 'SU01'.
CALL TRANSACTION 'SU01' USING ITAB_BDCTAB
MODE P_MODE
UPDATE P_UPDA
MESSAGES INTO MESSTAB.
READ TABLE MESSTAB WITH KEY MSGTYP = 'E'.
IF P_BACK NE 'X'.
IF SY-SUBRC EQ 0.
MSG1 = |用户{ S_BNAME-LOW }锁定失败|.
MESSAGE MSG1 TYPE 'I'.
ELSE.
MSG2 = |用户{ S_BNAME-LOW }锁定成功|.
MESSAGE MSG2 TYPE 'I'.
ENDIF.
CLEAR:MSG1,MSG2.
ENDIF.
ENDFORM.
FORM MODIFY_DATE USING P_S_BNAME TYPE USR02-BNAME P_DATE TYPE SY-DATUM.
DATA:MSG3 TYPE STRING.
DATA:MSG4 TYPE STRING.
REFRESH ITAB_BDCTAB[].
REFRESH MESSTAB[].
PERFORM BDC_DYNPRO USING 'SAPLSUID_MAINTENANCE' '1050'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'SUID_ST_BNAME-BNAME'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=CHAN'.
PERFORM BDC_FIELD USING 'SUID_ST_BNAME-BNAME'
P_S_BNAME.
PERFORM BDC_DYNPRO USING 'SAPLSUID_MAINTENANCE' '1100'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=LOGO'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'SUID_ST_NODE_PERSON_NAME_EXT-TITLE_MEDI'.
* PERFORM bdc_field USING 'SUID_ST_NODE_PERSON_NAME-NAME_LAST'
* record-NAME_LAST_002.
PERFORM BDC_DYNPRO USING 'SAPLSUID_MAINTENANCE' '1100'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=UPD'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'SUID_ST_NODE_LOGONDATA-GLTGB'.
* PERFORM bdc_field USING 'SUID_ST_NODE_LOGONDATA-USTYP'
* record-USTYP_003.
PERFORM BDC_FIELD USING 'SUID_ST_NODE_LOGONDATA-GLTGB'
P_DATE.
CALL TRANSACTION 'SU01' USING ITAB_BDCTAB
MODE P_MODE
UPDATE P_UPDA
MESSAGES INTO MESSTAB.
IF P_BACK NE 'X'.
READ TABLE MESSTAB WITH KEY MSGTYP = 'E'.
IF SY-SUBRC EQ 0.
MSG3 = |用户{ S_BNAME-LOW }有效期修改失败|.
MESSAGE MSG3 TYPE 'I'.
ELSE.
MSG4 = |用户{ S_BNAME-LOW }有效期修改成功|.
MESSAGE MSG4 TYPE 'I'.
ENDIF.
CLEAR:MSG3,MSG4.
ENDIF.
ENDFORM.
FORM BDC_DYNPRO USING NAME VALUE.
CLEAR ITAB_BDCTAB.
ITAB_BDCTAB-PROGRAM = NAME.
ITAB_BDCTAB-DYNPRO = VALUE.
ITAB_BDCTAB-DYNBEGIN = 'X'.
APPEND ITAB_BDCTAB.
ENDFORM. "BDC_DYNPRO
*&---------------------------------------------------------------------*
*& FORM BDC_FIELD
*&---------------------------------------------------------------------*
FORM BDC_FIELD USING NAME VALUE.
CLEAR ITAB_BDCTAB.
ITAB_BDCTAB-FNAM = NAME.
ITAB_BDCTAB-FVAL = VALUE.
APPEND ITAB_BDCTAB.
ENDFORM. "BDC_FIELD
FORM GET_NAME .
DATA:ZDATE TYPE SY-DATUM.
CALL FUNCTION 'CCM_GO_BACK_MONTHS'
EXPORTING
CURRDATE = SY-DATUM
BACKMONTHS = 3
IMPORTING
NEWDATE = ZDATE.
SELECT BNAME TRDAT FROM USR02 INTO CORRESPONDING FIELDS OF TABLE LT_BNAME
WHERE TRDAT < ZDATE AND GLTGB = '00000000' AND UFLAG <> '64' AND ERDAT < ZDATE."增加被锁定的不取出来,继续增加建立后不立即登录的排除
ENDFORM.