Ansicht
Dokumentation

ABENLDB_SEARCH_HELP - LDB SEARCH HELP

ABENLDB_SEARCH_HELP - LDB SEARCH HELP

Vendor Master (General Section)   Fill RESBD Structure from EBP Component Structure  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- Verknüpfung mit Suchhilfen

Einer logischen Datenbank kann eine passende Suchhilfe zugeordnet werden. Welche Suchhilfe für eine logische Datenbank sinnvoll ist, muss nach inhaltlichen Gesichtspunkten entschieden werden. Wenn z.B. eine logische Datenbank erstellt wird, die Kreditorsätze liest, sollte ein Ausgabefeld der Suchhilfe die Kreditornummer sein. Die Inhalte der Ausgabefelder der Suchhilfe stehen der logischen Datenbank zur Laufzeit zum eigentlichen Zugriff auf die Datenbanktabellen zu Verfügung.

Um dem Benutzer die Verwendung der Suchhilfe zu ermöglichen, muss im Selektions-Include ein spezieller Parameter mit dem Zusatz AS SEARCH PATTERN deklariert werden. Auf dem Selektionsbild erscheint dann ein Rahmen Selektion über Suchhilfe mit Eingabefeldern für die Suchhilfe-Kennung Kennung und den Suchstring. Außerdem gibt es eine Drucktaste für komplexe Suchhilfen, Mehrfachselektionen für jedes einzelne Feld erlaubt.

Die Interpretation der Benutzereingaben auf dem Selektionsbild und das Lesen der Werteliste von der Datenbank wird vom Laufzeit-Framework durchgeführt. Diese Zeilen werden dem Datenbankprogramm in der internen Tabelle ldb_sp zur Verfügung gestellt und es wird statt dem Unterprogramm put_node für den Wurzelknoten das Unterprogramm put_ldb_sp aufgerufen. Dabei ist ldb der Namen der logischen Datenbank. Dieses Unterprogramm kann mit Hilfe der Werteliste in der internen Tabelle ldb_sp die eigentlichen Daten lesen und das Ereignis GET für den Wurzelknoten mit der Anweisung PUT auslösen. Häufig ist es auch sinnvoll, aus put_ldb_sp das Unterprogramm put_node für den Wurzelknoten aufzurufen, das dann die Datenselektion vornimmt und dort mit PUT das zugehörige GET-Ereignis auszulösen. Die Struktur der internen Tabelle ldb_sp und anderer automatisch generierter Tabellen wird als Kommentar in den Quelltext des Datenbankprogramms generiert. Die Verwendung dieser Tabellen wird ebenfalls im Quelltext dokumentiert.

Beim Datenbankzugriff mit Suchhilfe sollte zusätzlich auch von den Möglichkeiten der freien Abgrenzungen und der Feldselektion Gebrauch gemacht werden. Suchhilfen können auch zur Performanceverbesserung verwendet werden. Mit Hilfe der internen Tabellen get_events, sp_fields und sp_tables sowie der Struktur sp_events ist es möglich, im Datenbankprogramm jeweils verschiedene Datenbankzugriffe zu programmieren, je nachdem welche Tabellen und Felder verwendet und versorgt werden. Beispielsweise können Views oder Joins verwendet und die gelesenen Sätze in internen Tabellen gesammelt werden, um die internen Tabellen später zu verarbeiten und dabei die jeweiligen GET-Ereignisse auszulösen.

Beispiel

Wir betrachten eine imaginäre logische Datenbank ZZF mit dem Wurzelknoten KNA1, die mit der Suchhilfe DEBI verknüpft ist. Das Selektions-Include DBZZFSEL enthalte folgende Zeilen:

SELECT-OPTIONS skunnr FOR kna1-kunnr.
PARAMETERS p_sp AS SEARCH PATTERN FOR NODE kna1.

Im Quelltext des Datenbankprogramms erscheinen nun weitere Kommentarzeilen, die darauf hinweisen, dass folgende Tabellen und Felder angelegt wurden:

  • Interne Tabelle zzf_sp gemäß folgender Deklaration:
DATA: BEGIN OF zzf_sp OCCURS 1000,
         kunnr             LIKE kna1-kunnr,
       END   OF zzf_sp.
Die Suchhilfeabgrenzungen des Benutzers erzeugen in den versorgten Ausgabefeldern der Suchhilfe eine Trefferliste. Diese Trefferliste steht dem Datenbankprogramm in der Tabelle zzf_spg.
  • Interne Tabelle sp_fields gemäß folgender Deklaration:
DATA: BEGIN OF sp_fields OCCURS 10.
        INCLUDE STRUCTURE rsspfields.
