Message Handling en ABAP permet la sortie structuree de messages utilisateur et systeme. Avec l’instruction MESSAGE et les classes de messages, vous pouvez creer des messages coherents et multilingues.
Types de messages
Type
Nom
Comportement
A
Abandon (Abend)
Le programme se termine
E
Erreur (Error)
L’entree est bloquee
W
Avertissement (Warning)
Confirmation possible
I
Information
Message popup
S
Statut (Success)
Barre de statut
X
Exit
Termine le programme avec dump
Syntaxe
" Avec classe de messages et numero
MESSAGE e001(zmessages).
" Avec variables
MESSAGE e002(zmessages) WITH lv_value1 lv_value2.
" Dynamique
MESSAGEID'ZMESSAGES' TYPE'E'NUMBER'001'.
" Enregistrer dans une variable
MESSAGE e001(zmessages) INTODATA(lv_message).
Exemples
1. Messages simples
" Message de succes dans la barre de statut
MESSAGE s001(zmessages).
" 'Operation effectuee avec succes"
" Message d'erreur
MESSAGE e002(zmessages).
" 'Erreur lors du traitement"
" Avertissement
MESSAGE w003(zmessages).
" 'Attention : Les donnees ont ete modifiees"
" Information (Popup)
MESSAGE i004(zmessages).
" 'Veuillez prendre note des informations"
2. Messages avec variables
" Texte du message : "Client & a ete cree"
MESSAGE s010(zmessages) WITH lv_kunnr.
" Texte du message : "Commande & Position & a ete modifiee"
MESSAGE s011(zmessages) WITH lv_vbeln lv_posnr.
" Jusqu'a 4 variables possibles
MESSAGE e012(zmessages) WITH lv_var1 lv_var2 lv_var3 lv_var4.
3. Enregistrer le message dans une variable
" Ne pas afficher le message, mais l'enregistrer
MESSAGE e001(zmessages) INTODATA(lv_message).
" Avec variables
MESSAGE e010(zmessages) WITH lv_kunnr INTO lv_message.
" sy-msgty, sy-msgid, sy-msgno sont renseignes
WRITE: /'Type:', sy-msgty,
/'Classe:', sy-msgid,
/'Numero:', sy-msgno,
/'Texte:', lv_message.
4. Messages dynamiques
DATA: lv_msgid TYPEsy-msgidVALUE'ZMESSAGES',
lv_msgty TYPEsy-msgtyVALUE'E',
lv_msgno TYPEsy-msgnoVALUE'001',
lv_msgv1 TYPE sy-msgv1,
lv_msgv2 TYPEsy-msgv2.
" Sortie dynamique
MESSAGEID lv_msgid TYPE lv_msgty NUMBER lv_msgno
WITH lv_msgv1 lv_msgv2.
" Ou avec INTO
MESSAGEID lv_msgid TYPE lv_msgty NUMBER lv_msgno
WITH lv_msgv1 lv_msgv2
INTODATA(lv_text).
5. Messages depuis les exceptions
TRY.
" Code qui leve une exception
DATA(lo_processor) =NEW zcl_processor( ).
lo_processor->process( ).
CATCH cx_root INTODATA(lx_error).
" Texte de l'exception comme message
MESSAGE lx_error TYPE'E'.
" Ou dans la barre de statut
MESSAGE lx_error TYPE'S'DISPLAY LIKE'E'.
ENDTRY.
6. DISPLAY LIKE pour l’apparence de la barre de statut
" Message d'erreur comme message de statut (pas de popup)
MESSAGE e001(zmessages) DISPLAY LIKE'S'.
" Succes dans la barre de statut avec icone d'erreur
MESSAGE s001(zmessages) DISPLAY LIKE'E'.
" Information affichee comme avertissement
MESSAGE i001(zmessages) DISPLAY LIKE'W'.
7. Classe de messages comme constantes
CLASS zcl_messages DEFINITION.
PUBLIC SECTION.
CONSTANTS:
" Classe de messages
c_msgid TYPEsy-msgidVALUE'ZMYAPP',
" Numeros de messages
c_success_saved TYPEsy-msgnoVALUE'001',
c_error_not_found TYPEsy-msgnoVALUE'002',
c_error_no_auth TYPEsy-msgnoVALUE'003',
c_warning_duplicate TYPEsy-msgnoVALUE'004'.
CLASS-METHODS: show_success
IMPORTING iv_object TYPE string.
CLASS-METHODS: show_error
IMPORTING iv_message TYPE string.
CLASS-METHODS: get_message
IMPORTING iv_msgno TYPEsy-msgno
iv_var1 TYPE clikeOPTIONAL
iv_var2 TYPE clikeOPTIONAL
RETURNINGVALUE(rv_text) TYPE string.
ENDCLASS.
CLASS zcl_messages IMPLEMENTATION.
METHODshow_success.
MESSAGE s001(zmyapp) WITH iv_object.
ENDMETHOD.
METHODshow_error.
MESSAGEID c_msgid TYPE'E'NUMBER c_error_not_found
WITH iv_message.
ENDMETHOD.
METHODget_message.
MESSAGEID c_msgid TYPE'S'NUMBER iv_msgno
WITH iv_var1 iv_var2
INTO rv_text.
ENDMETHOD.
ENDCLASS.
" Utilisation
zcl_messages=>show_success( 'Client 1000' ).
DATA(lv_msg) = zcl_messages=>get_message(
iv_msgno = zcl_messages=>c_error_not_found
iv_var1 ='Commande"
).
8. BAPIRET2 pour les messages de retour
TYPES: ty_messages TYPE STANDARD TABLE OF bapiret2 WITHEMPTY KEY.
CLASS zcl_message_collector DEFINITION.
PUBLIC SECTION.
METHODS: add_success
IMPORTING iv_message TYPE string.
METHODS: add_error
IMPORTING iv_msgid TYPEsy-msgid
iv_msgno TYPEsy-msgno
iv_var1 TYPE clikeOPTIONAL
iv_var2 TYPE clikeOPTIONAL.
METHODS: add_from_sy.
METHODS: has_errors
RETURNINGVALUE(rv_result) TYPE abap_bool.
METHODS: get_messages
RETURNINGVALUE(rt_messages) TYPE ty_messages.
METHODS: display_all.
PRIVATE SECTION.
DATA: mt_messages TYPE ty_messages.
ENDCLASS.
CLASS zcl_message_collector IMPLEMENTATION.
METHODadd_success.
APPENDVALUE bapiret2(
type='S"
message = iv_message
) TO mt_messages.
ENDMETHOD.
METHOD add_error.
DATA: lv_text TYPE string.
MESSAGE ID iv_msgid TYPE 'E' NUMBER iv_msgno
WITH iv_var1 iv_var2
INTO lv_text.
APPEND VALUE bapiret2(
type = 'E"
id= iv_msgid
number= iv_msgno
message= lv_text
message_v1 = iv_var1
message_v2 = iv_var2
) TO mt_messages.
ENDMETHOD.
METHODadd_from_sy.
" Message depuis les variables sy-msg*
APPENDVALUE bapiret2(
type=sy-msgty
id=sy-msgid
number=sy-msgno
message_v1 =sy-msgv1
message_v2 =sy-msgv2
message_v3 =sy-msgv3
message_v4 =sy-msgv4
) TO mt_messages.
ENDMETHOD.
METHODhas_errors.
rv_result =xsdbool( line_exists( mt_messages[ type='E' ] ) OR