Messagehandling (ABAP): Unterschied zwischen den Versionen

Aus MattWiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 1: Zeile 1:
== Zweck und Voraussetzungen ==
Zweck: Nach der Verwendung von Nachrichten einer Nachrichtenklasse per SAP Verwendungsnachweis suchen können.
Zweck: Nach der Verwendung von Nachrichten einer Nachrichtenklasse per SAP Verwendungsnachweis suchen können.


Voraussetzung: In den Eigenschaften der jeweiligen Klasse muss die Nachrichtenklasse gepflegt sein.
Voraussetzung: In den Eigenschaften der jeweiligen Klasse muss die Nachrichtenklasse gepflegt sein.
== Implementierungsbeispiele ==
=== Grundform der Message-Implementierung mit lokaler Struktur ===
<syntaxhighlight lang="abap">
          MESSAGE ID 'ZMSGCLASS' TYPE 'E' NUMBER 56 with lv_var1 into data(lv_dummy).
          ls_msg-msgid = 'ZMSGCLASS'.
          ls_msg-msgno = 56.
          ls_msg-severity = 'E'.
          ls_msg-parameter_1 = lv_morxverp.
          APPEND ls_msg TO lt_msg.
</syntaxhighlight>
=== Aufruf Message ohne und mit Messageklassen-Zuordnung ===
Aufruf von MESSAGE in Klasse ohne Zuordnung der Message-Klasse in der Klassendefinition:
<syntaxhighlight lang="abap">
        MESSAGE ID 'ZMSGCLASS' TYPE 'E' NUMBER 1
          WITH 'Implementierung Unvollständig!' 'Verantwortlich: User1234' 'Ort: ZMYCLASS1->MYMETHOD1'.
</syntaxhighlight>
Aufruf von MESSAGE in Klasse, wenn eine Zuordnung der Message-Klasse in der Klassendefinition vorliegt:
<syntaxhighlight lang="abap">
        MESSAGE w031 WITH lv_sel_year '000' INTO lv_dummy.
          zmyclass1=>add_sy_message( ).
</syntaxhighlight>
=== Add-Message-Methode ===


Dann kann man eine Add-Message-Methode bauen, die etwa so aussieht:
Dann kann man eine Add-Message-Methode bauen, die etwa so aussieht:
Zeile 23: Zeile 56:
</syntaxhighlight>
</syntaxhighlight>


=== Aufruf Add-Message-Methode ===


Der Aufruf findet dabei wie folgt statt. Dabei setzt die <code>MESSAGE</code>-Funktion die sy-msg*-Werte.
Der Aufruf findet dabei wie folgt statt. Dabei setzt die <code>MESSAGE</code>-Funktion die sy-msg*-Werte.
Zeile 41: Zeile 75:
</syntaxhighlight>
</syntaxhighlight>


Da es sich bei diesem Rückgabewert um einen Returning- und nicht um einen Changing-Parameter handelt, muss an der Aufrufenden Stelle das Ergebnis an die Messages-Tabelle mit <code>APPEND</code> angefügt werden:
Da es sich bei diesem Rückgabewert um einen Returning- und nicht um einen Changing-Parameter handelt, muss an der aufrufenden Stelle das Ergebnis an die Messages-Tabelle mit <code>APPEND</code> angefügt werden:


<syntaxhighlight lang="abap">
<syntaxhighlight lang="abap">
     APPEND LINES OF me->set_char_texts_edit( ) to rt_messages.
     APPEND LINES OF me->set_char_texts_edit( ) to rt_messages.
</syntaxhighlight>
</syntaxhighlight>
=== Implementierung mit VALUE und BASE ===
<syntaxhighlight lang="abap">
        MESSAGE ID 'ZMSGCLASS' TYPE 'E' NUMBER 56 WITH lv_var1 INTO lv_string.
          me->add_msg( CHANGING ct_msg = et_messages ).
          lt_msg = value #( base lt_msg (
                                  msgid = sy-msgid
                                  msgno = sy-msgno
                                  severity = sy-msgty
                                  parameter_1 = sy-msgv1
                                  parameter_2 = sy-msgv2
                                  parameter_3 = sy-msgv3
                                  parameter_4 = sy-msgv4 ) ).
          APPEND value #( msgid = sy-msgid msgno = sy-msgno severity = sy-msgty parameter_1 = sy-msgv1 parameter_2 = sy-msgv2 parameter_3 = sy-msgv3 parameter_4 = sy-msgv4 ) TO lt_msg.
