Show TOC Anfang des Inhaltsbereichs

Hintergrunddokumentation Datenbindung  Dokument im Navigationsbaum lokalisieren

Um Ihnen die Programmierung mit dem MVC Design zu erleichtern, stellt Ihnen das Framework für das Model einer Anwendung eine Basisklasse CL_BSP_MODEL zur Verfügung, die Sie als vererbende Klasse für Ihre eigene Model-Klasse verwenden. Die Model-Klasse stellt den Datenkontext Ihrer Anwendung dar und enthält somit eine Kopie (oder Referenzen auf die Daten) der für den View relevanten Daten aus dem Datenbank-Modell.

Die Model-Klasse stellt zur Verfügung:

·         die Daten, die für die Views verwendet werden, mit den entsprechenden Typ- und Data-Dictionary-Informationen

·         Eingabekonvertierungen

·         Informationen, zu welchen Daten Eingabefehler aufgetreten sind

Ein Controller kann eine Model-Klasse oder auch mehrere Model-Klassen instantiieren (siehe auch Aufruf der Model-Klasse durch den Controller). Der Controller hält sich zur Laufzeit eine Liste aller Modell-Instanzen, analog zur Liste der Unter-Controller.

Der Controller vergibt eindeutige Ids an jede Model-Instanz.

Hinweis

Wenn Sie das MVC Design Pattern verwenden, besteht keinerlei Notwendigkeit, die Applikationsklasse einzusetzen. Anstelle der bei rein seitenbasierten BSP-Applikationen üblichen Applikationsklasse verwenden Sie im MVC-Umfeld Controller und Model-Klassen.

Die Datenbindung ist insbesondere bei den HTMLB-Extension-Elementen inputField und label von Bedeutung (siehe auch Dokumentation zu diesen Elementen im System). Außerdem ist sie für die HTMLB-Elemente dropdownListBox, radioButtonGroup, checkbox, textEdit und tableView implementiert.

Eine Model-Klasse kann entweder ganz einfach gestaltet sein oder aber für komplexere Anwendungsfälle ausgeprägt sein.

Einfache Model-Klasse

Die Datenbindung ist insbesondere für die Wertübergabe von Ein- und Ausgabedaten nützlich. Sie fügen die von dem View benötigten Daten in Form von Attributen Ihrer Model-Klasse hinzu. Diese Attribute sind alle vom Sichtbarkeitsbereich public und können Folgendes sein:

·         einfache Variablen

·         Strukturen

·         Tabellen

Im einfachsten Fall besitzt die Model-Klasse lediglich diese Attribute und kann somit im Rahmen einer BSP-Applikation sehr leicht für die Datenbindung eingesetzt werden.

Eine solche ganz einfache Model-Klasse bietet die folgende Funktionalität:

·         Der Controller kann eine Model-Instanz anlegen und die Attribute initialisieren, da sie öffentliche Attribute sind.

·         Der Controller übergibt eine Referenz auf die Model-Instanz an den View.

