Unlock SAP User

SAP kullanıcıları devamlı şifre unutur ve sizden blokaj kaldırılması ister. İşte size hazır program güle güle kullanın. İçeriğine bakarsanız kodun fonksiyonları RFC içine veya bir sap web uygulamasına koyarak kullanıcıların kendisinin yapmasını sağlayabilirsiniz. Tabi bu işlemleri bir tabloya da loglamanız ilersi için lazım olabilir :)




  *&---------------------------------------------------------------------*
*& Report  ZBC_UNLOCK_USER
*&
*&---------------------------------------------------------------------*
*& Arif Arifoğlu
*& SAP Developer
*&---------------------------------------------------------------------*

REPORT  zbc_unlock_user.


DATA : c_tabname_lock      LIKE dfies-tabname VALUE 'USZBV_LOCK',
       c_maint    VALUE 'Y'.

DATA : lv_flag  TYPE xuuflag VALUE 128 ."Yanlış girme sonucu lock
DATA : lv_flag2 TYPE xuuflag VALUE 64  ."Yönetici lock

DATA : user_name_        LIKE bapibname-bapibname  .
DATA : ok_lock           TYPE sy-ucomm VALUE 'UNLO'.
DATA : zbv_clientsystem  TYPE char1                .
DATA : zbv_centralsystem TYPE char1 VALUE 'X'      .


DATA  BEGIN OF field_maintenance_flags OCCURS 50.
        INCLUDE STRUCTURE usrfield              .
DATA  END   OF field_maintenance_flags          .

DATA: lock_global LIKE bapiflag,
      lock_local  LIKE bapiflag,
lock_wrong_logon  LIKE bapiflag.

 DATA p_rc LIKE sy-subrc.

PARAMETERS : bname LIKE usr02-bname OBLIGATORY .

START-OF-SELECTION .

  user_name_ =  bname .

  DATA : ls_usr02 TYPE usr02 .
  CLEAR ls_usr02.
  SELECT SINGLE FROM usr02 INTO ls_usr02
                  WHERE bname EQ bname .
  IF sy-subrc = AND
    "  ( ls_usr02-uflag = lv_flag2 or
    ls_usr02-uflag = lv_flag.
    "  ).
    "Eğer yönetici blokajı da olsa kaldırmak istiyorsanız
    "commentli yeri kaldırınız..


    CALL FUNCTION 'SUSR_ZBV_FILTERS_GET'
      EXPORTING
        username                = user_name_
      TABLES
        field_maintenance_flags = field_maintenance_flags.

*
    READ TABLE  field_maintenance_flags
                      WITH KEY tabname = c_tabname_lock
                        fieldname = 'GLOBAL_REM'.
    IF    (    sy-subrc <> 0
            OR (     sy-subrc = 0
                 AND field_maintenance_flags-uflag = c_maint ) )
      AND (    ok_lock = 'UNLOG'
            OR (     ok_lock = 'UNLO'
                 AND zbv_clientsystem = 'X' ) ).
      lock_global = 'X'.
    ELSE.
      CLEAR lock_global.
    ENDIF.
*
    READ TABLE  field_maintenance_flags
                          WITH KEY tabname = c_tabname_lock
                         fieldname = 'LOCAL_REM'.
    IF    (    sy-subrc <> 0
            OR (     sy-subrc = 0
                 AND field_maintenance_flags-uflag = c_maint )
            OR zbv_centralsystem = 'X' )
      AND (    ok_lock = 'UNLO'
            OR ok_lock = 'UNLOG' ).
      lock_local = 'X'.
    ELSE.
      CLEAR lock_local.
    ENDIF.

*
    READ TABLE  field_maintenance_flags
                         WITH KEY tabname = c_tabname_lock
                         fieldname = 'WRONG_REM'.
    IF    (    sy-subrc <> 0
            OR (     sy-subrc = 0
                 AND field_maintenance_flags-uflag = c_maint )
            OR zbv_centralsystem = 'X' )
      AND (    ok_lock = 'UNLO'
            OR ok_lock = 'UNLOG' ).
      lock_wrong_logon = 'X'.
    ELSE.
      CLEAR lock_wrong_logon.
    ENDIF.

    CALL FUNCTION 'SUSR_USER_UNLOCK'
      EXPORTING
        user_name           = bname
        lock_global         = lock_global
        lock_local          = lock_local
        lock_wrong_logon    = lock_wrong_logon
      EXCEPTIONS
        user_name_not_exist = 1
        OTHERS              2.

    IF sy-subrc = 0.
      IF  lock_global IS INITIAL AND
          lock_local  IS INITIAL AND
          lock_wrong_logon IS INITIAL.
        p_rc = 1.
*            message s305.  " Sperren/entsperren nicht möglich
      ELSE.
        p_rc = 0.
*            message   s246 with user_name.
      ENDIF.
    ENDIF.
    IF p_rc = '1'.
      FORMAT COLOR COL_NEGATIVE.
      WRITE 'Blokaj Kaldırılamadı'.
    ELSE.
      FORMAT COLOR COL_POSITIVE.
      WRITE 'Blokaj Kaldırıldı'.
    ENDIF.
    COMMIT WORK AND WAIT .

    DATA: lockstate LIKE uslock.
    CALL FUNCTION 'SUSR_USER_LOCKSTATE_GET'
      EXPORTING
        user_name           = bname
      IMPORTING
        lockstate           = lockstate
      EXCEPTIONS
        user_name_not_exist = 1
        OTHERS              2.
    IF   lockstate-wrng_logon = 'L'
      OR lockstate-local_lock = 'L'
      OR lockstate-glob_lock  = 'L'.
*
      MESSAGE i333(01) WITH bname.
    ELSE.
      MESSAGE   s246(01) WITH bname.
    ENDIF.


    IF p_rc <> '1'.
      DATA distribution.
      CLEAR distribution.
      CALL FUNCTION 'SUSR_USER_BUFFERS_TO_DB'
        EXPORTING
          message_out               = 'X'  "
          distribution              = distribution
        EXCEPTIONS
          no_logondata_for_new_user = 1
          no_init_password          = 2
          db_insert_usr02_failed    = 3
          db_update_usr02_failed    = 4
          db_insert_usr01_failed    = 5
          db_update_usr01_failed    = 6
          db_insert_usr05_failed    = 7
          db_update_usr05_failed    = 8
          db_insert_usr21_failed    = 9
          db_update_usr21_failed    = 10.
      IF sy-subrc <> 0.
        MESSAGE  i297(01)  WITH 'SUSR_USER_BUFFERS_TO_DB, sy-subrc = '
                         sy-subrc .

      ELSE.
        COMMIT WORK.

      ENDIF.
    ENDIF.

  ELSE.
    if ls_usr02-uflag = lv_flag2.
    FORMAT COLOR COL_NEGATIVE.
    WRITE 'Yönetici Blokaj koyduğu için program ile kaldırılamaz'.
    else.
    FORMAT COLOR COL_TOTAL.
    WRITE 'Zaten Blokajı olmayan kullanıcı..'.
    endif.
  ENDIF.

Hiç yorum yok:

Yorum Gönder