</syntaxhighlight>




[[Category:ABAP]]
[[Category:ABAP]]

Aktuelle Version vom 24. Juli 2019, 08:34 Uhr

Zweck und Voraussetzungen

Zweck: Nach der Verwendung von Nachrichten einer Nachrichtenklasse per SAP Verwendungsnachweis suchen können.

Voraussetzung: In den Eigenschaften der jeweiligen Klasse muss die Nachrichtenklasse gepflegt sein.

Implementierungsbeispiele

Grundform der Message-Implementierung mit lokaler Struktur

          MESSAGE ID 'ZMSGCLASS' TYPE 'E' NUMBER 56 with lv_var1 into data(lv_dummy).
          ls_msg-msgid = 'ZMSGCLASS'.
          ls_msg-msgno = 56.
          ls_msg-severity = 'E'.
          ls_msg-parameter_1 = lv_morxverp.
          APPEND ls_msg TO lt_msg.

Aufruf Message ohne und mit Messageklassen-Zuordnung

Aufruf von MESSAGE in Klasse ohne Zuordnung der Message-Klasse in der Klassendefinition:

         MESSAGE ID 'ZMSGCLASS' TYPE 'E' NUMBER 1
           WITH 'Implementierung Unvollständig!' 'Verantwortlich: User1234' 'Ort: ZMYCLASS1->MYMETHOD1'.

Aufruf von MESSAGE in Klasse, wenn eine Zuordnung der Message-Klasse in der Klassendefinition vorliegt:

         MESSAGE w031 WITH lv_sel_year '000' INTO lv_dummy. 
           zmyclass1=>add_sy_message( ).


Add-Message-Methode

Dann kann man eine Add-Message-Methode bauen, die etwa so aussieht:

  METHOD add_message_from_sy.

    APPEND VALUE fpmgb_s_t100_message(
      msgid = sy-msgid
      msgno = sy-msgno
      severity = sy-msgty
      parameter_1 = sy-msgv1
      parameter_2 = sy-msgv2
      parameter_3 = sy-msgv3
      parameter_4 = sy-msgv4
      ) TO ct_messages.

  ENDMETHOD.

Aufruf Add-Message-Methode

Der Aufruf findet dabei wie folgt statt. Dabei setzt die MESSAGE-Funktion die sy-msg*-Werte.

        MESSAGE w380 with <f_variables>-var_id-vnam INTO DATA(lv_dummy).
        add_message_from_sy( CHANGING ct_messages = rt_messages ).

Rückgabewerte:

  methods SET_CHAR_TEXTS_EDIT
    returning
      value(RT_MESSAGES) type FPMGB_T_MESSAGES .

Da es sich bei diesem Rückgabewert um einen Returning- und nicht um einen Changing-Parameter handelt, muss an der aufrufenden Stelle das Ergebnis an die Messages-Tabelle mit APPEND angefügt werden:

    APPEND LINES OF me->set_char_texts_edit( ) to rt_messages.


Implementierung mit VALUE und BASE

         MESSAGE ID 'ZMSGCLASS' TYPE 'E' NUMBER 56 WITH lv_var1 INTO lv_string.
          me->add_msg( CHANGING ct_msg = et_messages ).
 
          lt_msg = value #( base lt_msg (
                                   msgid = sy-msgid
                                   msgno = sy-msgno
                                   severity = sy-msgty
                                   parameter_1 = sy-msgv1
                                   parameter_2 = sy-msgv2
                                   parameter_3 = sy-msgv3
                                   parameter_4 = sy-msgv4 ) ).

          APPEND value #( msgid = sy-msgid msgno = sy-msgno severity = sy-msgty parameter_1 = sy-msgv1 parameter_2 = sy-msgv2 parameter_3 = sy-msgv3 parameter_4 = sy-msgv4 ) TO lt_msg.