·         Im View wird die Datenbindung zum Model für jedes View-Element über einen Pfad-Ausdruck (//…) angegeben.

Beispiel

Beispiel:

In einer BSP-Applikation gibt es ein über HTMLB realisiertes Eingabefeld, in das der Benutzer Eingaben schreiben kann.
Als Seitenattribut sei model definiert. Dann kann für das Eingabefeld geschrieben werden:
<htmlb inputField … value=”//model/<Attribut>”
Dadurch wird erreicht, dass der Inhalt von value an das entsprechende Attribut der Model-Klasse gebunden wird.

Der Verarbeitungsablauf ist nun folgendermaßen:

i.         Dem Inhalt des Attributs wird über die obige Anweisung der Wert des Eingabefeldes zugewiesen.

ii.       Dabei wird die ID aus dem Model generiert.

iii.      Außerdem werden zusätzliche Eigenschaften generiert, z.B. ob Festwerte existieren.

iv.      Beim nächsten Request wird die Benutzereingabe in die Model-Klasse übernommen.

v.        Datenkonvertierungen inklusive Dictionary-Anbindung (z.B. Konvertierungsexits) werden von der Basis-Model-Klasse automatisch durchgeführt.

Im Standardfall wird, falls für ein Feld im Data Dictionary ein Konvertierungsexit besteht, dieser Konvertierungsexit aufgerufen. Alle Daten, die in der Data-Dictionary-Struktur für das Feld enthalten sind, stehen zur Verfügung. Wenn jedoch eigene Setter- /Getter-Methoden (siehe nächster Abschnitt) geschrieben werden, kann der Konvertierungsexit ausgeschaltet werden.

Bei Bedarf können Sie auch Ihrer Model-Klasse eigene Methoden für die weitere Bearbeitung der Attribute hinzufügen.

Komplexe Model-Klasse

Es kann vorkommen, dass einfache Model-Klassen nicht ausreichen. Dies ist z.B. dann der Fall, wenn mit generischen Daten gearbeitet wird oder wenn besondere Methoden zum Setzen (SET) und Holen (GET) von Attributen benötigt werden. Also können Sie über diese Methoden eigene Implementierungen festlegen, die für Ihre spezifische Anwendung wichtig sind.

Für derartige Anwendungsfälle gibt es auf der Basisklasse Kopiervorlagen für Setter- und Getter-Methoden: _SET_<Attribut> und _GET_<Attribut> .  Diese Vorlagen beginnen alle mit _. Die Namenskonventionen für die eigentlichen Methoden sind folgendermaßen:

Syntax

Namenskonventionen für Setter-Methoden:

SET_<Attribut> für ein Feld
SET_S_<Attribut>
für eine Struktur
SET_T_<Attribut>
für eine Tabelle

 

Syntax

Namenskonventionen für Getter-Methoden:

GET_<Attribut> für ein Feld
GET_S_<Attribut>
für eine Struktur
GET_T_<Attribut>
für eine Tabelle

Beispiel

Beispiel für eine Implementierung einer Getter-Methode für Strukturfelder/Strukturattribute:

method GET_S_FLIGHT .
field-symbols: <l_comp> type any.
  assign component component of structure flight to <l_comp>.
  value = <l_comp>.
  if component eq 'CARRID'.
    translate value to lower case.
  endif.
  if component eq 'CONNID'.
    shift value left deleting leading '0'.
  
endif.
endmethod.

Hier wird durch das ABAP-Schlüsselwort assign component die Strukturkomponente component des strukturierten Feldes flight (das den Bezugstyp sflight hat) dem Feldsymbol <l_comp> zugewiesen. Der Wert von <l_comp> wird folgendermaßen ausgegeben: Zeigt die Strukturkomponente component auf eine Fluggesellschaft (CARRID), dann wird der Name der Fluggesellschaft in Kleinbuchstaben übersetzt. Zeigt dagegen die Strukturkomponente component auf eine Einzelflugverbindung (CONNID), dann werden eventuelle führende Nullen gelöscht.

Sobald eine Setter- oder eine Getter-Methode gesetzt wurde, kommt sie automatisch zum Einsatz.

Aufgrund der Namensgleichheit ist die Datenbindung automatisch verfügbar. In der Methode DO_HANDLE_DATA (siehe auch Verarbeitungsablauf) der Klasse CL_BSP_CONTROLLER2 werden die Daten der Models automatisch aus den Form-Feldern gefüllt.

Die Pfadangaben für die Model-Daten haben folgende Syntax:

·         einfache Feld-Attribute

value=”//<Feldname>”

·         Struktur-Attribute

value=”//<Strukturname>.<Feldname>”

·         Tabellen-Attribute

value=”//<Tabellenname>[<Zeilenindex>].<Feldname>”

 

Ende des Inhaltsbereichs