User Tools

Site Tools


start:tips:sap:unlock

Unlock an user

Z_CHANGE_USER_UFLAG.abap
REPORT Z_CHANGE_USER_UFLAG.
 
TABLES: USR02.
 
PARAMETERS: p_user   LIKE usr02-bname OBLIGATORY,
            p_client LIKE usr02-mandt DEFAULT sy-mandt,
            p_uflag  TYPE usr02-uflag DEFAULT 0,
            p_modify TYPE boolean DEFAULT space AS CHECKBOX.
 
" Variables pour audit et contrôle
DATA: lv_old_uflag TYPE usr02-uflag,
      lv_message   TYPE string,
      lv_timestamp TYPE timestamp.
 
AT SELECTION-SCREEN ON p_uflag.
 
  " Validation des valeurs UFLAG autorisées [[1]](https://community.sap.com/t5/technology-q-a/password-reset-based-on-uflag/qaq-p/12585274)
  CASE p_uflag.
    WHEN 0.   " Utilisateur déverrouillé
      lv_message = 'Déverrouillage utilisateur'.
    WHEN 32.  " Verrouillé par administrateur
      lv_message = 'Verrouillage administrateur'.
    WHEN 64.  " Verrouillé par tentatives de connexion
      lv_message = 'Verrouillage tentatives connexion'.
    WHEN 128. " Verrouillé par tentatives mot de passe [[1]](https://community.sap.com/t5/technology-q-a/password-reset-based-on-uflag/qaq-p/12585274)
      lv_message = 'Verrouillage tentatives mot de passe'.
    WHEN 192. " Combinaison 64+128
      lv_message = 'Verrouillage combiné'.
    WHEN OTHERS.
      MESSAGE 'Valeur UFLAG non autorisée. Utilisez: 0,32,64,128,192' TYPE 'E'.
  ENDCASE.
 
AT SELECTION-SCREEN.
 
  " Vérifier si l'utilisateur existe
  SELECT SINGLE bname FROM usr02
    CLIENT SPECIFIED
    INTO @DATA(lv_user_check)
    WHERE mandt = @p_client
      AND bname = @p_user.
 
  IF sy-subrc NE 0.
    MESSAGE 'Utilisateur non trouvé dans le mandant spécifié' TYPE 'E'.
  ENDIF.
 
START-OF-SELECTION.
 
  " Vérification des autorisations [[2]](https://help.sap.com/saphelp_scm70/helpdata/ru/9f/dbaccb35c111d1829f0000e829fbfe/content.htm),
  AUTHORITY-CHECK OBJECT 'S_USER_GRP'
    ID 'CLASS' FIELD '*'
    ID 'ACTVT' FIELD '02'.
 
  IF sy-subrc NE 0.
    MESSAGE 'Autorisation insuffisante pour modifier les utilisateurs' TYPE 'E'.
    EXIT.
  ENDIF.
 
  " Lecture des données actuelles pour audit
  SELECT SINGLE uflag FROM usr02
    CLIENT SPECIFIED
    INTO lv_old_uflag
    WHERE mandt = p_client
      AND bname = p_user.
 
  IF sy-subrc = 0.
    " Affichage des informations avant modification
    WRITE: / 'Utilisateur:', p_user,
           / 'Client:', p_client,
           / 'Ancienne valeur UFLAG:', lv_old_uflag,
           / 'Nouvelle valeur UFLAG:', p_uflag,
           / 'Action:', lv_message.
 
    " Vérification si modification nécessaire
    IF lv_old_uflag = p_uflag.
      WRITE: / 'Aucune modification nécessaire - valeurs identiques'.
      EXIT.
    ENDIF.
 
    " Modification du champ UFLAG
    IF p_modify = 'X'.
 
      UPDATE usr02 CLIENT SPECIFIED
        SET uflag = p_uflag
        WHERE mandt = p_client
          AND bname = p_user.
 
      IF sy-subrc = 0.
        COMMIT WORK.
        WRITE: / '*** MODIFICATION RÉUSSIE ***',
               / 'UFLAG modifié de', lv_old_uflag, 'vers', p_uflag,
               / 'Modifié par:', sy-uname.
      ELSE.
        ROLLBACK WORK.
        MESSAGE 'Erreur lors de la modification UFLAG' TYPE 'E'.
      ENDIF.
    ELSE.
      WRITE: / 'Mode simulation - aucune modification effectuée'.
    ENDIF.
  ELSE.
    MESSAGE 'Erreur lors de la lecture des données utilisateur' TYPE 'E'.
  ENDIF.
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
start/tips/sap/unlock.txt · Last modified: by admin_wiki