用户锁定程序(BDC方式)

本文展示了一段ABAP代码,用于批量锁定或解锁选定的系统用户。通过选择屏幕接收用户输入来确定要操作的用户名,并检查权限。该程序利用BDC技术执行锁定或解锁操作并显示结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上无意看到的代码,贴一下:

 

*-------------------------------------------------------------

*    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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值