Anfang des Inhaltsbereichs

Daten von Context-Instanzen abfragen Dokument im Navigationsbaum lokalisieren

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:

Syntax

DEMAND <val1> = <f 1> ... <val n> = <f n> FROM CONTEXT <inst>
                                     [MESSAGES INTO <itab>].

Diese Anweisung füllt die Felder <fn> mit den abgeleiteten Werten <val n> 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 <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 <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 <fn> zu.
  4. Falls das System während der Ableitung abhängige Werte nicht bestimmen kann, bricht es die Verarbeitung ab, setzt die Felder <fn> auf ihren Inititialwert und gibt die Benutzernachricht aus, die in der Tabelle Module gepflegt ist. Mit der Option MESSAGES können die Nachrichten programmgesteuert behandeln (siehe Nachrichtenbehandlung in Contexten).

Beispiel

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.

 

 

Ende des Inhaltsbereichs