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.
Nach dem Versorgen einer Context-Instanz mit Schlüsselwerten, können Sie die davon abhängigen Werte der Context-Instanz abfragen. Hierfür verwenden Sie die Anweisung DEMAND:
DEMAND val1 =
f1 ... valn = fn FROM CONTEXT inst
[MESSAGES
INTO itab].
Diese Anweisung füllt die Felder f1 … fn mit den abgeleiteten Werten val1 … valn der Context-Instanz inst. Die Felder des Contexts finden Sie in der Tabelle Felder.
Dabei führt das System folgende Schritte aus:
...
1. Das System prüft, ob die Context-Instanz schon gültige abgeleitete Werte enthält. Dies ist der Fall, falls diese schon durch eine vorherige DEMAND-Anweisung berechnet wurden und die Instanz zwischenzeitlich nicht über die SUPPLY-Anweisung mit neuen Schlüsselfeldern versorgt wurde. Falls die Instanz gültige Werte enthält, werden diese den Feldern f1 … fn zugewiesen.
2. Falls die Context-Instanz keine gültigen abgeleiteten Werte enthält, werden diese neu erstellt. Hierfür sucht das System erst im Context-Puffer (siehe Contexte puffern) nach Datensätzen mit den derzeitigen Schlüsselfeldern der Context-Instanz. Falls im Context-Puffer entsprechende Werte gefunden werden, überträgt das System diese als gültige Werte in die Context-Instanz und weist sie den Feldern f1 … fn zu.
3. Falls auch der Context-Puffer keine passenden Werte enthält, führt das System die Ableitung gemäß der in der Context-Definition definierten Schemata aus. Auch bei der Ableitung werden Zwischenresultate im Context-Puffer gesucht und gegebenenfalls verwendet. Nach der Neuberechnung speichert das System alle Resultate im Context-Puffer, überträgt die Werte in die Context-Instanz und weist sie den Feldern f1 … fn zu.
4. Falls das System während der Ableitung abhängige Werte nicht bestimmen kann, bricht es die Verarbeitung ab, setzt die Felder f1 … fn auf ihren Inititialwert und gibt die Benutzernachricht aus, die in der Tabelle Module gepflegt ist. Mit der Option MESSAGESkönnen die Nachrichten programmgesteuert behandeln (siehe Nachrichtenbehandlung in Contexten).
REPORT rsgcon01.
DATA: c_from TYPE spfli-cityfrom,
c_to TYPE spfli-cityto,
c_time TYPE spfli-fltime.
CONTEXTS demo_travel.
DATA: demo_travel_inst1 TYPE context_demo_travel,
demo_travel_inst2 TYPE
context_demo_travel.
SUPPLY carrid = 'LH'
connid = '400'
TO CONTEXT
demo_travel_inst1.
SUPPLY carrid = 'AA'
connid = '017'
TO CONTEXT
demo_travel_inst2.
DEMAND cityfrom = c_from
cityto = c_to
fltime = c_time
FROM CONTEXT
demo_travel_inst1.
WRITE: / c_from, c_to, c_time.
DEMAND cityfrom = c_from
cityto = c_to
fltime = c_time
FROM CONTEXT
demo_travel_inst2.
WRITE: / c_from, c_to, c_time.
Dieser Programmabschnitt erzeugt zwei Instanzen des Contexts demo_travel, versorgt beide mit Schlüsselwerten und liest jeweils drei abhängige Werte aus.