DATA: END   OF sp_fields.
Wenn der logischen Datenbank eine Sammelsuchhilfe zugeordnet ist, versorgt eine elementare Suchhilfe in der Regel nur einen Teil der Ausgabefelder der Sammelsuchhilfe. Welche Felder versorgt wurden, kann das Programm der Tabelle sp_fields entnehmen. Die Komponente supplied ist nicht initial genau dann, wenn dem in fieldname stehendem Feld ein Wert durch die Suchhilfe zugewiesen wurde.
  • Interne Tabelle sp_tables gemäß folgender Deklaration:
DATA: BEGIN OF sp_tables OCCURS 10.
        INCLUDE STRUCTURE rssptabs.
DATA: END   OF sp_tables.
Falls die Suchhilfe Felder aus verschiedenen Tabellen enthält, kann das Programm der Tabelle sp_tables entnehmen, welche Tabellen durch die Suchhilfe berücksichtigt wurden. Die Komponente supplied ist nicht initial, wenn dem in tablename stehenden Tabelle ein Wert durch die Suchhilfe zugewiesen wurde.
  • Zeichenartiges Datenobjekt sp_events der Länge 200.
Jedes Zeichen in sp_tables steht für einen Knoten in der Struktur der logischen Datenbank (das erste Zeichen steht beispielsweise für den Wurzelknoten). Der Inhalt der einzelnen Positionen hat folgende Bedeutung für den entsprechenden Knoten:
  • "X2: Knoten wird im Anwendungsprogramm mit der Anweisung GET angesprochen und die Suchhilfe hat Werte für die Schlüsselfelder an sp_ldb zugewiesen.

  • "R": Knoten wird im Anwendungsprogramm mit der Anweisung GET angesprochen, aber die Suchhilfe hat keine Werte für die Schlüsselfelder an sp_ldb zugewiesen.

  • "M": Knoten wird im Anwendungsprogramm nicht mit GET angesprochen, aber die Suchhilfe hat Werte für die Schlüsselfelder an sp_ldb zugewiesen.

  • " ": Tabelle wird im Anwendungsprogramm nicht mit GET angesprochen und die Suchhilfe hat keine Werte für die Schlüsselfelder an sp_ldb zugewiesen.

Wenn der Benutzer auf dem Selektionsbild in der Suchhilfe nach allen Lieferanten abgrenzt, deren Sortierfeld mit "ABC" beginnt, und dies für die Kundennummern 17, 125 und 230 zutrifft, sind obige Tabellen wie folgt gefüllt:

zzf_sp

kunnr
17
125
230

sp_fields

fieldname supplied
KUNNR X

sp_tables

tablename supplied
KNA1 X

Das auskommentierte Unterprogramm put_zzf_sp kann nun zum Beispiel wie folgt modifiziert und aktiviert werden, um die Datensätze aus der internen Tabelle zzf_sp zu verwenden:

FORM put_zzf_sp.
  CASE sp_events(1).
    WHEN 'X' OR 'M'.
      PERFORM put_kna1_Ssp
    WHEN OTHERS.
      PERFORM put_kna1.
  ENDCASE.
ENDFORM.
FORM put_kna1_sp.
  SELECT * FROM kna1 FOR ALL ENTRIES IN zzf_sp
                     WHERE kunnr = zzf_sp_kunnr.
    PUT kna1.
  ENDSELECT.
ENDFORM.

Über die Tabelle get_events wird überprüft, ob das Anwendungsprogramm eine GET-Anweisung für KNA1 enthält oder ob die Suchhilfe entsprechende Werte für Schlüsselfelder zugewiesen hat. Falls dem so ist, wird put_kna1_sp aufgerufen, wo eine SELECT-Schleife über KNA1 ausgeführt wird, in der die Zeilen gelesen werden, die den Schlüsselfeldern in zzf_sp entsprechen. In der SELECT-Schleife wird die Anweisung PUT kna1 ausgeführt. Eine andere Möglichkeit wäre:

FORM put_zzf_sp.
  IF sp_everts(1) NE abap_false
    CLEAR skunnr.
    REFRESH skunnr.
    skunnr-sign = 'I'.
    skunnr-option = 'EQ'.
    LOOP AT zzf_sp.
      skunnt-low = zzf_sp-kunnr.
      APPEND skunnr TO skunnr.
    ENDLOOP.
  ENDIF.
  READ TABLE GET_EVENTS WITH KEY 'KNA1'.
  IF sy-subrc = 0 AND get_events-kind IS NOT INITIAL.
    PERFORM put_kunnr.
  ENDIF.
ENDFORM.

Hier wird die Selektionstabelle skunnr für KNA1 gelöscht und mit den Werten aus zzf_sp gefüllt. Über die Tabelle get_events wird überprüft, ob das Anwendungsprogramm eine GET-Anweisung für KNA1 enthält. Falls dem so ist, wird das Unterprogramm put_kunnr aufgerufen. Dort werden die Daten aus KNA1 entsprechend der Selektionstabelle skunnr gelesen und PUT kna1 ausgeführt.






Fill RESBD Structure from EBP Component Structure   PERFORM Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 11954 Date: 20240523 Time: 152032     sap01-206 ( 231 ms )