Show TOC Anfang des Inhaltsbereichs

Nachrichtenbehandlung in Tabellen-Modulen  Dokument im Navigationsbaum lokalisieren

Achtung Contexte sind obsolet und sollten nicht verwendet werden. Contexte wurden zu Release 4.0 für performante Zugriffe auf häufig benötigte abgeleitete Daten eingeführt. Seit der Einführung von ABAP Objects zu Release 4.5 werden Contexte nicht weiterentwickelt. Seit Release 6.40 können Contexte durch Shared Objects ersetzt werden.

 

Die Voraussetzung für das Senden von Benutzernachrichten aus Tabellen-Modulen ist, dass die Nachrichten für die einzelnen Module in der Tabelle Module angegeben sind. Falls keine Nachricht zu einem Tabellen-Modul angegeben ist, gibt das System auch keine Nachricht aus, sondern initialisiert lediglich die entsprechenden abhängigen Werte.

Bei der Abfrage von abhängigen Daten von Context-Instanzen mit der Anweisung DEMAND können Sie entscheiden, ob das System die Benutzernachricht behandeln soll, oder ob Sie die Nachricht im Programm behandeln.

Nachrichtenbehandlung vom System

Falls das System die Nachricht behandeln soll, verwenden Sie die Grundform der DEMAND-Anweisung ohne die Option MESSAGES. Dann verhält das System sich so, als wenn nach der DEMAND-Anweisung folgende Anweisung im Programm stünde:

MESSAGE ID 'Nachrichten Id' TYPE 'T' NUMBER 'Nummer'
        WITH 'Variable 1' .... 'Variable 4'.

Das System übernimmt die Argumente der MESSAGE-Anweisung aus den entsprechenden Einträgen der Tabelle Module. Beachten Sie, dass die Reaktion auf die verschiedenen Nachrichtentypen vom aktuellen Benutzerdialog (Dynpro, Selektionsbild oder Liste) abhängt.

Nachrichtenbehandlung im Programm

Falls Sie die Nachricht im Programm abfangen wollen, verwenden Sie die DEMAND-Anweisung mit der Option MESSAGES INTO itab. Hierfür müssen Sie eine interne Tabelle itab der Struktur SYMSG anlegen. Das System löscht die Tabelle itab zu Beginn der DEMAND-Anweisung und schreibt dann die Kennungen aller während der Context-Verarbeitung auftretender Nachrichten in die Tabelle itab statt sie an den Benutzer auszugeben und entsprechend des Nachrichtentyps zu reagieren. Weiterhin setzt das System den Rückgabewert sy-subrc ungleich Null, falls nach der DEMAND-Anweisung Nachrichten in der Tabelle vorhanden sind.

Sie können somit die automatische Nachrichtenbehandlung von Contexten verhindern um z.B. mit den Einträgen in der internen Tabelle eine eigene Nachrichtenbehandlung zu programmieren. Dies ist z.B. wichtig, wenn Sie gezielt Felder auf Eingabeschirmen wieder eingabebereit machen wollen. Dann muss sich Ihre Nachrichtenbehandlung auf diese Felder beziehen (Anweisung FIELDS in der Ablauflogik von Dynpros oder ABAP-Anweisung AT SELECTION-SCREEN bei Selektionsbildern) und nicht auf Context-Felder.

Beispiel

Die Tabelle Module des Contexts DOCU_TEST1 (siehe Tabellen als Module) enthalte folgende Einträge für das Modul SPFLI:

Diese Grafik wird im zugehörigen Text erklärt

Als Beispiel für die Nachrichtenbehandlung vom System führen Sie folgendes Programm aus:

REPORT  demo_context_message_1.

DATA: c_from TYPE spfli-cityfrom,
      c_to   TYPE spfli-cityto.

CONTEXTS docu_test1.

DATA: context_inst TYPE context_docu_test1.

 

SUPPLY carrid = 'XX'
       connid = '400'
       TO CONTEXT context_inst.

DEMAND cityfrom = c_from
       cityto   = c_to
       FROM CONTEXT context_inst.

WRITE: / c_from, c_to.

Das Programm wird mit der Fehlermeldung

Keine Einträge zum Schlüssel XX 0400 gefunden

abgebrochen.

Als Beispiel für die Nachrichtenbehandlung im Programm führen Sie folgendes Programm aus:

REPORT  demo_context_message_2.

DATA: c_from TYPE spfli-cityfrom,
      c_to   TYPE spfli-cityto.

DATA itab TYPE TABLE OF symsg WITH HEADER LINE.

CONTEXTS docu_test1.

DATA: context_inst TYPE context_docu_test1.

 

SUPPLY carrid = 'XX'
       connid = '400'
       TO CONTEXT context_inst.

DEMAND cityfrom = c_from
       cityto   = c_to
       FROM CONTEXT context_inst MESSAGES INTO itab.

WRITE: / c_from, c_to.

IF sy-subrc NE 0.
  LOOP AT itab.
    WRITE: / itab-msgty,
           / itab-msgid,
           / itab-msgno,
           / itab-msgv1,
           / itab-msgv2.
  
ENDLOOP.
ENDIF.

Das Programm liefert folgende Ausgabe:

E  AT  107  XX  0400

Statt mit einer Error-Nachricht abzubrechen, steht die Nachricht in der internen Tabelle itab zur weiteren Verarbeitung zur Verfügung.

 

Ende des Inhaltsbereichs