网上无意看到的代码,贴一下:
*-------------------------------------------------------------
* Author: zengwin
* Date : 20-11-2002
*
*-------------------------------------------------------------
REPORT ZUSERLOCK.
TABLES: USH02,USR02.
DATA: ATHOR_ID(1) TYPE C.
DATA: COUNTER TYPE I.
DATA: BEGIN OF BDCDATA OCCURS 0.
INCLUDE STRUCTURE BDCDATA.
DATA: END OF BDCDATA.
DATA: BEGIN OF MESSTAB OCCURS 10.
INCLUDE STRUCTURE BDCMSGCOLL.
DATA: END OF MESSTAB.
DATA: BEGIN OF LOCK_TAB OCCURS 0,
NAME LIKE USR02-BNAME,
END OF LOCK_TAB.
DATA: BEGIN OF UNLO_TAB OCCURS 0,
NAME LIKE USR02-BNAME,
END OF UNLO_TAB.
DATA: BEGIN OF NO_ATHOR OCCURS 0,
NAME LIKE USR02-BNAME,
END OF NO_ATHOR.
SELECTION-SCREEN: BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN SKIP 1.
PARAMETERS:
LOCK_FLG RADIOBUTTON GROUP RADI DEFAULT 'X',
UNLO_FLG RADIOBUTTON GROUP RADI.
SELECTION-SCREEN SKIP 1.
SELECT-OPTIONS:
S_BNAME FOR USR02-BNAME.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN: END OF BLOCK BLK1.
START-OF-SELECTION.
REFRESH: LOCK_TAB,UNLO_TAB,NO_ATHOR.
CLEAR: LOCK_TAB,UNLO_TAB,NO_ATHOR.
IF LOCK_FLG = 'X'.
SELECT * FROM USR02 WHERE BNAME IN S_BNAME.
CLEAR: ATHOR_ID.
IF USR02-CLASS = SPACE.
AUTHORITY-CHECK OBJECT 'S_USER_GRP'
ID 'CLASS' DUMMY
ID 'ACTVT' FIELD '05'.
IF SY-SUBRC NE 0.
ATHOR_ID = 'X'.
NO_ATHOR-NAME = USR02-BNAME.
APPEND NO_ATHOR.
CLEAR: NO_ATHOR.
ENDIF.
ELSE.
AUTHORITY-CHECK OBJECT 'S_USER_GRP'
ID 'CLASS' FIELD USR02-CLASS
ID 'ACTVT' FIELD '05'.
IF SY-SUBRC NE 0.
ATHOR_ID = 'X'.
NO_ATHOR-NAME = USR02-BNAME.
APPEND NO_ATHOR.
CLEAR: NO_ATHOR.
ENDIF.
ENDIF.
CHECK ATHOR_ID NE 'X'.
CHECK USR02-BNAME NE 'SAP*' AND USR02-BNAME NE 'DDIC'
AND USR02-BNAME NE 'SAPCPIC' AND USR02-BNAME NE 'TMSADM'.
IF USR02-UFLAG = 0.
SELECT * FROM USH02 WHERE BNAME = USR02-BNAME. ENDSELECT.
IF USH02-UFLAG = 0.
LOCK_TAB-NAME = USR02-BNAME.
APPEND LOCK_TAB.
CLEAR: LOCK_TAB,USH02.
ELSE.
UNLO_TAB-NAME = USR02-BNAME.
APPEND UNLO_TAB.
CLEAR: UNLO_TAB,USH02.
ENDIF.
ELSE.
UNLO_TAB-NAME = USR02-BNAME.
APPEND UNLO_TAB.
CLEAR: UNLO_TAB,USH02.
ENDIF.
ENDSELECT.
ELSEIF UNLO_FLG = 'X'.
SELECT * FROM USR02 WHERE BNAME IN S_BNAME.
CLEAR: ATHOR_ID.
IF USR02-CLASS = SPACE.
AUTHORITY-CHECK OBJECT 'S_USER_GRP'
ID 'CLASS' DUMMY
ID 'ACTVT' FIELD '05'.
IF SY-SUBRC NE 0.
ATHOR_ID = 'X'.
NO_ATHOR-NAME = USR02-BNAME.
APPEND NO_ATHOR.
CLEAR: NO_ATHOR.
ENDIF.
ELSE.
AUTHORITY-CHECK OBJECT 'S_USER_GRP'
ID 'CLASS' FIELD USR02-CLASS
ID 'ACTVT' FIELD '05'.
IF SY-SUBRC NE 0.
ATHOR_ID = 'X'.
NO_ATHOR-NAME = USR02-BNAME.
APPEND NO_ATHOR.
CLEAR: NO_ATHOR.
ENDIF.
ENDIF.
CHECK ATHOR_ID NE 'X'.
IF USR02-UFLAG NE 0.
UNLO_TAB-NAME = USR02-BNAME.
APPEND UNLO_TAB.
CLEAR: UNLO_TAB,USH02.
ELSE.
SELECT * FROM USH02 WHERE BNAME = USR02-BNAME. ENDSELECT.
IF USH02-UFLAG = 64 OR USH02-UFLAG = 128.
UNLO_TAB-NAME = USR02-BNAME.
APPEND UNLO_TAB.
CLEAR: UNLO_TAB,USH02.
ELSE.
LOCK_TAB-NAME = USR02-BNAME.
APPEND LOCK_TAB.
CLEAR: LOCK_TAB,USH02.
ENDIF.
ENDIF.
ENDSELECT.
ENDIF.
CLEAR: COUNTER.
PERFORM LOCK_UNLOCK_USERS.
PERFORM RESULT_OUTPUT.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form LOCK_UNLOCK_USERS
*&---------------------------------------------------------------------*
* text *
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM LOCK_UNLOCK_USERS.
IF LOCK_FLG = 'X'.
LOOP AT LOCK_TAB.
PERFORM BDC_DYNPRO USING 'SAPLSUU5' '0050'.
PERFORM BDC_FIELD USING 'USR02-BNAME' LOCK_TAB-NAME. "User Name
PERFORM BDC_FIELD USING 'BDC_OKCODE' 'LOCK'.
PERFORM BDC_DYNPRO USING 'SAPLSUU5' '0500'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '/6'.
PERFORM CALL_TRANSACTION USING 'SU01'.
REFRESH: BDCDATA,MESSTAB.
CLEAR: BDCDATA,MESSTAB.
ENDLOOP.
ELSEIF UNLO_FLG = 'X'.
LOOP AT UNLO_TAB.
PERFORM BDC_DYNPRO USING 'SAPLSUU5' '0050'.
PERFORM BDC_FIELD USING 'USR02-BNAME' UNLO_TAB-NAME. "User Name
PERFORM BDC_FIELD USING 'BDC_OKCODE' 'LOCK'.
PERFORM BDC_DYNPRO USING 'SAPLSUU5' '0500'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '/7'.
PERFORM CALL_TRANSACTION USING 'SU01'.
REFRESH: BDCDATA,MESSTAB.
CLEAR: BDCDATA,MESSTAB.
ENDLOOP.
ENDIF.
ENDFORM. " LOCK_UNLOCK_USERS
*&---------------------------------------------------------------------*
*& Form BDC_DYNPRO
*&---------------------------------------------------------------------*
* text *
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM. "End BDC_DYNPRO
*&---------------------------------------------------------------------*
*& Form BDC_FIELD
*&---------------------------------------------------------------------*
* text *
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDFORM. " BDC_FIELD
*&---------------------------------------------------------------------*
*& Form CALL_TRANSACTION
*&---------------------------------------------------------------------*
* text *
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CALL_TRANSACTION USING P_TCODE.
REFRESH MESSTAB.
CALL TRANSACTION P_TCODE USING BDCDATA MODE 'N' UPDATE 'S'
MESSAGES INTO MESSTAB.
IF SY-SUBRC NE 0.
IF LOCK_FLG = 'X'.
WRITE:/ LOCK_TAB-NAME,'Lock Error!'.
ENDIF.
IF UNLO_FLG = 'X'.
WRITE:/ UNLO_TAB-NAME,'Unlock Error!'.
ENDIF.
ELSE.
ADD 1 TO COUNTER.
ENDIF.
ENDFORM. " CALL_TRANSACTION
*&---------------------------------------------------------------------*
*& Form RESULT_OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM RESULT_OUTPUT.
LOOP AT NO_ATHOR. ENDLOOP.
IF SY-SUBRC = 0.
WRITE:/ 'No authorization to Lock/Ulock following users:' COLOR 6.
LOOP AT NO_ATHOR.
WRITE:/ NO_ATHOR-NAME.
ENDLOOP.
WRITE:/.
ENDIF.
IF LOCK_FLG = 'X'.
LOOP AT UNLO_TAB. ENDLOOP.
IF SY-SUBRC = 0.
WRITE:/ 'Following users are already Locked status:' COLOR 7.
LOOP AT UNLO_TAB.
WRITE:/ UNLO_TAB-NAME.
ENDLOOP.
ENDIF.
WRITE:/.
ENDIF.
IF UNLO_FLG = 'X'.
LOOP AT LOCK_TAB. ENDLOOP.
IF SY-SUBRC = 0.
WRITE:/ 'Following users are already Unlocked status:'.
LOOP AT LOCK_TAB.
WRITE:/ LOCK_TAB-NAME.
ENDLOOP.
ENDIF.
WRITE:/.
ENDIF.
IF COUNTER > 0.
IF LOCK_FLG = 'X'.
WRITE:/(3) COUNTER, 'Users have been locked!' COLOR 5.
ENDIF.
IF UNLO_FLG = 'X'.
WRITE:/(3) COUNTER, 'Users have been unlocked!' COLOR 5.
ENDIF.
ELSE.
IF LOCK_FLG = 'X'.
WRITE:/ 'No user have been locked!' COLOR 5.
ENDIF.
IF UNLO_FLG = 'X'.
WRITE:/ 'No user have been unlocked!' COLOR 5.
ENDIF.
ENDIF.
ENDFORM. " RESULT_OUTPUT