Make your own free website on Tripod.com
SAP ABAP Programming, Functional and Basis Components Books


Easy Mass Maintain of display, locking and deleting users
REPORT ZSU01 NO STANDARD PAGE HEADING.

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.

* Choose SAP Version
SELECTION-SCREEN BEGIN OF BLOCK B2A WITH FRAME.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (35) COMMENT7.
SELECTION-SCREEN POSITION 56.

PARAMETERS: IVER1 RADIOBUTTON GROUP R2A.

SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (35) COMMENT8.
SELECTION-SCREEN POSITION 56.

PARAMETERS: IVER2 RADIOBUTTON GROUP R2A.

SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B2A.

*--- 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'.
  COMMENT7 = '4.6x (Tested)'.
  COMMENT8 = '3.x (not tested)'.

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,
          UFLAG LIKE USR02-UFLAG,
  END OF USERS.

  data: begin of bdc_tab occurs 100.
          include structure bdcdata.
  data: end of bdc_tab.

*--- Add Selection Option for User Name!
SELECT-OPTIONS USERNAME FOR USR02-BNAME OBLIGATORY DEFAULT 'xxName?xx'.

*--- 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' AND BNAME IN USERNAME.

    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   UFLAG (128=LOCKED)'.
    SKIP.
    LOOP AT USERS.
       WRITE: / USERS-BNAME, USERS-TRDAT, USERS-ERDAT, USERS-UFLAG.
    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.

IF IVER1 = 'X'.
   call transaction 'OPF0' using bdc_tab mode 'N'.   "4.6x
ELSE.
   call transaction 'SU01' using bdc_tab mode 'N'.   "3.x
ENDIF.

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.

*--- End of ABAP Program

Return to :-
SAP Hints and Tips on Configuration and ABAP/4 Programming