Show TOC Anfang des Inhaltsbereichs

Feldselektionen im Datenbankprogramm  Dokument im Navigationsbaum lokalisieren

Mit der Anweisung

SELECTION-SCREEN FIELD SELECTION FOR NODE|TABLE node.

wird im Selektions-Include ein Knoten node einer logischen Datenbank für Feldselektion vorgesehen.

Das bedeutet, dass in den SELECT-Anweisungen des entsprechenden Unterprogramms PUT_node in der SELECT-Klausel einzelne Spalten genannt werden können, statt nur alle Spalten mit einem Stern (*). Diese Möglichkeit dient dazu die von einer Datenbank übertragene Datenmenge klein zu halten und kann performanter sein, als immer die Daten aller Spalten einer Datenbanktabelle zu lesen.

Die zu lesenden Spalten jedes für Feldselektion vorgesehenen Knotens können mit dem FIELD-Zusatz der Anweisung GET im verknüpften ausführbaren Programm oder im Parameter FIELD_SELECTION des Funktionsbausteins LDB_PROCESS angegeben werden. Das Datenbankprogramm der logischen Datenbank hat auf die Namen der Spalten im Datenobjekt SELECT_FIELDS Zugriff. Das Datenobjekt SELECT_FIELDS wird automatisch im logischen Datenbankprogramm wie folgt generiert:

TYPE-POOLS RSFS.

DATA SELECT_FIELDS TYPE RSFS_FIELDS.

Diese Anweisungen müssen nicht selbst programmiert werden. Das Datenobjekt SELECT_FIELDS steht auch jedem mit der logischen Datenbankprogramm verknüpften Anwendungsprogramm zur Verfügung.

Der Typ dieses Datenobjekts (RSFS_FIELDS) ist in der Typgruppe RSFS wie folgt definiert:

TYPE-POOL RSFS.

* Fields to be selected per table

TYPES: BEGIN OF RSFS_TAB_FIELDS,
         TABLENAME LIKE RSDSTABS-PRIM_TAB,
         FIELDS LIKE RSFS_STRUC OCCURS 10,
       END OF RSFS_TAB_FIELDS.

* Fields to be selected for all tables

TYPES: RSFS_FIELDS TYPE RSFS_TAB_FIELDS OCCURS 10.

RSDS_FIELDS ist also eine tiefe interne Tabelle mit den Komponenten TABLENAME und FIELDS. Die Spalte TABLENAME enthält in jeder Zeile den Namen eines Knotens, für den Feldselektion vorgesehen ist.  Zu jeden dieser Knoten enthält die Tabelle FIELDS die in den GET-Anweisungen des Anwendungsprogramms angegebenen Spalten. Das Format der Tabelle FIELDS ist so definiert, dass sie direkt als dynamische Spaltenangabe in einer SELECT-Anweisung eingesetzt werden kann.

Um die Namen der Spalten in der logischen Datenbank zu verwenden, kann für jeden Knoten node, der für Feldselektion vorgesehen ist, im entsprechenden Unterprogramm PUT_node die dynamische Liste FIELDS in der SELECT-Klausel der SELECT-Anweisung angegeben werden. Hierzu muss die passende interne Tabelle aus der internen Tabelle SELECT_FIELDS gelesen werden. Das folgende Beispiel zeigt, wie man hierfür ein lokales Datenobjekt des Unterprogramms verwenden kann.

Beispiel

Die Tabelle SCARR sei der Wurzelknoten der logischen Datenbank ZHK und die Tabelle SPFLI der einzige Nachfolger.

Das Selektions-Include DBZHKSEL enthalte folgende Zeilen:

SELECT-OPTIONS S_CARRID FOR SCARR-CARRID.

SELECT-OPTIONS S_CONNID FOR SPFLI-CONNID.

SELECTION-SCREEN FIELD SELECTION FOR TABLE SPFLI.

Das Unterprogramm PUT_SPFLI des Datenbankprogramms SAPDBZHK verwendet die Feldselektionen wie folgt:

FORM PUT_SPFLI.

  STATICS: FIELDLISTS TYPE RSFS_TAB_FIELDS,
           FLAG_READ.

  IF FLAG_READ = SPACE.
    FIELDLISTS-TABLENAME = 'SPFLI'.
    READ TABLE SELECT_FIELDS WITH KEY FIELDLISTS-TABLENAME
                             INTO FIELDLISTS.
    FLAG_READ = 'X'.
  ENDIF.

  SELECT (FIELDLISTS-FIELDS)
         INTO CORRESPONDING FIELDS OF SPFLI FROM SPFLI
         WHERE CARRID = SCARR-CARRID
           AND CONNID IN S_CONNID.

    PUT SPFLI.

  ENDSELECT.

ENDFORM.

Die Zeile der internen Tabelle SELECT_FIELDS, für welche die Spalte SELECT_FIELD-TABLENAME den Wert SCARR enthält, wird in die Hilfsstruktur FIELDLISTS gelesen. Über die STATICS-Anweisungen und das Feld FLAG_READ wird dafür gesorgt, dass die Tabelle SELECT_FIELDS nur ein einziges mal pro Programmausführung gelesen werden muss. Die Tabelle FIELDLISTS-FIELDS wird in der dynamischen SELECT-Klausel verwendet.

Ein ausführbares Programm, das mit der logischen Datenbank HKZ verknüpft ist, kann nun zum Beispiel folgende Zeilen enthalten:

TABLES SPFLI.

GET SPFLI FIELDS CITYFROM CITYTO.

...

Der FIELDS-Zusatz der Anweisung GET legt fest, welche Felder der Datenbanktabelle die logische Datenbank außer dem Primärschlüssel noch lesen soll.

Intern füllt das System die Tabelle SELECT_FIELDS mit den entsprechenden Werten. Das wird hier demonstriert, indem folgende Zeilen in das Programm eingefügt werden:

DATA: ITAB   LIKE SELECT_FIELDS,
      ITAB_L LIKE LINE OF ITAB,
      JTAB   LIKE ITAB_L-FIELDS,
      JTAB_L LIKE LINE OF JTAB.

START-OF-SELECTION.

  ITAB = SELECT_FIELDS.
  LOOP AT ITAB INTO ITAB_L.
    IF ITAB_L-TABLENAME = 'SPFLI'.
      JTAB = ITAB_L-FIELDS.
      LOOP AT JTAB INTO JTAB_L.
        
WRITE / JTAB_L.
      ENDLOOP.
    ENDIF.
  ENDLOOP.

Diese Zeilen geben die Spaltennamen wie folgt auf der Liste aus:

CITYTO

CITYFROM

MANDT

CARRID

CONNID

Es wurden also automatisch die Felder des Primärschlüssels (MANDT, CARRID, CONNID) zu den angegebenen Spalten hinzugefügt.

 

Ende des Inhaltsbereichs