REPORT ZINACTIV NO STANDARD PAGE HEADING.
************************************************************************
* This program displays, locks or deletes the users, whose last login
* date is older then N days or they have never logged in and they were
* created at least N days ago
************************************************************************
* Atcion input
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (20) COMMENT0.
SELECTION-SCREEN POSITION 56.
PARAMETERS: DISP RADIOBUTTON GROUP R1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (20) COMMENT1.
SELECTION-SCREEN POSITION 56.
PARAMETERS: LOCK RADIOBUTTON GROUP R1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (20) COMMENT2.
SELECTION-SCREEN POSITION 56.
PARAMETERS: DELETE RADIOBUTTON GROUP R1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B1.
* User type input
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (35) COMMENT3.
SELECTION-SCREEN POSITION 56.
PARAMETERS: INAC RADIOBUTTON GROUP R2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (35) COMMENT4.
SELECTION-SCREEN POSITION 56.
PARAMETERS: NOLOG RADIOBUTTON GROUP R2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B2.
* Period input
SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (12) COMMENT5.
SELECTION-SCREEN POSITION 16.
PARAMETERS: DAYS(3) TYPE N OBLIGATORY DEFAULT '60'.
SELECTION-SCREEN COMMENT 21(20) COMMENT6.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B3.
* Initialize the selection screen
INITIALIZATION.
COMMENT0 = 'DISPLAY USERS WHO'.
COMMENT1 = 'LOCK USERS WHO'.
COMMENT2 = 'DELETE USERS WHO'.
COMMENT3 = 'LAST LOGGED IN'.
COMMENT4 = 'NEVER LOGGED IN AND WERE CREATED'.
COMMENT5 = 'AT LEAST'.
COMMENT6 = 'DAYS AGO'.
START-OF-SELECTION.
* Data declaration
TABLES: USR02.
DATA: LAST_DATE TYPE D.
DATA: BEGIN OF USERS OCCURS 50,
BNAME LIKE USR02-BNAME,
TRDAT LIKE USR02-TRDAT,
ERDAT LIKE USR02-ERDAT,
END OF USERS.
data: begin of bdc_tab occurs 100.
include structure bdcdata.
data: end of bdc_tab.
* Calculate the date
LAST_DATE = SY-DATUM.
LAST_DATE = LAST_DATE - DAYS.
* Find the users that fulfill the criterias
SELECT * FROM USR02 WHERE USTYP = 'A'.
IF USR02-TRDAT <= LAST_DATE.
IF USR02-TRDAT = '00000000' AND NOLOG = 'X'.
IF USR02-ERDAT <= LAST_DATE.
MOVE-CORRESPONDING USR02 TO USERS.
APPEND USERS.
ENDIF.
ELSEIF USR02-TRDAT <> '00000000' AND INAC = 'X'.
MOVE-CORRESPONDING USR02 TO USERS.
APPEND USERS.
ENDIF.
ENDIF.
ENDSELECT.
* Depending on the action: display, lock or delete
IF DISP = 'X'.
WRITE: / ' USER LAST LOGIN CREATED'.
SKIP.
LOOP AT USERS.
WRITE: / USERS-BNAME, USERS-TRDAT, USERS-ERDAT.
ENDLOOP.
ELSEIF LOCK = 'X'.
WRITE: / 'LOCKED:'.
WRITE: / ' USER LAST LOGIN CREATED'.
SKIP.
LOOP AT USERS.
WRITE: / USERS-BNAME, USERS-TRDAT, USERS-ERDAT.
SELECT SINGLE * FROM USR02 WHERE BNAME = USERS-BNAME.
USR02-UFLAG = '128'.
MODIFY USR02.
ENDLOOP.
ELSE.
WRITE: / 'DELETED:'.
WRITE: / ' USER LAST LOGIN CREATED'.
SKIP.
LOOP AT USERS.
WRITE: / USERS-BNAME, USERS-TRDAT, USERS-ERDAT.
PERFORM USER_DELETE.
ENDLOOP.
ENDIF.
*---------------------------------------------------------------------*
* FORM USER_DELETE *
*---------------------------------------------------------------------*
FORM USER_DELETE.
PERFORM BDC_FILL USING 'X'
'SAPMS01J'
'0200'.
PERFORM BDC_FILL USING ' '
'BDC_OKCODE'
'DELU'.
PERFORM BDC_FILL USING ' '
'BDC_CURSOR'
'XU200-XUSER'.
PERFORM BDC_FILL USING ' '
'XU200-XUSER'
USERS-BNAME.
PERFORM BDC_FILL USING 'X'
'SAPLSPO1'
'0400'.
PERFORM BDC_FILL USING ' '
'BDC_OKCODE'
'YES'.
PERFORM BDC_FILL USING 'X'
'SAPLSPO1'
'0100'.
PERFORM BDC_FILL USING ' '
'BDC_OKCODE'
'YES'.
PERFORM BDC_FILL USING 'X'
'SAPMS01J'
'0200'.
PERFORM BDC_FILL USING ' '
'BDC_OKCODE'
'BACK'.
PERFORM BDC_FILL USING ' '
'BDC_CURSOR'
'XU200-XUSER'.
PERFORM BDC_FILL USING ' '
'XU200-XUSER'
USERS-BNAME.
call transaction 'SU01'
using bdc_tab mode 'N'.
ENDFORM.
*---------------------------------------------------------------------*
* FORM BDC_FILL *
*---------------------------------------------------------------------*
FORM BDC_FILL USING P1 P2 P3.
clear bdc_tab.
if p1 = 'X'.
bdc_tab-dynbegin = p1.
bdc_tab-program = p2.
bdc_tab-dynpro = p3.
else.
bdc_tab-dynbegin = p1.
bdc_tab-fnam = p2.
bdc_tab-fval = p3.
endif.
append bdc_tab.
ENDFORM.