Warning: Undefined array key "REMOTE_USER" in /home/clients/1b5563e54ec9ebb7c62f82bb22e088b4/web/wiki/lib/plugins/googleanalytics/action.php on line 55
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.