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 = 0 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