Funktion Liest Werte aus einer Datenbanktabelle in ein Objekt oder einen Ordner
Beispiel myrc =
s10databaseselect(
    exporting
condition = mycondition
    changing
folder = mycustomers ).
Aufruf data:
  mycondition type string,
  myappend type boolean,
  mymaxrows type i,
  myorderby type string,
  myfolder type any,
  myrc type boolean.

myrc =
  s10databaseselect(
    exporting
      condition = mycondition
      append = myappend
      maxrows = mymaxrows
      orderby = myorderby
    changing
      folder = myfolder ).
Parameter
Name Typ Bedeutung
condition string
SQL 'where' Klausel
append boolean
'X' = Zeilen an den Ordner anhängen
dbtablename string
Überschreibt den in der Klasse angegebenen Tabellennamen. Auch ein Join mehrerer Tabellen ist möglich.
fieldlist string
Kommagetrennte Liste der zu lesenden Datenbankfelder (Default:alle)
maxrows i
Maximale Zeilenzahl
orderby string
Kommagetrennte Datenbankfelder mit ...- für absteigend
distinct boolean
'X' = mehrfache Wertesätze nur einmal in Resultatmenge
folder any
Ordner (optional).
rc boolean
'X' = SQL-Anweisung ausgeführt
Beschreibung Der Parameter "condition" ist der einzige obligatorische Parameter. Er bestimmt, welche Zeilen aus der Datenbank gelesen werden, d.h. aus ihm ergibt sich die where-Bedingung der Select-Anweisung. Das Format ist identisch mit dem Format der where-Bedingung der ABAP Select-Anweisung mit folgendem Zusatz:

Alle Ausdrücke @XXXXX innerhalb von "condition", wobei XXXXX der Name eines Klassenattributs ist, werden durch den jeweiligen aktuellen Attributwert ersetzt. Beispiel:

s10databaseselect|LAND1 @LAND1 | )  

Wenn das Attribut LAND1 den Wert "CA" hat, wird als where-Bedingung LAND1 = 'CA' eingesetzt. Bitte beachten, dass die Apostroph-Zeichen vor und nach dem Wert hierbei automatisch ergänzt werden.

Der Attributname kann in Gross- oder Kleinbuchstaben angegeben werden, also z.B. auch

s10databaseselect|LAND1 @land1 | )  

oder, da in der ABAP-Select-Anweisung die Spaltennamen auch klein geschrieben werden können,

s10databaseselect|land1 @land1 | )  

Je nachdem, ob der Parameter "folder" angeben ist oder nicht, arbeitet s10databaseselect( ) unterschiedlich. Falls "folder" angegeben ist, muss eine Tabelle übergeben werden, bei der jede Zeile aus einer Objektreferenz zu einem /s10/any Objekt besteht. Zusätzlich muss in der Klasse der Folderobjekte ein Bezug zu einer Datenbanktabelle durch Definition einer Konstanten "dbtablename" hergestellt sein. Beispiel:

class db_kna1 definition inheriting from /s10/any.

public section.

constants:
   
dbtablename type string value 'kna1'

s10databaseselect( ) liest alle Zeilen der angegebenen Datenbanktabelle, welche die Bedingung "condition" erfüllen, und daraus die Tabellenspalten, zu denen ein gleichnamiges Attribut in der Klasse der Folderobjekte existiert.

Bei einem leeren String als "condition" werden sämtliche Zeilen der Datenbanktabelle zurückgeliefert.

Der Parameter "orderby" wird als gewünschte Sortierung an das Datenbanksystem übermittelt. Ebenso wird die gewünschte maximale Anzahl zu lesender Zeilen über den Parameter "maxrows" gesetzt. Beispiel:

data:
      tabkna1 
type table of ref to db_kna1.
...

s10databaseselect
      exporting
 
           
condition condition 
           
maxrows maxrows 
           
orderby 'land1,kunnr' 
     changing
 
            folder
 tabkna1 ).

Bei maxrows=1 würde hier der Kunde mit niedrigstem Wert für den Länderschlüssel und darin mit niedrigster Kundennummer zurückgeliefert.

Der Rückgabewert von s10databaseselect() bei Angabe des "folder"-Parameters ist auch im Fall, dass keine Zeilen selektiert wurden, abap_true ('X'). Bei syntaktischen Fehlern wie einem ungültigen Spaltennamen erfolgt ein Abbruch. Beispiel (falscher Spaltenname "ORT1"):

Falls der "folder" Parameter nicht angegeben wurde, arbeitet s10databaseselect() ganz ähnlich wie s10databaseread(), nur können wir bei s10databaseselect() eine explizite where-Bedingung für den Zugriff mitgeben, während sich die Bedingung bei s10databaseread() automatisch aus den Schlüsselfeldern der Tabelle ergibt.

Falls eine passende Tabellenzeile gefunden wurde, werden alle gleichnamigen Attribute aus der Datenbank mit den gelesenen Werten besetzt und der Wert abap_true ('X') zurückgeliefert. Andernfalls wird abap_false (' ') zurückgeliefert und es findet keine Änderung von Attributwerten statt.

Die Parameter "maxrows" und "append" werden im Fall des Einzelsatzzugriffs (kein "folder" angegeben) ignoriert. Dagegen wird "orderby" durch das Datenbanksystem berücksichtigt, d.h. es wird nicht die Resultatmenge sortiert, was ja bei einer einzigen Zeile wenig Sinn ergeben würde, sondern bei der Ermittlung der zu lesenden Zeile wird bereits die gewünschte Sortierung beachtet.

Komponente S10 Framework