Entwicklung von Web-Dynpro- Anwendungen

51
103 Web-Dynpro-Anwendungen repräsentieren die Sicht für einen Benutzer auf eine oder mehrere Web-Dynpro-Compon- ents. Sie werden in diesem Kapitel lernen, wie Web-Dynpro- Anwendungen entwickelt werden und welche verschiedenen Aspekte Sie dabei zur Verwendung bringen können. 3 Entwicklung von Web-Dynpro- Anwendungen Web-Dynpro – Wissensvertiefung und Erweiterung In diesem Kapitel werden Sie eine Web-Dynpro-Anwendung entwi- ckeln, in der Sie das bis dato erarbeitete Wissen einsetzen können. Zusätzlich erhalten Sie einen tieferen Einblick in die Programmie- rung des Contexts, von View-Layouts und der Container, in die Ver- wendung von wichtigen UI-Elementen, Tabellen, Wertehilfen und Nachrichten sowie die Internationalisierung. Beispiel- Web-Dynpro- Anwendung Die unterschiedlichen Themen werden Schritt für Schritt in eine Web- Dynpro-Anwendung integriert, um Ihnen die praktische Anwendung der Theorie zu vermitteln. Dabei werden vier Ziele verfolgt: die Präsentation und Vermittlung von detailliertem Wissen über die Elemente der Web-Dynpro-Entwicklung die Vorgehensweise bei der Entwicklung und die Verwendung der präsentierten Techniken bei der Erstellung einer Web-Dynpro-An- wendung eine vollständige – aus Sicht einer funktionsfähigen Web-Dynpro- Anwendung – und integrierte Sammlung von Beispielen, die Sie für Ihre Entwicklungsprojekte als Vorlagen wiederverwenden können die Präsentation von Zusatzthemen, wie die Run Time Type Iden- tification (RTTI) oder Service-Aufrufe, die Ihnen das Leben erleich- tern Die Anwendung, die im Laufe dieses Kapitels entstehen wird, wurde Klassen-Browser getauft: Benutzer können in dieser Anwendung Such-

Transcript of Entwicklung von Web-Dynpro- Anwendungen

Page 1: Entwicklung von Web-Dynpro- Anwendungen

103

Web-Dynpro-Anwendungen repräsentieren die Sicht für einen Benutzer auf eine oder mehrere Web-Dynpro-Compon-ents. Sie werden in diesem Kapitel lernen, wie Web-Dynpro-Anwendungen entwickelt werden und welche verschiedenen Aspekte Sie dabei zur Verwendung bringen können.

3 Entwicklung von Web-Dynpro-Anwendungen

Web-Dynpro – Wissensvertiefung und Erweiterung

In diesem Kapitel werden Sie eine Web-Dynpro-Anwendung entwi-ckeln, in der Sie das bis dato erarbeitete Wissen einsetzen können.Zusätzlich erhalten Sie einen tieferen Einblick in die Programmie-rung des Contexts, von View-Layouts und der Container, in die Ver-wendung von wichtigen UI-Elementen, Tabellen, Wertehilfen undNachrichten sowie die Internationalisierung.

Beispiel-Web-Dynpro-Anwendung

Die unterschiedlichen Themen werden Schritt für Schritt in eine Web-Dynpro-Anwendung integriert, um Ihnen die praktische Anwendungder Theorie zu vermitteln. Dabei werden vier Ziele verfolgt:

� die Präsentation und Vermittlung von detailliertem Wissen überdie Elemente der Web-Dynpro-Entwicklung

� die Vorgehensweise bei der Entwicklung und die Verwendung derpräsentierten Techniken bei der Erstellung einer Web-Dynpro-An-wendung

� eine vollständige – aus Sicht einer funktionsfähigen Web-Dynpro-Anwendung – und integrierte Sammlung von Beispielen, die Siefür Ihre Entwicklungsprojekte als Vorlagen wiederverwendenkönnen

� die Präsentation von Zusatzthemen, wie die Run Time Type Iden-tification (RTTI) oder Service-Aufrufe, die Ihnen das Leben erleich-tern

Die Anwendung, die im Laufe dieses Kapitels entstehen wird, wurdeKlassen-Browser getauft: Benutzer können in dieser Anwendung Such-

1315.book Seite 103 Dienstag, 31. März 2009 11:16 11

Page 2: Entwicklung von Web-Dynpro- Anwendungen

104

Entwicklung von Web-Dynpro-Anwendungen3

kriterien für eine ABAP-Klasse eingeben. Falls die ABAP-Klasse gefun-den wird, werden die Beschreibung und die Methoden zur ABAP-Klasse angezeigt Die Darstellung der Methoden erfolgt einerseits übereine Baum- und andererseits über eine Tabellendarstellung.

Web-Dynpro-Werkzeugkasten

Wie Sie bereits erahnen können, erfordert die Realisierung dieser Web-Dynpro-Anwendung die Nutzung zahlreicher Techniken aus demWeb-Dynpro-Werkzeugkasten. Entsprechend sind die Abschnitte auf-gebaut: Begonnen wird mit der Programmierung des Contexts. Sie wer-den eine Web-Dynpro-Component anlegen und eine Context-Strukturdefinieren, danach werden Sie sich den Werkzeugen für die View-Ge-staltung und -Programmierung zuwenden. Dabei wird die Verwen-dung von Layouts und Containern betrachtet und eine Menge vonView-Elementen zur Gestaltung des View-Layouts benutzt.

3.1 Context-Programmierung

Wie Sie bereits gelernt haben, verfügt jeder Controller über einenContext, in dem die verwendeten Daten hierarchisch abgelegt sind.Die grundlegenden Elemente, die zur Strukturierung des Contextseingesetzt werden, sind Context-Knoten und Context-Attribute. In die-sem Abschnitt wird das bisher aufgebaute Wissen zur Erzeugung,Veränderung und Löschung von Daten im Context vertieft.

Zum Aufwärmen und Wiederholen des in den vorangegangenen Ka-piteln bereits Gelernten, legen Sie die Web-Dynpro-Component ZWDC_03_KLASSEN_BROWSER an. Diese Web-Dynpro-Component, die Sie alsLokales Objekt anlegen, wird im Laufe des Kapitels Stück für Stückausgebaut. Der Name des von Ihnen anzulegenden Views lautet V_MAIN_LAYOUT und der Name des Windows W_MAIN. Zusätzlich zu derWeb-Dynpro-Component legen Sie eine Web-Dynpro-Anwendungmit dem Namen ZWDC_03_KLASSEN_BROWSER_APP an. Sollten Sie mit

Fragestellungen

In diesem Kapitel werden die folgenden Themen besprochen:

� Context-Programmierung

� Layouts und Container

� Verwendung wichtiger View-Elemente

� Nachrichten und Internationalisierung

1315.book Seite 104 Dienstag, 31. März 2009 11:16 11

Page 3: Entwicklung von Web-Dynpro- Anwendungen

105

Context-Programmierung 3.1

dieser Aufgabe noch Schwierigkeiten haben, finden Sie in Abschnitt2.1, »Components und Anwendungen«, das benötigte Wissen.

Context-Struktur aufbauen

Für die Programmierung des Contexts werden noch Context-Struktu-ren benötigt, die Sie nun aufbauen werden. Dabei lernen Sie eine Al-ternative zum Aufbau der Context-Struktur kennen: die Definitionvon Context-Knoten über ABAP-Dictionary-Strukturtypen.

Context-Struktur mit Strukturtyp aufbauen

Erinnern Sie sich noch an die Einzelanlage von Context-Knoten undContext-Attributen in Abschnitt 2.4, »Context«? Dort wurde zuerstder Context-Knoten und dann jedes benötigte Context-Attribut zumContext-Knoten einzeln angelegt. Alternativ dazu können Sie folgen-dermaßen vorgehen:

1. Definieren Sie einen Strukturtyp im ABAP Dictionary mit den ge-wünschten Strukturkomponenten.

2. Legen Sie einen Context-Knoten im gewünschten Controller an,und verwenden Sie für die Typisierung den zuvor angelegtenStrukturtyp.

ABAP-Dictionary-Strukturtypen

Um mehrere skalare Variablen – das heißt einfache Datentypen, wie zumBeispiel Datum, Zeit und ganzzahlige Werte – zu einer Einheit zusammen-zufassen, werden in ABAP Strukturvariablen angeboten. Falls der Aufbau(der Typ) der Strukturvariable mehrfach benötigt wird, ist es möglich, imABAP Dictionary (Transaktion SE11) einen sogenannten Strukturtyp anzu-legen, der dann für die Typisierung von Strukturvariablen verwendet wer-den kann. Es gibt drei Arten von Strukturtypen im ABAP Dictionary; wel-che Art verwendet wird, hängt vom geplanten Einsatzgebiet desStrukturtyps ab:

� ABAP-Dictionary-StrukturABAP-Dictionary-Strukturen werden hauptsächlich für die Typisierungvon Variablen und Schnittstellenparametern angelegt.

� Transparente TabelleEine transparente Tabelle ist eine Datenbanktabelle, die im ABAP Dic-tionary definiert und dann in der Datenbank angelegt wird. Sie kann wieeine ABAP-Dictionary-Struktur für Typisierungen verwendet werden.

� ABAP-Dictionary-ViewHierbei handelt es sich um eine virtuelle Tabelle, die keine Daten ent-hält, sondern eine anwendungsorientierte Sicht auf eine oder mehrereABAP-Dictionary-Tabelle(n) ist.

Die Elemente des Strukturtyps werden als Felder oder Komponenten be-zeichnet.

1315.book Seite 105 Dienstag, 31. März 2009 11:16 11

Page 4: Entwicklung von Web-Dynpro- Anwendungen

106

Entwicklung von Web-Dynpro-Anwendungen3

Sehen Sie sich das beschriebene Vorgehen an einem Beispiel an. DemBenutzer soll ein Selektionsbild zur Suche von ABAP-Klassen angebo-ten werden. Der Benutzer muss den Namen der ABAP-Klasse ange-ben, die zu suchen ist. Falls die ABAP-Klasse gefunden wird, wird imSelektionsbild auch die Beschreibung der ABAP-Klasse angezeigt. Umdiese Anforderung realisieren zu können, müssen Sie, wenn Sie dembeschriebenen Vorgehen folgen, zuerst eine ABAP-Dictionary-Struk-tur für die Selektionskriterien im ABAP Dictionary anlegen:

Strukturtypanlegen

1. Wechseln Sie dazu mit der Transaktion SE11 in das Einstiegsbilddes ABAP Dictionarys.

2. Wie beschrieben, stehen mehrere Arten von Strukturtypen zurVerfügung. Da Sie den Strukturtyp ausschließlich zur Typisierungdes Knotens und von Variablen verwenden werden, wählen Sie alsStrukturtypart die Struktur. Selektieren Sie dazu den RadiobuttonDatentyp im ABAP-Dictionary-Einstiegsbild.

3. Geben Sie im Eingabefeld zum Radiobutton Datentyp den Namender Struktur an: ZST_03_WD_KLASSE_SEL_KRIT. Der Name beginntmit dem Buchstaben Z und liegt somit im Kundennamensraum.

4. Drücken Sie auf die Taste Anlegen, und setzen Sie im erscheinen-den Auswahldialog den Radiobutton Struktur. Quittieren Sie IhreEingabe mit einem Klick auf das grüne Häkchen.

5. Im Pflegebild der Struktur vergeben Sie eine passende Kurzbe-schreibung für die ABAP-Dictionary-Struktur, wie zum Beispiel»Klassen Selektionskriterien«.

Nun legen Sie die Komponenten der Struktur an. Als Komponentensind der Name und die Beschreibung einer ABAP-Klasse erforderlich:

� Name

� Komponente: NAME_KLASSE

� Komponententyp: SEOCLSNAME

� Beschreibung

� Komponente: BESCHR_KLASSE

� Komponententyp: SEODESCR

Datenelementermitteln

1. Um die Komponententypen zu ermitteln, wurde in diesem Bei-spiel das Einstiegsbild des Object Navigators (Transaktion SE24)analysiert. Dort steht das Eingabefeld für den Namen eines ABAP-Interface oder einer ABAP-Klasse zur Verfügung. Wenn Sie den

1315.book Seite 106 Dienstag, 31. März 2009 11:16 11

Page 5: Entwicklung von Web-Dynpro- Anwendungen

107

Context-Programmierung 3.1

Cursor in das Eingabefeld Objekttyp platzieren und auf die Taste(F1) drücken, erscheint die semantische Hilfe zum Eingabefeld.Drücken Sie nun auf die Taste Technische Information, erscheintdie technische Information zum Eingabefeld. In der Gruppe Feld-

Daten finden Sie im Anzeigefeld Datenelement den Namen desDatenelementes (SEOCLSNAME), das zur Typisierung des Eingabefel-des verwendet wurde.

Erweiterungs-kategorie

2. Für die Struktur ZST_03_WD_KLASSE_SEL_KRIT müssen Sie nochfestlegen, wie diese in Zukunft erweitert werden kann. Verwen-den Sie dazu den Menüpfad Zusätze � Erweiterungskategorie...

Setzen Sie im erscheinenden Auswahldialog den Radiobutton be-

liebig erweiterbar, und bestätigen Sie Ihre Eingabe über dieDrucktaste Übernehmen.

Aktivieren3. Wählen Sie die Struktur über die Drucktaste Aktivieren (Tasten-kombination (Strg) + (F3)) an. Das Ergebnis Ihrer bisherigen Ar-beit sehen Sie in Abbildung 3.1.

Damit haben Sie die ABAP-Dictionary-Struktur ZST_03_WD_KLASSE_SEL_KRIT vollständig angelegt und können diese in der Definition derContext-Struktur einsetzen. Zuvor gibt es jedoch noch eine Übungzur Festigung Ihres Wissens. Legen Sie eine ABAP-Dictionary-Struk-tur an, die für die Typisierung des Context-Knotens für die ABAP-Klassen-Methoden dient. Der Name der ABAP-Dictionary-Strukturlautet ZST_03_WD_KLASSE_METHODE. Die benötigten Komponentenund deren Typen finden Sie in Tabelle 3.1. Vergessen Sie nicht, dieErweiterungskategorie zu setzen und die Struktur zu aktivieren.

Abbildung 3.1 Struktur ZST_03_WD_KLASSE_SEL_KRIT im ABAP Dictionary

1315.book Seite 107 Dienstag, 31. März 2009 11:16 11

Page 6: Entwicklung von Web-Dynpro- Anwendungen

108

Entwicklung von Web-Dynpro-Anwendungen3

Context-Strukturdefinieren

Nun ist alles bereit, um die Context-Struktur in der Web-Dynpro-Component ZWDC_03_KLASSEN_BROWSER zu definieren. Wie bereits er-wähnt, benötigen Sie einen Context-Knoten, der die Daten vom Se-lektionsbild übernehmen und einen Knoten, der die gefundenen Me-thoden zu einer ABAP-Klasse aufnehmen kann.

Context-Knotenfür die Selektion

Begonnen wird mit dem Context-Knoten für die Selektionskriterien.Die Daten aus dem Selektions-View sollten auch dem Component-Controller zur Verfügung stehen, da die Zugriffe auf den Context, diespäter implementiert werden, alle vom Component-Controller aus-geführt werden. Das bedeutet, dass der Context-Knoten für die Selek-tion im Component-Controller angelegt und später durch Context-Mapping der Zugriff für andere Controller ermöglicht wird.

1. Wechseln Sie dazu in den Component-Controller-Context derWeb-Dynpro-Component ZWDC_03_KLASSEN_BROWSER, den Sie aufder Karteikarte Context im Component-Controller finden.

Knoten anlegen 2. Legen Sie dort den Context-Knoten KLASSEN_SEL_KRIT an: Überdas Kontextmenü auf dem Context-Wurzelknoten und den Menü-eintrag Anlegen � Knoten öffnet sich der Pflegedialog für denContext-Knoten (siehe Abbildung 3.2).

3. Geben Sie im Eingabefeld Knotenname den Namen des Context-Knotens KLASSEN_SEL_KRIT ein (�).

4. Nun kommt eine Neuerung! Geben Sie im Eingabefeld Dictionary-

Struktur den Namen der von Ihnen angelegten ABAP-Dictionary-Struktur für die Selektionskriterien ein: ZST_03_WD_KLASSE_SEL_KRIT (�). Damit legen Sie fest, aus welchem Strukturtyp die Con-text-Attribute zum Context-Knoten ermittelt werden sollen.

Komponente Komponententyp

NAME SEOCPDNAME

ART_ICON ICONNAME

IS_CLASS WDY_BOOLEAN

IS_INTERFACE WDY_BOOLEAN

IS_REDEFINED WDY_BOOLEAN

Tabelle 3.1 Komponenten und Komponententypen für die ABAP-Dictionary-Struktur ZST_03_WD_KLASSE_METHODE

1315.book Seite 108 Dienstag, 31. März 2009 11:16 11

Page 7: Entwicklung von Web-Dynpro- Anwendungen

109

Context-Programmierung 3.1

Abbildung 3.2 Anlegen des Context-Knotens KLASSEN_SEL_KRIT mithilfe einer ABAP-Dictionary-Struktur

Attribute hinzufügen

5. Kicken Sie auf Attribute aus Struktur hinzufügen, um die vonIhnen gewünschten Attribute auszuwählen (�). Es erscheint einAuswahldialog für die Komponenten der angegebenen Struktur.

6. Markieren Sie alle Komponenten, um diese in Attribute umzuwan-deln (�).

7. Bestätigen Sie zum Abschluss Ihre Selektion mit einem Klick aufdas grüne Häkchen.

Damit haben Sie einen Context-Knoten mit Context-Attributen ange-legt. Dieser Anlageweg wird in der Praxis sehr häufig eingesetzt, dadie über den Strukturtyp angelegten Context-Knoten Vorteile gegen-über einzeln angelegten Context-Attributen bieten, wie zum Beispielumgebungssensitive Eingabehilfen. In Abbildung 3.3 sehen Sie dasErgebnis Ihrer Mühen.

EigenschaftenWenn Sie sich, ebenfalls zur Wiederholung, einige der Eigenschaftendes Context-Knotens KLASSEN_SEL_KRIT ansehen, werden Sie feststel-len, dass von diesem Context-Knoten genau ein Context-Element an-gelegt wird. Dieses wird durch die Kardinalität 1..1 definiert (�).Zudem wird durch das Web-Dynpro-Framework die Initialisierung

Lead-Selection durchgeführt, da diese Eigenschaft selektiert ist (�).

1315.book Seite 109 Dienstag, 31. März 2009 11:16 11

Page 8: Entwicklung von Web-Dynpro- Anwendungen
Page 9: Entwicklung von Web-Dynpro- Anwendungen

111

Context-Programmierung 3.1

Startet der Benutzer die Web-Dynpro-Anwendung, soll ihm ein Vor-schlagswert für einen ABAP-Klassennamen im Selektionsbild ange-boten werden, zum Beispiel CL_GUI_ALV_GRID. Dafür stehen Ihnenprinzipiell zwei Möglichkeiten zur Verfügung: Default-Werte undProgrammierung.

Default-Wert eines Attributes

Sie belegen die Context-Eigenschaft Default-Wert des Context-At-tributes NAME_KLASSE mit dem Wert CL_GUI_ALV_GRID. Diese Vorge-hensweise dürfte Ihnen aus der ABAP-Programmierung bekanntsein, bei der es möglich ist, für die Deklaration einer Variablen überden VALUE-Zusatz zur DATA-Anweisung die Variable mit einem An-fangswert zu belegen. Wenn Sie die Anfangsbelegung in den Con-text-Eigenschaften des Context-Attributes NAME_KLASSE durchführen,sollte das Ergebnis (�) wie in Abbildung 3.4 aussehen.

Abbildung 3.4 Setzen des Default-Wertes eines Context-Attributes

Programmierung

Bei der Programmierung weisen Sie dem Context-Attribut NAME_KLASSE den Wert CL_GUI_ALV_GRID mithilfe der Context-Programmie-rung zu. Sehen Sie sich das prinzipielle Vorgehen zu dieser Möglich-keit genauer an.

Navigation in der Context-Hierarchie

Um auf das Context-Attribut NAME_KLASSE zugreifen zu können, müs-sen Sie gewissermaßen durch die Context-Hierarchie navigieren. DieNavigation beginnt beim Wurzelknoten CONTEXT. Von diesem ausge-

1315.book Seite 111 Dienstag, 31. März 2009 11:16 11

Page 10: Entwicklung von Web-Dynpro- Anwendungen

112

Entwicklung von Web-Dynpro-Anwendungen3

hend, navigieren Sie zum Unterknoten KLASSEN_SEL_KRIT, der dasAttribut NAME_KLASSE besitzt. Der Zugriff auf den Inhalt des Context-Attributes geschieht über das Element zum Context-Knoten (sieheAbschnitt 2.4, »Context«). Da die Eigenschaft Kardinalität des Con-text-Knotens KLASSEN_SEL_KRIT auf den Wert 1..1 gesetzt wurde, istgesichert, dass das Element zum Context-Knoten vorhanden ist.Haben Sie den Zugriff auf das Element, können Sie für das Context-Attribut NAME_KLASSE den Wert setzen. So weit zur Idee, jetzt folgtdie Theorie.

get_child_node( ) Das ABAP-Interface IF_WD_CONTEXT_NODE dient der Arbeit mit Con-text-Knoten, wie zum Beispiel dem Anlegen, Lesen, Ändern und Lö-schen der Elemente eines Knotens. In Tabelle 3.2 sehen Sie die wich-tigsten Methoden aus diesem Interface, die im Laufe diesesAbschnittes besprochen und verwendet werden.

Unter den Controller-Attributen zu jedem Controller finden Sie dasAttribut wd_context, das mit diesem ABAP-Interface typisiert ist. DieABAP-Interface-Methode get_child_node( ) aus eben diesem ABAP-

Methode Beschreibung

get_child_node( ) Referenz des Unterknotens ermitteln

get_element( ) Element aus der Knoten-Collection ermitteln

get_element_count( ) Anzahl der Elemente in der Knoten-Collection

get_static_attributes_table( ) alle Attribute aller Elemente in Form einer internen Tabelle

create_element( ) Element anlegen

bind_element( ) Element der Knoten-Collection hinzufü-gen

bind_structure( ) aus der Struktur ein Element in der Kno-ten-Collection erzeugen und hinzufügen

bind_table( ) aus einer internen Tabelle pro Eintrag ein Element in der Knoten-Collection erzeu-gen und hinzufügen

remove_element( ) ein Element aus der Knoten-Collection entfernen

Tabelle 3.2 Ausgewählte Methoden des ABAP-Interface IF_WD_CONTEXT_NODE

1315.book Seite 112 Dienstag, 31. März 2009 11:16 11

Page 11: Entwicklung von Web-Dynpro- Anwendungen

113

Context-Programmierung 3.1

Interface wird verwendet, um die Referenz auf einen Kind-Knoten zuermitteln. Das bedeutet, dass diese ABAP-Interface-Methode die Na-vigation in der Context-Hierarchie ermöglicht.

child_nodeEine Analyse der Schnittstelle zur Methode, die Sie in Abbildung 3.5sehen können, zeigt, dass der Returning-Parameter child_node vomTyp IF_WD_CONTEXT_NODE ist. (Falls Sie mit der Analyse der Schnittstelleeiner Methode nicht vertraut sind, finden Sie im folgenden Kasten»Analyse der Schnittstelle einer Methode« weitere Informationen.)

indexDarüber hinaus finden Sie den optionalen Importing-Parameterindex für die Bestimmung des Indexes des Elementes im übergeord-neten Knoten, zu dem die Knoteninstanz gehört. Falls Sie den Impor-ting-Parameter index nicht benutzen, wird die Lead-Selection desübergeordneten Knotens zum Ermitteln des Elementes verwendet.

Abbildung 3.5 Schnittstelle der Methode get_child_node( )

Analyse der Schnittstelle einer Methode

Die Methoden zu ABAP-Klassen oder ABAP-Interfaces besitzen Parame-ter, die sogenannten Formalparameter, die Daten vom Aufrufer überneh-men oder an den Aufrufer zurückgeben können (Aktualparameter). DieGesamtheit der Parameter wird als Schnittstelle oder Signatur einer Me-thode bezeichnet. Die Parameter werden in Gruppen (Arten) eingeteilt, jenach Verwendungszweck:

� Importing-ParameterÜber diese Parameter können Daten an die Methode übergeben wer-den.

� Exporting-ParameterÜber diese Parameter können Daten an den Aufrufer zurückgegebenwerden.

1315.book Seite 113 Dienstag, 31. März 2009 11:16 11

Page 12: Entwicklung von Web-Dynpro- Anwendungen

114

Entwicklung von Web-Dynpro-Anwendungen3

set_attribute( ) Das ABAP-Interface IF_WD_CONTEXT_ELEMENT ermöglicht das Lesen,Ändern und Setzen der Attributdaten eines Elementes. Tabelle 3.3zeigt die wichtigsten Methoden aus diesem Interface, die besprochenund verwendet werden.

Um zum Beispiel den Wert eines einzelnen Context-Attributes än-dern zu können, wird in diesem ABAP-Interface die Methode set_attribute( ) angeboten. Der Methode muss dazu der Name des Con-text-Attributes (Parameter name) und der neue Wert (Parametervalue) übergeben werden (siehe Abbildung 3.6).

� Changing-ParameterDiese Parameter bieten eine Kombination aus Importing- und Expor-ting-Parametern.

� Returning-ParameterDer Returning-Parameter ist ein Wert, der an den Aufrufer zurückgege-ben werden kann. Bei der Verwendung dieser Parameterart kann einefunktionale Methode definiert werden, die direkt in Ausdrücken aufge-rufen werden kann.

Um feststellen zu können, welche Parameter eine Methode anbietet undwie die Daten zu typisieren sind, die an die Parameter übergeben werden,wechseln Sie in den Class Builder (Transaktion SE24), dort auf eine ABAP-Klasse oder ein Interface und weiter auf die Registerkarte Methoden. Set-zen Sie den Fokus auf die gewünschte Methode, und drücken Sie auf dieTaste Parameter. Damit erhalten Sie eine Liste der Formalparameter mitParameterart und Parametertyp.

Methode Beschreibung

set_attribute( ) den Wert eines Attributes in einem Element ändern

set_static_attributes( ) den Wert der Attribute durch eine Struktur ändern

get_attribute( ) ein Attribut aus dem Element auslesen

get_static_attributes( ) alle Attribute aus dem Element auslesen

Tabelle 3.3 Ausgewählte Methoden des ABAP-Interface IF_WD_CONTEXT_ELEMENT

1315.book Seite 114 Dienstag, 31. März 2009 11:16 11

Page 13: Entwicklung von Web-Dynpro- Anwendungen

115

Context-Programmierung 3.1

Erproben Sie die Verwendung der erwähnten Methoden an einemBeispiel: Sie werden eine Methode entwickeln, um den Wert desContext-Attributes NAME_KLASSE aus dem Context-Knoten KLASSEN_SEL_KRIT zu setzen.

setctx_klassen_sel_krit( )

1. Wechseln Sie in den Component-Controller und dort auf die Re-gisterkarte Methoden.

2. Legen Sie die Methode setctx_klassen_sel_krit( ) mit dem Im-porting-Parameter is_value vom Typ ZST_03_WD_KLASSE_SEL_

KRIT an (siehe Abbildung 3.7).

Web-Dynpro-Code-Wizard

3. In dieser Methode implementieren Sie das Setzen des Context-At-tributes NAME_KLASSE. Wechseln Sie dazu in die Methode setctx_klassen_sel_krit( ).

4. Öffnen Sie den Web-Dynpro-Code-Wizard, und wechseln Sie aufdie Karteikarte Context. Wählen Sie das Context-Attribut NAME_KLASSE im Context-Knoten KLASSEN_SEL_KRIT im Feld Kno-

ten/Attribut und in der Gruppe Operation auf dem Context dieOption Setzen.

5. Bestätigen Sie Ihre Eingabe mit einem Klick auf das grüne Häk-chen. Ihr Ergebnis sollte Listing 3.1 (außer Variante 2) entspre-chen.

Abbildung 3.6 Schnittstelle der Methode set_attribute( )

Abbildung 3.7 Schnittstelle der Methode setctx_klassen_sel_krit( )

1315.book Seite 115 Dienstag, 31. März 2009 11:16 11

Page 14: Entwicklung von Web-Dynpro- Anwendungen

116

Entwicklung von Web-Dynpro-Anwendungen3

METHOD setctx_klassen_sel_krit .* Die KnotenreferenzDATA: lo_nd_klassen_sel_krit TYPE REF TO

if_wd_context_node,

* Die Elementreferenzlo_el_klassen_sel_krit TYPE REF TO

if_wd_context_element.

* Von <CONTEXT> zu <KLASSEN_SEL_KRIT> mit Lead-Selectionlo_nd_klassen_sel_krit = wd_context->get_child_node(

name = wd_this->wdctx_klassen_sel_krit ).

* Element via Lead-Selectionlo_el_klassen_sel_krit =

lo_nd_klassen_sel_krit->get_element( ).

* Behandlung keine Lead-SelectionIF lo_el_klassen_sel_krit IS INITIAL.

EXIT.ENDIF.

** Variante 1 – Einzeln *** Setze das Attributlo_el_klassen_sel_krit->set_attribute(

name = `NAME_KLASSE`value = is_value-name_klasse ).

** Variante 2 – Struktur ***lo_el_klassen_sel_krit->set_static_attributes(* static_attributes = is_value ).ENDMETHOD.

Listing 3.1 Ermitteln der Elementreferenz des Knotens KLASSEN_SEL_KRIT

Beschreibung Was haben Sie bis jetzt erreicht? Sie haben die Referenz auf den Un-terknoten KLASSEN_SEL_KRIT ermittelt und dabei die Methode get_child_node( ) genutzt. Des Weiteren haben Sie für das Element dieElementreferenz zu diesem Context-Knoten mit der Methode get_element( ) ausgelesen. Falls kein Element als Lead-Selection gesetztist, wird die Methode mit EXIT verlassen. Das Ändern des Attribut-wertes zum Attribut NAME_KLASSE wird mit der Methode set_attribute( ) aus dem ABAP-Interface IF_WD_CONTEXT_ELEMENT

durchgeführt.

set_static_attributes( )

Das einzelne Setzen von Attributen kann bei einer großen Anzahl vonAttributen sehr aufwendig sein und das Coding stark in die Länge zie-hen. Um die Veränderungen durch einen einzigen Aufruf an die Ele-mentreferenz übergeben zu können, existiert die Methode set_

1315.book Seite 116 Dienstag, 31. März 2009 11:16 11

Page 15: Entwicklung von Web-Dynpro- Anwendungen

117

Context-Programmierung 3.1

static_attributes( ) im ABAP-Interface IF_WD_CONTEXT_ELEMENT.Dieser Methode kann über den Formalparameter static_attributeseine Struktur mit den Attributwerten übergeben werden. In Listing3.1 wurde im Coding-Abschnitt Variante 2 dieser Aufruf eingefügt.

AufrufDamit die Initialisierung der Attribute vor der ersten Anzeige des Se-lektionsbildes ausgeführt wird, muss die Methode setctx_klassen_sel_krit( ) in der Methode wddoinit( ) des Component-Control-lers aufgerufen werden.

1. Um den Aufruf zu implementieren, wechseln Sie in die Methodewddoinit( ) und starten dort den Web-Dynpro-Code-Wizard(siehe Abbildung 3.8).

Web-Dynpro-Anweisungsmuster

2. Wechseln Sie dort auf den Karteireiter Allgemein, und wählen Siedie Option Methodenaufruf im aktuellen Controller aus.Geben Sie den Namen der Methode setctx_klassen_sel_krit( )ein, oder benutzen Sie die Eingabehilfe, um diese aufzurufen. Be-stätigen Sie Ihre Eingabe mit einem Klick auf das grüne Häkchen,um den Quelltext zu generieren.

3. In der Methode wddoinit( ) muss noch eine Struktur vom TypZST_03_WD_KLASSE_SEL_KRIT mit den aktuellen Werten belegt undan die Methode setctx_klassen_sel_krit( ) übergeben werden.Diese Schritte müssen Sie manuell ausführen. In Listing 3.2 sehenSie die vollständig implementierte Methode wddoinit( ).

METHOD wddoinit .DATA: ls_klassen_sel_krit TYPEwd_this->element_klassen_sel_krit.

* Aktuelle Daten setzenls_klassen_sel_krit-name_klasse = 'CL_GUI_ALV_GRID'.ls_klassen_sel_krit-beschr_klasse = 'ALV List Viewer'.

Abbildung 3.8 Anweisungsmuster zum Methodenaufruf

1315.book Seite 117 Dienstag, 31. März 2009 11:16 11

Page 16: Entwicklung von Web-Dynpro- Anwendungen

118

Entwicklung von Web-Dynpro-Anwendungen3

* Initialisierung der Selektionskriterienwd_this->setctx_klassen_sel_krit(

is_value = ls_klassen_sel_krit ).ENDMETHOD.

Listing 3.2 Aufruf der Initialisierung der Selektionskriterien

Web-Dynpro-Debugger

4. Den Test der Funktionalität können Sie mithilfe des Web-Dynpro-Debuggers durchführen, nachdem bisher keine Views zur Anzeigeder Daten angelegt wurden (siehe Abschnitt 8.2, »Debuggen vonWeb-Dynpro-Anwendungen«).

Damit haben Sie das Thema der Änderung von Attributwerten einesElementes abgeschlossen und sind für die Praxis gewappnet. Wiekönnen Sie jedoch die Attributwerte eines Elementes lesen?

3.1.2 Lesen von Attributwerten eines oder mehrerer Elemente

Drei Methoden Für das Lesen von Attributwerten aus einem Element werden unteranderen drei Methoden zur Verfügung gestellt, die in den folgendenAbschnitten noch näher besprochen werden:

� get_attribute( )

Diese Methode aus dem ABAP-Interface IF_WD_CONTEXT_ELEMENTermöglicht Ihnen die Ermittlung des Wertes für ein spezifischesAttribut, dessen Name Sie an die Methode übergeben. Falls derübergebene Name des Attributes nicht bekannt ist, wird eine Aus-nahme vom Typ CX_WD_CONTEXT geworfen.

� get_static_attributes( )

Diese Methode aus dem ABAP-Interface IF_WD_CONTEXT_ELEMENTliefert die Werte aller Attribute zu einem Element in einer Strukturzurück. Dabei kann sich die Übergabestruktur an die Methode be-züglich des Aufbaus des Formalparameters unterscheiden. In derImplementierung der Methode wird mittels der ABAP-AnweisungMOVE-CORRESPONDING die Übertragung der Werte durchgeführt.

� get_static_attributes_table( )

Diese Methode aus dem ABAP-Interface IF_WD_CONTEXT_NODE lie-fert die Werte aller Attribute aller Elemente in einer internen Ta-belle zurück.

1315.book Seite 118 Dienstag, 31. März 2009 11:16 11

Page 17: Entwicklung von Web-Dynpro- Anwendungen

119

Context-Programmierung 3.1

Die Entwicklung einer Methode zum Auslesen der Inhalte des Con-texts sollte damit grundsätzlich kein weiteres Problem darstellen. Umdie Web-Dynpro-Component ZWDC_03_KLASSEN_BROWSER weiterzu-entwickeln, benötigen Sie die Werte der Selektionskriterien aus demContext-Knoten KLASSEN_SEL_KRIT. Obwohl die Werte in den Attri-buten initialisiert wurden, kann es sein, dass der Benutzer diese ver-ändert hat – davon ist sogar auszugehen!

Methode get_attribute( )

getctx_klassen_sel_krit( )

Um das Auslesen des Context-Knotens zu kapseln, legen Sie die Me-thode getctx_klassen_sel_krit( ) im Component-Controller an.Diese Methode sollte die Werte der Selektionskriterien als Strukturzurückgeben. Die Schnittstelle der Methode getctx_klassen_sel_krit( ) besteht aus dem Returning-Parameter rs_value vom TypZST_03_WD_KLASSE_SEL_KRIT. Damit kann später ein funktionalerAufruf der Methode ausgeführt werden.

1. Legen Sie im Component-Controller die Methode GETCTX_

KLASSEN_SEL_KRIT an.

2. Definieren Sie die Schnittstelle der Methode (siehe Abbildung3.9):

� Parameter: rs_value

� DeklArt: Returning

� Bezugstyp: ZST_03_WD_KLASSE_SEL_KRIT

Abbildung 3.9 Schnittstelle der Methode getctx_klassen_sel_krit( )

3. Wechseln Sie in die Implementierung der Methode, und ermittelnSie die Werte zu den Context-Attributen für jedes Context-Attributeinzeln. Dazu rufen Sie den Web-Dynpro-Code-Wizard auf undverwenden die Registerkarte Context. Wählen Sie aus dem Con-text das Attribut NAME_KLASSE im Knoten KLASSEN_SEL_KRIT aus,

1315.book Seite 119 Dienstag, 31. März 2009 11:16 11

Page 18: Entwicklung von Web-Dynpro- Anwendungen

120

Entwicklung von Web-Dynpro-Anwendungen3

und setzen Sie die Option Operation auf dem Context auf denWert Auslesen (siehe Abbildung 3.10).

Beachten Sie den Aufbau des Pfades zum Context-Attribut. Dieserbesteht aus dem Namen des Knotens, einem Punkt und demNamen des Attributes. Dieser Aufbau wird in Kapitel 4, »Dynami-sche Web-Dynpro-Anwendungen«, noch benötigt.

Abbildung 3.10 Auslesen eines Attributes mit dem Web-Dynpro-Code-Wizard

4. Bestätigen Sie Ihre Eingabe über das grüne Häkchen, um denQuelltext zum Auslesen des Context-Attributes NAME_KLASSE ein-zufügen.

Schnittstelleversorgen

5. Um den Wert des Context-Attributes zu übernehmen, müssen Siedem Exporting-Parameter value der Methode get_attribute( )noch die Strukturkomponente rs_value-name_klasse übergeben.

Damit ist das Auslesen eines Context-Attributes aus der Lead-Selec-tion vollständig implementiert. Zur Übung können Sie noch das Aus-lesen des Context-Attributes BESCHR_KLASSE implementieren. In Lis-ting 3.3 finden Sie die relevanten Coding-Passagen für den Vergleichmit Ihrer Lösung.

** Variante 1: Einzeln *** Lesen des Attributes NAME_KLASSE aus dem Elementlo_el_klassen_sel_krit->get_attribute(

EXPORTINGname = `NAME_KLASSE`

IMPORTINGvalue = rs_value-name_klasse ).

Listing 3.3 Lesen der Werte für die Context-Attribute NAME_KLASSE und BESCHR_KLASSE mit der Methode get_attribute( )

1315.book Seite 120 Dienstag, 31. März 2009 11:16 11

Page 19: Entwicklung von Web-Dynpro- Anwendungen

121

Context-Programmierung 3.1

Sie werden jetzt möglicherweise überlegen, ob das Auslesen der Con-text-Attribute nicht kompakter realisiert werden kann, zum Beispieldurch das Lesen aller Attributwerte auf einmal. Eine gute Nachricht:Ja, das ist möglich – es wird im folgenden Abschnitt beschrieben.

Methode get_static_attributes( )

Die Methode GET_STATIC_ATTRIBUTES( ) aus dem ABAP-InterfaceIF_WD_CONTEXT_ELEMENT liefert alle Attribute zum Element in Formeiner Struktur über den Exporting-Parameter static_attributes anden Aufrufer zurück. In Listing 3.4 sehen Sie die Quelltext-Passage,die Sie alternativ zu den beiden get_attribute( )-Aufrufen verwen-den können.

* Variante 2 – Struktur *lo_el_klassen_sel_krit->get_static_attributes(

IMPORTINGstatic_attributes = rs_value ).

Listing 3.4 Verwendung der Methode get_static_attributes( ) in der Component-Controller Methode getctx_klassen_sel_krit( )

FehlermeldungFalls Sie die Methode im Debugger testen, wird unter Umständen fol-gende Fehlermeldung im Browser angezeigt:

Attribut <AttributName> konnte nicht gefunden werden.

Diese Meldung erscheint, falls der übergebene Name des Attributesbeim Aufruf der Methode get_attribute( ) nicht gefunden werdenkann. Dies könnte geschehen, wenn Sie einen falsch geschriebenenNamen für das Attribut übergeben. Zudem ist der Name des Attribu-tes in Großschreibung zu übergeben, da aufgrund von Perfor-manceaspekten in der Implementierung der Methode get_

attribute( ) keine Konvertierung auf Großschreibung durchgeführtwird.

Methode get_static_attributes_table( )

Bisher wurde das Lesen von Einzelattributwerten und allen Attribut-werten eines Elementes besprochen. Die Methode get_static_attributes_table( ) aus dem Interface IF_WD_CONTEXT_NODE bietetschließlich die Funktionalität, alle Attributwerte für alle Elementeeines Context-Knotens auszulesen!

1315.book Seite 121 Dienstag, 31. März 2009 11:16 11

Page 20: Entwicklung von Web-Dynpro- Anwendungen

122

Entwicklung von Web-Dynpro-Anwendungen3

Als Beispiel zur Veranschaulichung soll der Context-Knoten METHODENvollständig ausgelesen werden. Die METHODEN-Elemente, die Sie zumAuslesen noch anlegen werden, sollten alle Attribute in Form einerinternen Tabelle an den Aufrufer zurückliefern. Der Typ für diese in-terne Tabelle befindet sich im Interface des Component-Controllers.

Component-Controller-

Interface

Wenn Sie auf die Attribute des Component-Controllers wechselnund dort auf den Bezugstyp IF_COMPONENTCONTROLLER des Attributeswd_this doppelklicken, erscheint die in Abbildung 3.11 gezeigte De-finition des Component-Controller-Interface.

Abbildung 3.11 Interface IG_COMPONENTCONTROLLER

Tabellentypenim Component-

Controller-Interface

Der Name des Tabellentyps für den Context-Knoten METHODEN lautetelements_methoden und ist als Standardtabelle mit dem Zeilentypelement_methoden typisiert (�). Dieser wiederum ist mit dem Struk-turtyp ZST_03_WD_KLASSE_METHODE standardisiert, das heißt genaujenem Strukturtyp, der für die Definition des Context-KnotensMETHODEN verwendet wurde. Um den Tabellentyp bei der Typisierungder Methodenschnittstelle ansprechen zu können, muss der voll qua-lifizierte Name angegeben werden, das heißt ig_componentcontroller=>elements_methoden. Damit sind Sie für die Implementierung der Le-semethode gerüstet.

1315.book Seite 122 Dienstag, 31. März 2009 11:16 11

Page 21: Entwicklung von Web-Dynpro- Anwendungen

123

Context-Programmierung 3.1

1. Legen Sie die Component-Controller-Methode getctx_methoden( )an.

2. Definieren Sie für die Methode den Returning-Parameter rt_methoden mit dem Typ ig_componentcontroller=>elements_

methoden. In Abbildung 3.12 sehen Sie das Ergebnis der Typisie-rung der Schnittstelle.

Abbildung 3.12 Typisierung der Schnittstelle für getctx_methoden( )

Web-Dynpro-Code-Wizard und Tabellen-operationen

3. Die Implementierung der Methode führen Sie wieder mit der Un-terstützung des Web-Dynpro-Code-Wizards durch (siehe Abbil-dung 3.13): Öffnen Sie den Wizard, und wählen Sie als Wert fürdas Eingabefeld Knoten/Attribut den Context-Knoten METHODENaus. Bestimmen Sie für die Operation auf dem Context den WertAuslesen, und setzen Sie die Checkbox für das Feld als Tabellen-

operation.

Abbildung 3.13 Auslesen des Contexts mit Tabellenoperation

Quelltext erzeugen4. Bestätigen Sie Ihre Eingaben über das grüne Häkchen, um denQuelltext zu erzeugen (siehe Listing 3.5).

1315.book Seite 123 Dienstag, 31. März 2009 11:16 11

Page 22: Entwicklung von Web-Dynpro- Anwendungen

124

Entwicklung von Web-Dynpro-Anwendungen3

METHOD getctx_methoden .DATA lo_nd_methoden TYPE REF TO if_wd_context_node.

* Navigiere zum Knoten <METHODEN>lo_nd_methoden = wd_context->get_child_node(

name = wd_this->wdctx_methoden ).

* Liefere die Attribute der Elemente als Tabellelo_nd_methoden->get_static_attributes_table(

IMPORTINGtable = rt_methoden ).

ENDMETHOD.

Listing 3.5 Implementierung der Component-Controller-Methode getctx_methoden( )

Damit sind die Möglichkeiten zum Auslesen von Daten aus dem Con-text ausführlich besprochen. Woher kommen aber die Daten im Con-text? Ein Weg wurde bereits gezeigt: die manuelle Eingabe durch denBenutzer. Erforderlich ist jedoch auch die Möglichkeit, funktional dieDaten in den Context zu stellen. Das wird das Thema des folgendenAbschnitts sein.

3.1.3 Erzeugen von Context-Elementen

Neue Context-Elemente anlegen

Bisher wurde nur auf existierende Elemente zugegriffen und Datenaus den Attributen gelesen oder verändert. Wie können jedoch neueElemente zu einem Knoten angelegt werden? Zum Erzeugen von Ele-menten werden drei Methodenalternativen durch das Interface IF_WD_CONTEXT_NODE zur Verfügung gestellt:

� create_element( )

Diese Methode, in Kombination mit bind_element( ), ermöglichtIhnen, ein Element zu erzeugen, es mit Einzelwerten oder mit einerStruktur zu befüllen und der Knoten-Collection hinzuzufügen.

� bind_structure( )

Diese Methode ermöglicht Ihnen auf kompakte Art und Weise, einneues Element, basierend auf einer Struktur, in der Knoten-Collec-tion anzulegen.

� bind_table( )

Diese Methode ermöglicht Ihnen, eine interne Tabelle zum Erzeu-gen mehrerer Elemente in der Knoten-Collection zu verwenden.

Bei allen drei Alternativen haben Sie die Gelegenheit, festzulegen, obdie neuen Elemente oder das neue Element, die alten Elemente oder

1315.book Seite 124 Dienstag, 31. März 2009 11:16 11

Page 23: Entwicklung von Web-Dynpro- Anwendungen

125

Context-Programmierung 3.1

das alte Element ersetzt oder ergänzt werden. Um ein neues Elementzu einem Knoten anzulegen, muss zuerst die Referenz auf den betref-fenden Knoten ermittelt werden. Ein erneuter Blick auf Abschnitt 3.1.1,»Änderung von Attributwerten eines Elementes«, zahlt sich hier aus.

Methoden create_element( ) und bind_element( )

Sehen Sie sich die erste Möglichkeit an: die Verwendung der Metho-den create_element( ) und bind_element( ), um ein neues Elementzu erzeugen und in die Knoten-Collection einzufügen (siehe Abbil-dung 3.14). Zuerst muss ein neues Element angelegt (�), und dieDaten des Elementes müssen gesetzt werden (�). Im nächsten Schrittist das neue Element in die Knoten-Collection einzufügen (�).

create_element( )Um ein neues Element anzulegen, muss die Methode create_element( ) durch die ermittelte Knotenreferenz aufgerufen werden.Hierfür existiert keine Unterstützung durch den Web-Dynpro-Code-Wizard. Stattdessen verwenden Sie objektorientierte Anweisungs-muster, die Sie wie in der Programmierung mit ABAP Objects ver-wenden können (siehe Listing 3.6).

** Variante 1 *** Element über Knoten anlegenlo_el_methode = lo_nd_methoden->create_element( ).

* Element mit Struktur befüllenlo_el_methode->set_static_attributes(

static_attributes = is_methode ).

Listing 3.6 Anlegen des Elementes zum Knoten METHODEN und Befüllung mit der Methode set_static_attributes( )

Abbildung 3.14 Erzeugen eines neuen Elementes und Einfügen in die Knoten-Collection

METHODEN…Element 1

…Element 2

��

…Element neu �

create_element( )set_static_attributes( )

bind_element( )

1315.book Seite 125 Dienstag, 31. März 2009 11:16 11

Page 24: Entwicklung von Web-Dynpro- Anwendungen

126

Entwicklung von Web-Dynpro-Anwendungen3

Elementwertesetzen

Die Methode create_element( ) wird für den Knoten aufgerufen, indem das neue Element anzulegen ist. Sie liefert als Rückgabewerteine Referenz auf ein Objekt vom Typ IF_WD_CONTEXT_ELEMENT, dasheißt ein neues Element, das Sie noch übernehmen müssen, um dieAttributwerte setzen zu können. Um die Attributwerte des Elemen-tes zu setzen, können Sie entweder die Methode set_attribute( ),die Methode set_static_attributes( ) oder den Parameterstatic_attribute_values der Methode verwenden.

Dieses Element ist aber noch nicht Teil der Knoten-Collection. DasElement der Knoten-Collection hinzuzufügen wird die nächste Auf-gabe sein (siehe Listing 3.7).

* Element in Collection einfügenlo_nd_methoden->bind_element(

new_item = lo_el_methodeset_initial_elements = abap_false ).

Listing 3.7 Element für Knoten METHODEN an die Knoten-Collection anhängen

bind_element( ) Für das Hinzufügen eines Elementes steht die Methode bind_element( ) aus dem Interface IF_WD_CONTEXT_NODE bereit. Diese Me-thode enthält drei Parameter:

� new_item

Dieser Parameter dient zur Übergabe der Elementreferenz.

� set_initial_elements

Dieser Parameter dient zur Bestimmung des Einfügemodus.

� Falls dieser Parameter mit dem Wert ABAP_TRUE belegt wird, er-setzt dieses Element alle vorhandenen Elemente in der Knoten-Collection.

� Falls der Parameter mit dem Wert ABAP_FALSE versorgt wird,wird das neue Element zu der Knoten-Collection ergänzt, unddie vorhandenen Elemente bleiben erhalten. Hier ist natürlichdie Kardinalität des Context-Knotens zu beachten!

� index

Dieser Parameter dient zur Vorgabe einer Einfügeposition in derKnoten-Collection. Falls kein Index angegeben wird, wird das Ele-ment am Ende der Knoten-Collection eingefügt.

Damit haben Sie gesehen, wie ein Element angelegt und in die Kno-ten-Collection eingefügt wird. Doch das eher längliche Coding mutet

1315.book Seite 126 Dienstag, 31. März 2009 11:16 11

Page 25: Entwicklung von Web-Dynpro- Anwendungen

127

Context-Programmierung 3.1

etwas aufwendig an. Daher wird eine Implementierungsvariante be-trachtet, die die Aufgabe des Einfügens eines neuen Elementes effizi-enter umsetzt.

Methode bind_structure( )

Die Methode bind_structure( ) aus dem ABAP-Interface IF_WD_CONTEXT_NODE kombiniert das Anlegen eines neuen Elementes mit demSetzen der Attributwerte und dem Einfügen in die Knoten-Collection(siehe Abbildung 3.15, �). Dabei bietet die Methode bind_structure( )die gleichen Parameter wie die Methode bind_element( ).

Abbildung 3.15 Erzeugen eines neuen Elementes mit bind_structure( )

In Listing 3.8 ist die Verwendung der Methode bind_structure( ) alsAlternative zu der zuvor besprochenen Herangehensweise zu sehen.

** Variante 2 *** Element an Collection anhängenlo_nd_methoden->bind_structure(

new_item = is_methodenset_initial_elements = abap_false ).

Listing 3.8 Erzeugen eines neuen Elementes mit der Methode bind_structure( )

BeschreibungDie Methode bind_structure( ) erzeugt ein einzelnes neues Ele-ment in der Knoten-Collection. Falls nun mehrere Elemente zu erzeu-gen sind – zum Beispiel sollte jede Zeile einer internen Tabelle alsElement im Context-Knoten abgelegt werden –, müsste für jedes Ele-ment die Methode bind_structure( ) aufgerufen werden.

Methode bind_table( )

Das Erzeugen mehrerer Elemente kann natürlich kompakter mit derMethode bind_table( ) aus dem Interface IF_WD_CONTEXT_NODE um-gesetzt werden (siehe Abbildung 3.16, �). Zuerst wird es nötig sein,

METHODEN…Element 1

…Element 2

�…Element neu

bind_structure( )

1315.book Seite 127 Dienstag, 31. März 2009 11:16 11

Page 26: Entwicklung von Web-Dynpro- Anwendungen

128

Entwicklung von Web-Dynpro-Anwendungen3

eine interne Tabelle mit Daten zu befüllen. Im nächsten Schritt müs-sen die Daten der internen Tabelle als neue Elemente in die Knoten-Collection eingefügt werden.

Zur Veranschaulichung dieser Methode wird das Beispiel weiterent-wickelt. Sie werden diese Methode benutzen, um die Daten zu denMethoden einer ABAP-Klasse in den Context-Knoten METHODEN einzu-lagern. Dabei werden Sie insgesamt drei Component-Controller-Me-thoden mit unterschiedlichen Entwicklungsschwerpunkten erzeugen:

� is_klasse( )

Diese Methode überprüft, ob der Name, den der Benutzer im Se-lektionsbild eingegeben hat, dem Namen einer ABAP-Klasse ent-spricht. Die Anlage dieser Methode wird mit einem sogenanntenService-Aufruf realisiert.

� setctx_klassen_methoden( )

Diese Methode setzt die Daten der Methoden zur ABAP-Klasse imContext-Knoten METHODEN mit der Methode bind_table( ).

� getmodel_class_description( )

Diese Methode ermittelt ein Beschreibungsobjekt einer ABAP-Klasse mithilfe der sogenannten Run Time Type Identification(RTTI), die es zum Beispiel ermöglicht, während der Laufzeit Be-schreibungen von ABAP-Klassen zu ermitteln. Die Beschreibungbeinhaltet unter anderem die Methoden der ABAP-Klasse.

Component-Controller-

Methodeis_klasse( )

Die erste Methode, die Sie entwickeln werden, ist die Component-Controller-Methode is_klasse( ). Bei der Implementierung dieserMethode, die auch ein Beispiel für eine Modellanbindung darstellt,greifen Sie auf bereits vorhandene Implementierungen zurück, umso wenig eigenes Coding wie möglich produzieren zu müssen.

Abbildung 3.16 Elemente erzeugen mit der Methode bind_table( )

METHODEN…Element 1

…Element 2

Elemente neu

bind_table( )

…… …

…… …

1315.book Seite 128 Dienstag, 31. März 2009 11:16 11

Page 27: Entwicklung von Web-Dynpro- Anwendungen

129

Context-Programmierung 3.1

Service-Aufruf-Wizard

BeschreibungBei der Implementierung von Modellanbindungen werden Sie durchden sogenannten Service-Aufruf-Wizard unterstützt. Er dient dazu, in-nerhalb einer Web-Dynpro-Component einen vorhandenen Funkti-onsbaustein oder auch Methoden einer vorhandenen ABAP-Klasseaufzurufen. Mithilfe dieses Wizards werden automatisch alle benö-tigten Context-Elemente in einen von Ihnen ausgewählten Controllergeneriert. Außerdem erzeugt der Wizard automatisch in diesem Con-troller eine Methode, die den Funktionsbaustein aufruft und die Pa-rameterübergabe sicherstellt.

Nun sind Sie wieder gefordert. Sie werden die Methode is_klasse( )mithilfe dieses Wizards anlegen. In Abbildung 3.17 sehen Sie die Wi-zard-Schritte, die Sie bei der Anlage des Service-Aufrufes durchlaufenwerden.

Abbildung 3.17 Service-Aufruf-Wizard zur Erzeugung der Component-Controller-Methode is_klasse( )

1. Starten Sie den Wizard mithilfe des Kontextmenüeintrages Anle-

gen � Service-Aufruf der Web-Dynpro-Component in der Objekt-liste.

2. Nachdem der Startbildschirm mit den prinzipiellen Erläuterungenzum Wizard angezeigt wurde, erreichen Sie den nächsten Bild-schirm über die Drucktaste Weiter.

Start Ende

1315.book Seite 129 Dienstag, 31. März 2009 11:16 11

Page 28: Entwicklung von Web-Dynpro- Anwendungen

130

Entwicklung von Web-Dynpro-Anwendungen3

3. Im Schritt Controller auswählen (�) definieren Sie, wohin derService-Aufruf generiert wird. Wählen Sie den Punkt Existieren-

den Controller nutzen, und tragen Sie bei Controller denWert COMPONENTCONTROLLER ein. Über die Drucktaste Weiter gehtes zum nächsten Schritt.

Modellanbindungdurch Reuse-

Komponenten

4. Im Schritt Service-Typ auswählen (�) geht es darum, festzulegen,in welchem Reuse-Komponententyp die Funktionalität verschaltist. Es stehen die Optionen Funktionsbaustein, Methode einer

Klasse und Proxy eines Web Service zur Verfügung. Sie wählendie Option Funktionsbaustein, da die Funktionalität, die Sie wie-derverwenden werden, in einem Funktionsbaustein implemen-tiert ist, und wechseln über die Drucktaste Weiter zum nächstenSchritt.

5. Im Schritt Service auswählen (�) geben Sie den Namen des Funk-tionsbausteins an, der im Service gerufen werden soll. Der SAP-Standard-Funktionsbaustein zur Prüfung der Existenz einer ABAP-Klasse lautet SEO_CLASS_EXISTENCE_CHECK. Da Sie keinen RFC-Auf-ruf (Remote Function Call) des Funktionsbausteins durchführen,darf die Destination (Zielsystem) nicht gepflegt werden. Über dieDrucktaste Weiter geht es zum nächsten Schritt.

Schnittstellen-anbindung

6. Im Schritt Context anpassen (�) müssen Sie definieren, über wel-che Objektart die Schnittstellenparameter des Funktionsbausteinsrepräsentiert werden sollen. Drei Objektarten stehen zur Verfü-gung:

� Parameter der Controller Methode

� Controller Attribut

� Context-Knoten beziehungsweise Context-Attribut

Sie sollen die Methode is_klasse( ) so aufrufen können, dass Pa-rameter an die Methode übergeben und Ergebnisse wieder überParameter an den Aufrufer zurückgeliefert werden. Dazu wählenSie für clskey und not_active die Objektart Parameter der Me-

thode und wechseln über die Drucktaste Weiter zum nächstenSchritt.

Methodenname 7. Im Schritt Methodennamen angeben (�) vergeben Sie denNamen der Component-Controller-Methode. Geben Sie im Einga-befeld Methode den Namen is_klasse ein, und wechseln Sieüber die Drucktaste Weiter zum letzten Schritt.

1315.book Seite 130 Dienstag, 31. März 2009 11:16 11

Page 29: Entwicklung von Web-Dynpro- Anwendungen

131

Context-Programmierung 3.1

8. Im letzten Schritt Controller generieren werden die Compo-nent-Controller-Methode is_klasse( ) und der Context-KnotenSEO_CLASS_EXISTENCE erzeugt. Dazu müssen Sie noch auf die aufTaste Fertigstellen drücken.

Manuelle Anpassungen

Damit ist der Wizard abgeschlossen: Sie haben die Component-Con-troller-Methode is_klasse( ) zur Modellanbindung mithilfe desService-Aufruf-Wizards erzeugt. Dieser Wizard kann Ihnen viel Zeitbei der Erzeugung von Methoden sparen, wenn Sie vorhandeneReuse-Komponenten verwenden.

Um die Methode für das Beispiel verwenden zu können, haben Sienoch einige wenige Anpassungen durchzuführen. Hauptsächlich be-treffen die Änderungen die Typisierungen der Schnittstellenparame-ter, um diese mit den bisher benutzten Typen zu synchronisieren.

1. Löschen Sie den Context-Knoten SEO_CLASS_EXISTENCE. Er wirdnicht benötigt, da die Methode is_klasse( ) über ihre Schnitt-stelle und nicht über den Context kommuniziert.

2. Ändern Sie die Schnittstelle zur Methode is_klasse( ).

3. Ändern Sie den Typ des Importing-Parameters clskey aufSEOCLSNAME, den Sie in den Selektionskriterien verwendet haben.

4. Ändern Sie den Typ des Exporting-Parameters not_active aufWDY_BOOLEAN.

5. Fügen Sie den neuen Exporting-Parameter ed_exists vom TypWDY_BOOLEAN ein, der dem Aufrufer mitteilt, ob die ABAP-Klassetatsächlich existiert.

6. Ändern Sie die Implementierung der Methode is_klasse( ), umdie Veränderungen der Schnittstellenparameter zu berücksichti-gen. Betrachten Sie dazu Listing 3.9, in dem die zu implementie-renden Änderungen mit Beginn manuelle Ergänzung eingeleitetund durch Ende manuelle Ergänzung abgeschlossen werden.

METHOD is_klasse .* declarations for context navigation* declarations for parameters* Beginn manuelle ErgänzungDATA: ls_seoclskey TYPE seoclskey.* Ende manuelle Ergänzung

* get all involved child nodes* get input from context

1315.book Seite 131 Dienstag, 31. März 2009 11:16 11

Page 30: Entwicklung von Web-Dynpro- Anwendungen

132

Entwicklung von Web-Dynpro-Anwendungen3

* Beginn manuelle Ergänzungls_seoclskey-clsname = clskey.ed_exists = abap_false.* Ende manuelle Ergänzung

* the invocation – errors are always fatal !!!CALL FUNCTION 'SEO_CLASS_EXISTENCE_CHECK'

EXPORTINGclskey = ls_seoclskey "Manuelle Ergänzung

...

* error handlingCASE sy-subrc.* Beginn manuelle Ergänzung

WHEN 0. "Die Klasse existiert!ed_exists = abap_true.

* Ende manuelle Ergänzung

WHEN 1.

Listing 3.9 Manuelle Anpassungen in der Methode is_klasse( )

Damit haben Sie die Generierung und Implementierung der Compo-nent-Controller-Methode is_klasse( ) abgeschlossen. Diese wirdspäter zur Prüfung der Eingabe des Benutzers verwendet. Mit demWissen, das Sie über die Verwendung des Service-Aufruf-Wizards ge-sammelt haben, steht Ihnen nun der Weg offen, eine »saubere« Mo-dellanbindung realisieren zu können. Damit trennen Sie, so wie esder Model-View-Controller-Ansatz (siehe Abschnitt 1.1, »Model-View-Controller«) fordert, die Visualisierungsaspekte von den Mo-dellaspekten.

Zusatzübung Als zusätzliche Übung für die Verwendung des Service-Aufruf-Wizards legen Sie den neuen Service-Aufruf getmodel_klassen_information( ) im Component-Controller an, um die Beschreibungeiner ABAP-Klasse zu ermitteln. Nutzen Sie für Schritt (�) aus Abbil-dung 3.17 den Funktionsbaustein SEO_CLASS_READ. Bilden Sie danndie angebotenen Parameter auf Parameter der Methoden ab. Nachder Anlage der Component-Controller-Methode getmodel_klassen_information( ) ändern Sie die Typisierung des Exporting-Parametersclass auf VSEOCLASS und den Typ des Importing-Parameters clskeyauf SEOCLSNAME. Zudem löschen Sie den redundanten Context-KnotenSEO_CLASS_READ aus dem Component-Controller-Context.

Orientieren Sie sich bei der Implementierung der Methode an der Com-ponent-Controller-Methode is_klasse( ). Die Methode getmodel_

1315.book Seite 132 Dienstag, 31. März 2009 11:16 11

Page 31: Entwicklung von Web-Dynpro- Anwendungen

133

Context-Programmierung 3.1

klassen_information( ) werden Sie in Abschnitt 3.3.3, »Button«, zurErmittlung der Beschreibung einer ABAP-Klasse verwenden.

Die Methode is_klasse( ), die zuvor implementiert wurde, prüft,ob eine ABAP-Klasse existiert. Sofern dies der Fall ist, sollten dieNamen der Methoden der ABAP-Klasse im Context-Knoten METHODENals Elemente angelegt werden. Dies wird die Aufgabe der nächstenMethode sein, die Sie implementieren werden. Dabei werden Sie As-pekte der Run Time Type Identification, die Sie im folgenden Ab-schnitt genauer kennenlernen werden, und die Methode bind_table( ) nutzen.

1. Legen Sie die Component-Controller-Methode setctx_klassen_methoden( ) an, und definieren Sie den Importing-Referenzpara-meter io_classdescr vom Typ CL_ABAP_CLASSDESCR (siehe Abbil-dung 3.18).

Abbildung 3.18 Schnittstelle der Methode setctx_klassen_methoden( )

Die ABAP-Klasse CL_ABAP_CLASSDESCR ist ein Teil der Run TimeType Identification und wird als Typ für Klassenbeschreibungsob-jekte verwendet. Die ABAP-Klasse CL_ABAP_CLASSDESCR besitzt dasöffentliche Instanzattribut methods, in dem die Namen der Metho-den der ABAP-Klasse in einer internen Tabelle abgelegt sind.

Elemente erzeugen2. Wechseln Sie in die Implementierung der Methode. Dort sollenSie aus der internen Tabelle ir_classdescr->methods die Metho-den Zeile für Zeile auslesen und jede Methode als Element im Con-text-Knoten METHODEN ablegen. Wie würden Sie diese Anforderungimplementieren? Nehmen Sie sich etwas Zeit zum Überlegen,bevor Sie sich das Listing 3.10 genauer ansehen.

METHOD setctx_klassen_methoden .* Referenz auf den METHODEN-KnotenDATA lo_nd_methoden TYPE REF TO if_wd_context_node.

* Die interne Tabelle zum Knoten METHODENDATA lt_methoden TYPE wd_this->elements_methoden.

1315.book Seite 133 Dienstag, 31. März 2009 11:16 11

Page 32: Entwicklung von Web-Dynpro- Anwendungen

134

Entwicklung von Web-Dynpro-Anwendungen3

* Die Struktur eines Elementes METHODENDATA ls_methode TYPE wd_this->element_methoden.

* Eine Zeile aus den Modelldaten für die MethodenFIELD-SYMBOLS: <ls_modell_methode>

LIKE LINE OF io_classdescr->methods.

* Ermittlung der Knotenreferenz für METHODENlo_nd_methoden = wd_context->get_child_node(

name = wd_this->wdctx_methoden ).

* Transformation der Modelldaten in KnotendatenIF io_classdescr IS BOUND.

LOOP AT io_classdescr->methods ASSIGNING <ls_modell_methode>.

* Modelldaten in Context-Struktur transportierenMOVE-CORRESPONDING <ls_modell_methode> TO ls_methode.

* Icon für Methodenart setzenCASE abap_true.

WHEN ls_methode-is_class.ls_methode-art_icon = 'ICON_OO_CLASS_METHOD'.

WHEN ls_methode-is_interface.ls_methode-art_icon = 'ICON_OO_INTERFACE'.

WHEN OTHERS.ls_methode-art_icon = 'ICON_OO_INST_METHOD'.

ENDCASE.

* An die Context-Tabelle anhängenAPPEND ls_methode TO lt_methoden.

ENDLOOP.ENDIF.* Tabelle an den Knoten anhängenlo_nd_methoden->bind_table(

new_items = lt_methodenset_initial_elements = abap_true ).

ENDMETHOD.

Listing 3.10 Implementierung der Component-Controller-Methode setctx_klassen_methoden( )

Implementierungs-details

Die Implementierung der Methode beginnt mit der Ermittlung derReferenz des Context-Knotens METHODEN. Danach folgt das zeilen-weise Auslesen der internen Tabelle ir_classdescr->methods. DasFeldsymbol <ls_modell_methode> wurde verwendet, um Referenzenauf die Einträge der internen Tabelle zu ermitteln. Mit der Anwei-sung MOVE-CORRESPONDING werden die namensgleichen Modelldatenin die Datenstruktur für das Context-Element transportiert. Damitwird eine methodenlokale interne Tabelle aufgebaut, die dann mit-

1315.book Seite 134 Dienstag, 31. März 2009 11:16 11

Page 33: Entwicklung von Web-Dynpro- Anwendungen

135

Context-Programmierung 3.1

hilfe der Methode bind_table( ) an den Context-Knoten übergebenwird und dort alle Elemente anlegt.

Run Time Type Identification

Die Implementierung der nächsten Methode führt Sie in ein weitereszentrales Thema der Context-Programmierung ein, die Run TimeType Identification (RTTI). Die RTTI stellt die Mechanismen zur Ver-fügung, um während der Laufzeit Beschreibungen von Typen, dasheißt auch von ABAP-Klassen, zu ermitteln. Dies geschieht in Formvon Beschreibungsobjekten, die mit ABAP-Klassen aus der RTTI typi-siert sind. In Abbildung 3.19 sehen Sie die Vererbungshierarchie derRTTI-ABAP-Klassen.

Abbildung 3.19 Vererbungshierarchie der RTTI-ABAP-Klassen

CL_ABAP_TYPEDESCR

Die Klasse CL_ABAP_TYPEDESCR ist die Wurzelklasse der RTTI und er-möglicht während der Laufzeit die Erzeugung von Beschreibungen

Hinweis

War die Aufgabe schwer zu lösen? Erfahrungsgemäß ist diese Art der Auf-gabenstellung symptomatisch bei der Entwicklung von Web-Dynpro-An-wendungen, deshalb wurde sie Ihnen hier präsentiert. Die Implementie-rung einer Methode beginnt meistens mit dem Auslesen von Daten auseinem Context. Diese Daten dienen dann als Basis für die Geschäfts- oderVisualisierungslogik. Nach der Abarbeitung dieser Logiken werden dieneuen oder veränderten Daten am Ende der Methodenimplementierungin den Context zurückgestellt.

CL_ABAP_TYPEDESCR

CL_ABAP_DATADESCR CL_ABAP_OBJECTDESCR

CL_ABAP_COMPLEXDESCR

CL_ABAP_ELEMDESCR CL_ABAP_REFDESCR

CL_ABAP_STRUCTDESCR CL_ABAP_TABLEDESCR

CL_ABAP_CLASSDESCR CL_ABAP_INTFDESCR

1315.book Seite 135 Dienstag, 31. März 2009 11:16 11

Page 34: Entwicklung von Web-Dynpro- Anwendungen

136

Entwicklung von Web-Dynpro-Anwendungen3

der Laufzeitobjekte, wie zum Beispiel von ABAP-Klassen. Dabei spieltunter anderem die Methode describe_by_name( ) eine wichtigeRolle: Über diese Methode wird das Beschreibungsobjekt an den Auf-rufer zurückgeliefert. Die RTTI selbst ist ein Teil der Run Time TypeServices (RTTS), die auch noch die Run Time Type Creation (RTTC) um-fasst, die für diese Aufgabenstellungen aber nicht relevant ist unddaher auch nicht weiter behandelt wird.

Casting Wichtig zu wissen ist, dass die Methode describe_by_name( ) immerein Objekt vom Typ CL_ABAP_TYPEDESCR zurückliefert. Das bedeutetfür den Anwender, dass ein Downcast auf den entsprechenden Typdurchgeführt werden muss, um auf die interessanten Details, wiezum Beispiel die Liste der Methoden zu einer ABAP-Klasse, zugreifenzu können. Dazu muss eine Unterklasse verwendet werden, wie zumBeispiel die ABAP-Klasse CL_ABAP_CLASSDESCR, die in Abbildung 3.19farblich hervorgehoben ist.

Im Folgenden wird im Rahmen der Implementierung der Component-Controller-Methode getmodel_class_description( ) die Verwen-dung der RTTI genauer betrachtet. Diese Methode ermittelt aufgrundder Eingabe des Benutzers das Beschreibungsobjekt für eine ABAP-Klasse. Dabei ist natürlich zu prüfen, ob die ABAP-Klasse existiert, unddarüber hinaus müssen die Methoden aus dem Beschreibungsobjekt imContext abgelegt werden. Dafür werden Sie die beiden von Ihnen zuvorimplementierten Methoden is_klasse( ) und setctx_klassen_

methoden( ) in der neuen Methode getmodel_class_description( )

verwenden – ein schönes Beispiel für Wiederverwendung.

getmodel_class_description( )

1. Legen Sie die Methode getmodel_class_description( ) imComponent-Controller an. Definieren Sie für diese Methode diezwei Exporting-Parameter ed_exists und not_active, jeweilsvom Typ WDY_BOOLEAN (siehe Abbildung 3.20).

Abbildung 3.20 Schnittstelle der Methode getmodel_class_description( )

1315.book Seite 136 Dienstag, 31. März 2009 11:16 11

Page 35: Entwicklung von Web-Dynpro- Anwendungen

137

Context-Programmierung 3.1

Implementierung2. Wechseln Sie in die Implementierung der Methode. VersuchenSie, die Methode Schritt für Schritt zu implementieren. Falls Siedazu Denkanstöße benötigen, können Sie einen Blick auf Listing3.11 riskieren.

METHOD getmodel_class_description .* AusnahmeobjektDATA: lo_exception TYPE REF TO cx_root,

* Klassenbeschreibunglo_classdescr TYPE REF TO cl_abap_classdescr,

* Typbeschreibung der Klasselo_typedescr TYPE REF TO cl_abap_typedescr,

* Selektionskriterienlv_rs_value TYPE wd_this->element_klassen_sel_krit.

* Hole den Namen der Klasse aus dem Contextlv_rs_value = wd_this->getctx_klassen_sel_krit( ).

* Prüfung, ob der Name der Klasse gültig istTRY.

wd_this->is_klasse(EXPORTING

clskey = lv_rs_value-name_klasseIMPORTING

ed_exists = ed_existsnot_active = not_active ).

* Ermittlung der RTTI-BeschreibungCALL METHOD cl_abap_typedescr=>describe_by_nameEXPORTING

p_name = lv_rs_value-name_klasseRECEIVING

p_descr_ref = lo_typedescrEXCEPTIONS

type_not_found = 1OTHERS = 2.

* Klasse existiert nichtIF sy-subrc <> 0.ed_exists = abap_false.not_active = abap_true.

ENDIF.

* Downcast von CL_ABAP_TYPEDESCR auf CL_ABAP_CLASSDESCRlo_classdescr ?= lo_typedescr.

CATCH cx_root INTO lo_exception.* Klasse existiert nicht

ed_exists = abap_false.

1315.book Seite 137 Dienstag, 31. März 2009 11:16 11

Page 36: Entwicklung von Web-Dynpro- Anwendungen

138

Entwicklung von Web-Dynpro-Anwendungen3

not_active = abap_true.ENDTRY.* Ablage der Referenz in den Attributen

wd_this->go_klassen_beschreibung = lo_classdescr.

* Aufbereiten der Daten für den Contextwd_this->setctx_klassen_methoden(

io_classdescr = lo_classdescr ).ENDMETHOD.

Listing 3.11 Implementierung der Component-Controller-Methode getmodel_class_description( )

Beschreibung Die Methode sollte im ersten Schritt die Selektionskriterien aus demContext auslesen. Sie macht das aber nicht direkt, sondern verwen-det dazu die zuvor implementierte Methode getctx_klassen_sel_krit( ). Danach wird die Methode is_klasse( ) eingesetzt, um fest-zustellen, ob der Suchname dem Namen einer ABAP-Klasse ent-spricht.

War die Suche erfolgreich, wird die statische Methode cl_abap_typedescr=>describe_by_name( ) verwendet, um die Beschreibungzur Klasse zu ermitteln. Nachdem das Downcasting durchgeführtwurde, wird das Beschreibungsobjekt zur ABAP-Klasse in den Attri-buten des Component-Controllers abgelegt. Sie müssen dazu nochdas öffentliche Attribut go_klassen_beschreibung vom Typ CL_ABAP_CLASSDESCR definieren. Am Ende der Methode wird die Methodesetctx_klassen_methoden( ) benutzt, um die Daten im Context zusetzen. Damit sind die Implementierungen abgeschlossen und kön-nen zum Beispiel mithilfe des Web-Dynpro-Debuggers (sieheKapitel 8, »Tipps und Tricks aus der Praxis«) getestet werden.

Damit wurden die Möglichkeiten erläutert, um Elemente im Contextzu erzeugen. Der nächste Abschnitt rundet das Thema der Context-Programmierung ab: Es geht um das Löschen von Context-Elementen.

3.1.4 Löschen von Context-Elementen

remove_element( ) Für das Löschen von Elementen steht die Methode remove_

element( ) im Interface IF_WD_CONTEXT_NODE zur Verfügung (sieheAbbildung 3.21).

1315.book Seite 138 Dienstag, 31. März 2009 11:16 11

Page 37: Entwicklung von Web-Dynpro- Anwendungen

139

Context-Programmierung 3.1

Abbildung 3.21 Entfernen eines Elementes mit remove_element( )

Die Referenz des Elementes, das zu löschen ist, kann zum Beispielüber die Methode get_element( ) ermittelt werden (�). Der Me-thode remove_element( ) (�) muss über den Importing-Parameterelement die Referenz auf das Element übergeben werden, das zu ent-fernen ist. Des Weiteren steht der Parameter has_been_removed alsReturning-Parameter vom Typ ABAP_BOOL zur Verfügung, um festzu-stellen, ob das Element bereits existent war (ABAP_TRUE) oder nicht(ABAP_FALSE).

Mit dem Löschen von Context-Elementen ist das Thema der Context-Programmierung aus der Sicht einer Einführung in dieses Themavollständig besprochen. Damit sind Sie nun in der Lage, das Anlegenund Manipulieren von Context-Daten zu implementieren. Zusätzlichwurden die Run Time Type Identification als zentrales Hilfsmittel inder Context-Programmierung eingeführt und die praktische An-wendbarkeit beispielhaft beschrieben. Die wichtigste Methode, diebei der Verwendung der RTTI hauptsächlich zum Einsatz kommt, istcl_abap_typedescr=>describe_by_name( ).

Service-Aufruf-Wizard

Der Service-Aufruf-Wizard hat wertvolle Dienste bei der Realisierungder Modellanbindung geleistet. Sie haben gesehen, wie vorhandeneReuse-Komponenten einfach wiederverwendet und in der Beispiel-anwendung genutzt werden können.

Der nächste Abschnitt wird Ihnen die Definition und Programmie-rung von Views näherbringen. Dazu werden Layouts und Containersowie die wichtigsten View-Elemente detailliert dargestellt.

METHODEN…Element 1

…Element 2

�…

get_element( )

remove_element( )Element löschen

1315.book Seite 139 Dienstag, 31. März 2009 11:16 11

Page 38: Entwicklung von Web-Dynpro- Anwendungen

465

Index

_blank 2051 aus n 331, 337

A

ABAP Debugger � DebuggerABAP Dictionary 106

ABAP 260ABAP_INTFDESCR 260Datenelement 107DATS 349Erweiterungskategorie 107SEOCPDNAME 263SEOEXPOSE 332SFBECLNAME 350, 367Struktur 105, 106Strukturänderung 332Strukturkomponente 106Strukturtyp 105Suchhilfe 344, 345T100 212Text 211, 212TIMS 349transparente Tabelle 105View 105WDR_CONTEXT_ATTR_VALUE 335WDR_CONTEXT_ATTRIBUTE_INFO

256, 258WDR_NAME_VALUE_LIST 231WDR_TEXT_KEY 218WDUI_TRI_STATE 343

ABAP List Viewer � SAP List ViewerABAP Workbench 36ABAP-Anweisung

CATCH 229, 236CONCATENATE 207EXIT 116FIELD-SYMBOLS 368MESSAGE 221MESSAGE WITH 221MOVE-CORRESPONDING 118, 134RAISE 228SELECT-OPTIONS 364TRY 236

ACCWarnung 167

Advanced List Viewer � SAP List ViewerAggregation 141AJAX 19, 34, 420Aktion 41, 78

Anlage 57, 58, 78, 91Ereignisbehandler 78Standard 79, 238validierungsunabhängige 79, 239

Aktionsbehandler 163Aliasname 214ALV � SAP List ViewerAnimation � PerformanceAnpassungsanforderung 383Anpassungshierarchie 384Anweisungsmuster 125Anwendung

Eigenschaft 47Test 48

AnwendungskonfigurationSicherung 390Test 390URL-Parameter 391Zuordnung 391

Anwendungsparameter 48, 399WDCONFIGURATIONID 391, 399WDDISABLEUSERPERSONALIZA-

TION 399WDHIDEMOREFIELDHELPAS-

DEFAULT 373Anzeigeposition 162Arbeitsgeschwindigkeit 329Architekturmuster 20Assistance-Klasse 79, 216

Text 212Asynchronous JavaScript and XML �

AJAXAttribut

Anlage 88wd_assist 79, 218wd_comp_controller 66, 75wd_context 65, 83, 112wd_this 65

Attributinformation 332Ausnahme 228Ausnahmeklasse

Ausnahmetext 212

1315.book Seite 465 Dienstag, 31. März 2009 11:16 11

Page 39: Entwicklung von Web-Dynpro- Anwendungen

466

Index

Ausnahmeklasse (Forts.)CX_ROOT 228CX_WD_CONTEXT 118

Ausnahmemechanismus 228Auswahlliste 331, 332

Domänenfestwert 332Implementierung 332, 335

B

BAdI 449Barrierefreiheit 167

Prüfung 167Baumeingabe 187Baumhierarchie 180Benutzerfreundlichkeit 329Bereichsauswahl 194Beschreibungsobjekt 249Blatt 177Blätterspalte 187Browse-Button 210Browser-Fenster � Popup-FensterBSP � Business Server PagesBusiness Add-in � BAdIBusiness Function Set 450Business Server Pages 19, 24, 28

C

Cascading Stylesheets 149, 405Maßeinheit 149

Change-Log � ContextClient-Server-Architektur 25Compiler 33Component

Aktivierung 48Controller-Interface 122Interface 39Kopie 417

Component-Controller � ControllerComponent-Interface 306

Anlage 306Component-Verwendung 286, 287

Aktualisierung 304Anlage 295Beispiel 288Controller-Verwendung 72, 298Definition 287Eintrag 292

Component-Verwendung (Forts.)fremde Methode 297fremdes Ereignis 297Instanzierung 294

Configuration-Controller 386Setzen 394

Container 141Element 40Group 141TransparentContainer 141Tray 141ViewContainerUIElement 142

Content-Management-System 19Context 80, 104

Attribut 104, 109, 333Attributanlage 255, 256Aufbau 81Bindung 98Change-Log 402, 437, 438Datenbindung 84Definition 80Editor 83Eigenschaft 85Element 44, 81, 124Erweiterung 452externes Mapping 418Interface-Knoten 300Kardinalität 82, 85Knoten 81, 87, 104, 249, 250, 252,

254Knotenattribut 88Knotenstruktur 249Konstante 93Laufzeit 82Lead-Selection 86, 87Mapping 94, 96, 288, 291, 333Navigation 111Parametertabelle 258Pfad 120Programmierung 104Rekursionsknoten 181RTTI 259Verwendung 89

Context-Change-Log � ContextContext-Mapping

componentübergreifendes 299Definition 301einfaches 299, 300, 301externes 299, 302, 303, 304, 305, 310

1315.book Seite 466 Dienstag, 31. März 2009 11:16 11

Page 40: Entwicklung von Web-Dynpro- Anwendungen

467

Index

Context-Mapping (Forts.)Löschung 304

Controller 63Attribut 65Component 38, 64, 73Custom 64, 386, 392, 394Interface 64, 288, 296, 297, 299Methode 66Sichtbarkeit 72, 75View 64Window 64, 70

Controller-Verwendung � Component-Verwendung

Custom-Controller � ControllerCustomizing 396

Dialogfenster 397Modus 396Start 396

D

Data Dictionary 32Datei

Export 204, 209Import 204

DatenInvalidierung 206Konvertierung 207

Datenbindung � ContextDatenquelle 181Datentyp

einfacher 340Datenzeile 187

Bereich 188DDIC-Bindung 213Debugger 401, 426, 427

Context 428Layout 427neuer 427Startproblem 427

Default-View 417Dereferenzierung 368Dialogfenster � Popup-FensterDowncast 136Drei-Schichten-Architektur 20, 21Drucktaste 163dynamische Programmierung 246Dynpro 25, 142

Ablauflogik 26

Dynpro (Forts.)Datentransport 27Maskendefinition 26Process After Input 26Process Before Output 26

E

Easy-POWL � POWER-ListEditierbarkeit 160Eigenschaft

accessibilityDescription 167activateAccessKey 443behaviour 208cellDesign 143, 144, 149cellPadding 151cellSpacing 151checked 339, 343, 444, 447colCount 152, 337, 338colSpan 149contextMenuBehaviour 445, 447contextMenuId 444, 445, 447data 205dataSource 175, 176, 190, 342defaultItemIconSource 175defaultNodeIconSource 175Default-Wert 111descriptiveText 341design 46, 57, 59, 157, 191, 376Dictionary-Struktur 108displayEmptyRows 192emptyTableText 192enabled 46, 100, 175Erweiterung 454expanded 176, 179explanation 371, 443fileName 208finale 388, 397hAlign 146, 149, 157handleHotkeys 440hasChildren 176height 149iconSource 176, 341ignoreAction 179imageSource 163, 169, 206Kardinalität 109, 110, 189keyToSelect 337labelFor 160, 291Layout 142

1315.book Seite 467 Dienstag, 31. März 2009 11:16 11

Page 41: Entwicklung von Web-Dynpro- Anwendungen

468

Index

Eigenschaft (Forts.)Layoutdaten 142Lead-Selection 109length 160MenuCheckBox 447mimeType 204multipleSelection 342OVS-Component-Verwendung 352paddingBottom 152paddingLeft 152paddingRight 153paddingTop 153passwordField 160readOnly 160rootText 175rootVisible 175rowBackgroundDesign 146, 149rowDesign 147rowSelectable 193scrollingMode 141, 185selectedKey 337, 338, 445selectedTab 169Selection 189, 193selectionChangeBehaviour 342selectionMode 193Sichtbarkeit 388sortState 196state 160, 237strechedVertically 148stretchedHorizontally 148target 205text 46, 157, 160, 169, 206, 337, 341,

374textDirection 157textDocumentName 375texts 96, 337, 340title 175, 289titleVisible 175tooltip 46, 163, 370vAlign 149value 84, 90, 160, 456vGutter 143, 144, 149visible 46, 84, 100visibleItems 341visibleRowCount 191width 149, 192wrapping 143, 157

einfaches Mapping � ContextEinfachselektion 341

Eingabehilfe 329Auswahlmöglichkeit 329umgebungssensitive 109Wertehilfe 329

Einstellungpersönliche 396

Einzelauswahl 194Element � ContextEmpty View � ViewEnhancement Builder 449Enhancement Framework 449Enhancement � ErweiterungEntwicklungszeit 14, 243

Context-Definition 245Ereignis 76

Definition 76Ereignisbehandler 77onAction 57, 59, 164, 179onEnter 91onExpandAll 178onLeadSelection 195onLoadChildren 180onSelect 96, 331, 334onSort 196Registrierung 76Sichtbarkeit 76

Ereignisbehandler 76, 297Mechanismus 164Methode 42OVS 352

Ersetzungswert 231Erweiterung

Abgleich nach Upgrade 458Anlage 450Component-Verwendung 452Context 453Exit-Methode 457explizite 450Implementierung 456implizite 449Layout 454Mapping 454Methode 453Navigationslink 452Plug 452UI-Element 454, 457zusammengesetzte 451

Exit-Methode 453

1315.book Seite 468 Dienstag, 31. März 2009 11:16 11

Page 42: Entwicklung von Web-Dynpro- Anwendungen

469

Index

Expansion 176externes Mapping � Context

F

Fehlernachricht 239Attribut 121Context-Bezug 239

Feldbezeichner 212Field-Symbol 368first_time 265, 271fixedTableLayout 193Flattersatz 146Form

tabellarische 340framework controlled � View-Lebens-

dauerFremdschlüsselverprobung 347Funktion 187Funktionsbaustein 129

DOCU_CREATE 375DOCU_GET 374SEO_CLASS_LIB_INTROSPECTION 361

H

Häkchen 339Hello World 36Help Center 380Hierarchie 170Hilfe

&DEFINITION& 372&USE& 372Anwendung 380Ausblendung 376Erläuterung 370, 373Erläuterungstext 370, 371F1-Hilfe 370, 372F4-Hilfe 344Felddokumentation 372Hilfetext mit Quickinfo 370Info-Objekt 376KW-Dokument 370, 376Link 377, 380mehr Feldhilfe 372Menütext 377semantische 330, 369Soforthilfe 372technische 372

Hook-Methode 66Ablaufreihenfolge 69

Hotkey 402, 438globaler 440lokaler 440Tastenkombination 439UI-Element 439Visualisierung 440

HTMLB 30HTTP-Roundtrip 156

I

Icon 164IETF 204Inbound-Plug � PlugIndividualisierung 396Information

semantische 370Informationsobjekt 249Inhaltsbereich 168Inline-CSS � PerformanceInterface

Component-Controller 122element_* 122elements_* 122IF_POWL_FEEDER 328IF_SALV_WD_TABLE_* 315IF_WD_COMPONENT 431IF_WD_COMPONENT_USAGE 408IF_WD_CONTEXT 437IF_WD_CONTEXT_ELEMENT 82, 114IF_WD_CONTEXT_NODE 82, 93, 112IF_WD_CONTEXT_NODE_INFO 251,

252, 263, 264IF_WD_MESSAGE_MANAGER 225,

228IF_WD_OVS 354IF_WD_SELECT_OPTIONS 365IF_WD_TABLE_METHOD_HNDL 197,

202IF_WD_WINDOW 431, 435IG_COMPONENTCONTROLLER 122View 53

Interface-Controller � ControllerInterface-Knoten � ContextInterface-Typ 297

IF_* 297IG_* 297

1315.book Seite 469 Dienstag, 31. März 2009 11:16 11

Page 43: Entwicklung von Web-Dynpro- Anwendungen

470

Index

Interface-Typ (Forts.)IWCI_* 297

Interface-View 288WND_SELECTION_SCREEN 365

Internationalisierung 211Internet Engineering Task Force � IETFInternet Transaction Server � ITSIntervalleingabe 364ItemListBox 174ITS 19, 24, 28, 31

J

JavaServer Pages 28Joker 345

K

Kalenderhilfe 349Kardinalität � ContextKarteikarte

Anlage 172Karteireiter 168Key-Technik 334Klasse

Beschreibungsobjekt 133CL_ABAP_CHAR_UTILITIES 207CL_ABAP_CONV_OUT_CE 206CL_SALV_WD_CONFIG_TABLE 311CL_TEXT_IDENTIFIER 213CL_WD_COMPONENT_ASSISTANCE

79CL_WD_DYNAMIC_TOOL 189, 237,

278CL_WD_FORMATTED_TEXT 374CL_WD_RUNTIME_SERVICES 209CL_WD_UTILITIES 216Konstante 257

Knopf 336Knoten

Collection 125kollabierter 176nicht rekursiver 173, 174rekursiver 173, 180

Knoteninformation 332Konfiguration 385

Anlage 386Anwendungskonfiguration 385, 389Component-Defined 395

Konfiguration (Forts.)Component-Konfiguration 390explizite 392, 395implizite 386Konfigurationsdatensatz 385, 386Pflegeoberfläche 388Sicht 387

Konfigurationsdatensatz 386Pflege 395

Konfigurationseditor 385Konfigurationsmodus

sap-config-mode=X 396Konfigurator 385Konsole 24Konstante

Verwendung 257Kontextmenü 402, 441

Anlage 446dynamisches 445Einsatzszenario 441Entwicklung 444Feldhilfe 443Sichtbarkeit 442Soforthilfe 443Standardwert 443statisches 445Systemmenü 442Zugangstaste 442

Konvertierungsobjekt 207Kopie

strukturelle 185Kurztext 370

L

Ladendynamisches 180

Längedefinierte 217maximale 217

Laufzeit 15, 243Laufzeitanalyse � PerformanceLayout 142

Daten 142FlowLayout 41, 143GridLayout 41, 150MatrixLayout 41, 147RowLayout 41, 146

1315.book Seite 470 Dienstag, 31. März 2009 11:16 11

Page 44: Entwicklung von Web-Dynpro- Anwendungen

471

Index

Lead-SelectionDropDownByIndex 331RadioButtonGroupByIndex 338

Lightspeed-Rendering 410, 420, 438Listbox 341

M

m aus n 339Mainframe-Server 25Mapping � ContextMarkierspalte 187MatrixData 148MatrixHeadData 148Mehrfachselektion 341Meldung 72

permanente 239Standard 239

Message Area 222Attribuierung 223Design 223Liste 224

Message Manager 72, 225Metadaten 33Metainformationsobjekt 249Methode

add_attribute( ) 256, 265add_child( ) 273, 283add_new_child_node( ) 252, 254, 260,

261, 265add_selection_field( ) 365attach_file_to_response( ) 209bind_( ) 283bind_element( ) 112, 124, 125, 126bind_structure( ) 92, 112, 127, 263bind_table( ) 112, 127, 135, 409bound_( ) 283check_mandatory_attr_on_view( ) 238clear_messages( ) 240convert( ) 207create( ) 207create_component( ) 295, 367, 416create_element( ) 112, 124, 125create_from_sapscript( ) 374create_range_table( ) 365create_table_from_node( ) 189, 278delete_component( ) 295, 408describe_by_name( ) 136, 138, 260enable_context_change_log( ) 437

Methode (Forts.)funktionale 114get_( ) 283get_attribute( ) 114, 118, 119, 265get_attributes( ) 265get_child( ) 283get_child_node( ) 92, 112, 265get_child_nodes( ) 265, 275get_children( ) 283get_context( ) 437get_element( ) 112, 269get_element_count( ) 100, 112get_lead_selection( ) 95get_message_area( ) 224get_messages( ) 240get_node_info( ) 251, 264, 335get_on_( ) 283get_parent( ) 265get_range_table_of_sel_field( ) 368get_root_element( ) 267, 269get_selected_elements( ) 195, 341get_static_attributes( ) 114, 118, 121get_static_attributes_table( ) 112, 118,

121get_string( ) 281get_text( ) 219get_window_manager( ) 431has_active_component( ) 295, 367if_wd_component_assistance~get_text( )

216init_selection_screen( ) 365is_empty( ) 240is_selected( ) 341new_( ) 271, 277, 280new_caption( ) 276new_matrix_head_data( ) 273new_matrix_layout( ) 271new_tab( ) 275new_tabstrip( ) 273, 282new_transparent_container( ) 277path_get_node( ) 277, 341remove_all_children( ) 273, 283remove_attribute( ) 265remove_child( ) 283remove_child_node( ) 264, 265remove_child_nodes( ) 265remove_element( ) 95, 112, 138remove_message( ) 240

1315.book Seite 471 Dienstag, 31. März 2009 11:16 11

Page 45: Entwicklung von Web-Dynpro- Anwendungen

472

Index

Methode (Forts.)report_attribute_error_message( ) 231,

233report_attribute_exception( ) 235report_attribute_message( ) 233report_attribute_t100_message( ) 233,

234report_element_error_message( ) 233report_element_exception( ) 235report_element_t100_message( ) 233report_error_message( ) 233report_exception( ) 235report_fatal_error_message( ) 233report_fatal_exception( ) 235report_message( ) 233report_success( ) 233report_t100_message( ) 233, 234report_warning( ) 233Schnittstelle 113set_( ) 271, 283set_attribute( ) 114set_configuration( ) 355set_content( ) 277set_display_attributes( ) 224set_global_options( ) 365set_image_source( ) 277set_input_structure( ) 358set_on_( ) 280, 283set_output_table( ) 360set_selected( ) 340, 341set_static_attributes( ) 114, 117, 409set_text( ) 376set_text_document_name( ) 376set_width( ) 271Signatur 113Typ 66wd_cpifc_( ) 297wd_cpuse_( ) 294wd_get_api( ) 435wddoafteraction( ) 71wddoapplicationstatechange( ) 70wddobeforeaction( ) 71, 236wddobeforenavigation( ) 70, 71wddoexit( ) 69wddoinit( ) 69wddomodifyview( ) 71, 265, 410wddoonclose( ) 70wddooncontextmenu( ) 444, 445wddoonopen( ) 70

Methode (Forts.)wddopostprocessing( ) 70

Methodentypeinfacher 66Ereignisbehandler 67Supply-Funktion 67, 98

Microsoft ExcelBlatt 208Plug-in 208

MIMEDarstellung 208Typ 204

Modellanbindung 128, 132Model-View-Controller 20, 24, 29, 34,

41, 49Beispiel 23Business Server Pages 29Controller 22Herkunft 20Model 21View 22

Modifikation 449MouseOver 163Multi-Component-Architektur 285, 286

Beispiel 287Component-Instanzierung 289Performance 287

Mussfeld-Prüfung 237MVC � Model-View-Controller

N

Nachricht 211, 221Nachrichtenbereich 222Nachrichtenkategorie 227

Ausnahme 228Tabelle T100 228Text 228

Nachrichtenklasse 221, 233Nachrichtennummer 221, 233Nachrichtenpflege 221Nachrichtentext 221

Platzhalter 221Nachrichtentyp 221, 233

Fehler 221Information 221

Nachrichtenverlinkung 231Navigation

Element 168

1315.book Seite 472 Dienstag, 31. März 2009 11:16 11

Page 46: Entwicklung von Web-Dynpro- Anwendungen

473

Index

Navigation (Forts.)Menü 168

Navigationslink 50, 62Nicht-Singleton-Knoten 177Null-Client 25

O

Oberflächenelement 339Object Value Selector � OVSOnline Text Repository � OTROTR 211, 213

Aliastext 213Browser 213Grundwortschatz 214Kurztext 213Namensaufbau 215Pflege 215SOTR_VOCABULARY_BASIC 214

Outbound-Plug � PlugOverwrite-Exit 452, 453, 457OVS 345, 350

Anbindung 351Aufruf 354Eingabefeld 355Ereignisbehandler 353Ergebnismenge 360Ergebnis-View 353Fenstertitel 354Gruppenüberschrift 355if_wd_ovs=>co_phase_0 358Konfigurationsaspekt 355Label 355ovs_callback_object 353ovs_callback_object->phase_indicator

354ovs_callback_object->query_parameters

361ovs_callback_object->selection 362Phasen 354, 358, 360, 362Phasenmodell 353Selektions-View 353Spaltenüberschrift 354Suchilfekontext 359Überschrift 354Verwendung 351Wertehilfe 350

P

PAI 156Parameter 113

Aktualparameter 113Art 113Changing 114Exporting 113Formalparameter 113Importing 113Returning 114Typ 114

Parameterreferenzview 265

Performance 174Analyse-Tool 410Animation 405, 406Backend-Laufzeit 403Checkliste 407, 408, 409Component-Instanzierung 408Context-Änderung 423Datenkomprimierung 404Datenmenge 403Delta-Rendering 405, 406, 420, 421,

422, 425Dirty-Flag 421, 425Document Object Model 410, 413Frontend-Rendering-Laufzeit 404HTTP-Komprimierung 406Inline-CSS 405Instanzierung 415Laufzeitanalyse 404Nesting-Analyse 410, 412On-Demand-Instanzierung 426Performancemonitor 410Roundtrip 420, 421Sichtbarkeit 416Singleton 178, 409Struktur 409Systemkonfiguration 404Trace-Tool 410, 413, 423View-Lebensdauer 408

Personal Object Work Entity Repository List � POWER-List

Personalisierung 396Start 398

Pfadabsoluter 210

Pflichteingabe 158

1315.book Seite 473 Dienstag, 31. März 2009 11:16 11

Page 47: Entwicklung von Web-Dynpro- Anwendungen

474

Index

Phasenmodell 69, 71Platzhalter 217, 229Plug 49

Ereignisbehandler 59, 78Exit 55Inbound 50Interface-Flag 54Konvention 58Outbound 50Resume 54, 55Standard 54Startup 53Suspend 55

Popup-Fenster 56, 402, 429Browser-Fenster 433Button 434Button-Konstante 435close( ) 433create_popup_to_confirm( ) 430create_window( ) 430, 432create_window_for_cmp_usage( ) 430,

431Dialogfenster 432Erzeugung 431Fenstergröße 434modales 429Öffnung 433open( ) 433Schließen 433set_window_size( ) 434subscribe_to_button_event( ) 434Window-Manager 430, 433

Post-Exit 452, 453POWER-List 324

Abfrage 325Anwendungsmöglichkeit 325Easy-POWL 327Favorit 326Feeder-Klasse 325kalkulierte Daten 326POWL_EASY_DEMO 325Suchkriterium 325

Pre-Exit 452, 453Primäreigenschaft 157, 161, 190Process After Input � PAIProgrammierung

Aktion 280Attribut 255Context 248

Programmierung (Forts.)Context-Manipulation 247controllerübergreifende 72dynamische 246Grund 248Kardinalität 254Kontra 245Layoutmanipulation 247Lead-Selection 254Selection 254Singleton 254View 266Warnung 265Zuordnung 247

PrüftabelleTexttabelle 347

Q

Quelltextgerüst 353

R

RadioButton 337Registerkarte 168

implementiertes Interface 307Rekursion 174Remote Function Call � RFCRendering 178Reuse-Komponententyp 130RFC

AIO_FOR_HELP_LINKS 377Verbindung 130, 377

Root-ElementAustausch 45, 409

ROOTUIELEMENTCONTAINER 44, 45, 141

Roundtrip � PerformanceRowData 146RowHeadData 146RTTC 136RTTI 103, 135

Beschreibungsobjekt 259CL_ABAP_CLASSDESCR 133CL_ABAP_STRUCTDESCR 260CL_ABAP_TYPEDESCR 135Vererbungshierarchie 135Verwendung 136

RTTS 136

1315.book Seite 474 Dienstag, 31. März 2009 11:16 11

Page 48: Entwicklung von Web-Dynpro- Anwendungen

475

Index

Run Time Type Creation � RTTCRun Time Type Identification � RTTIRun Time Type Services � RTTS

S

SAP GUI 26SAP Knowledge Warehouse

Bereich 377Kontext 377Mappe 377Struktur 377Suchkontext 377technischer Name 378Thema 378

SAP List Viewer 28, 307anwendungsspezifische Funktion 312Aussehen 308Configuration Model 311, 312, 313CONTROL_VIEW 310DATA 310data_check( ) 317DDIC-Bindung 319dynamisches Mapping 310Ereignis 315Feldeinstellung 312Funktion 322get_model( ) 316get_model_extended( ) 316Implementierung 308Integration 309Leistungsumfang 308ON_DATA_CHECK 317ON_FUNCTION 322, 323R_PARAM 315SERVICE 310set_data( ) 311, 315Spalte ausblenden 319Spalte erzeugen 321Spalte konfigurieren 318Spalte löschen 318Spalteneinstellung 312Spaltentitel 319Standardfunktion 312Tabelleneinstellung 312TABLE 309, 310Toolbar 322Zelleneditor 321

SAPscript 374

Schalter 339Schlüsselwert 334Screen Painter 26SELECT-OPTIONS 363

Bedingung 366Einzeleingabe 364Ereignis 366Interface-Controller 367Intervalleingabe 364Kriterium 364Mehrfachselektion 366Ranges-Tabelle 366Standardfunktion 366

Selektionsbild 157Standard 364

Service-Aufruf 103Service-Aufruf-Wizard 129, 361

Schritt 129Start 129Zeitersparnis 131

Shortcut � HotkeySingleton � PerformanceSoforthilfe � KontextmenüSpalte 187

orientierte 140Speichern-Dialog 208Speicherverbrauch 403Standardanwendung 383Standard-Component 285

Object Value Selector 286POWER-List 286SAP List Viewer 286SELECT-OPTIONS 286

Standardmeldung 239Standard-Message-Area 222

Anzeige 222Standardwert � KontextmenüStandard-Zelleneditor 200Subklasse 268SubScreen 142Suchhilfe 329, 345

Anbindung 346, 350Datenelement 348Datenelementebene 348direkte 350Exportparameter 345Feldebene 348Importparameter 345Kontext 348

1315.book Seite 475 Dienstag, 31. März 2009 11:16 11

Page 49: Entwicklung von Web-Dynpro- Anwendungen

476

Index

Suchhilfe (Forts.)Prüftabelle 347Selektionsmethode 345Treffermenge 345

Superklasse 268Supply-Funktion 67, 290, 298, 302, 304Switch Framework 450

T

T100 228Tab Page 168Tabelle 170

dynamische 189hierarchische 187manuelle 189Template 189

TabelleninhaltSortierung 196

TabellenspalteEinfügen 196Verschiebung 201

Tabellenüberschrift 190Taste

Aktivierung 107F4 345Shift+Klick 342Strg+Klick 342Tabellennavigation 194Tabellenzeile 189, 194

TextErmittlung 161Kennung 217Literal 220Pool 216Tabelle 347übersetzungsrelevanter 211

TextelementAnlage 217

Textsymbol 211, 216Konstante 217

Toolbar 168, 187Einfügen 169

Trace-Tool � PerformanceTransaktion

ICON 163IF_POWL_EASY_FEEDER 328POWL_CAT 328POWL_EASY 328

Transaktion (Forts.)POWL_QUERY 328POWL_QUERYR 328POWL_TYPE 328POWL_TYPER 328S_MEMORY_INSPECTOR 404SE11 105, 106, 332SE24 106, 114, 228, 268SE30 404SE63 212SE91 221SICF 406SOTR_EDIT 215WD_TRACE_TOOL 414

Typskalarer 159

Typgruppe 257

U

Überschrift 187Uhrzeithilfe 349UI-Element 40, 140

Anlage 41Button 57Dokumentation 157DropDown 331DropDownByIndex 96, 291Eigenschaft 45Group 40, 45Label 90MultiPane 409, 443PageHeader 289, 301PageHeaderArea 302RowRepeater 409, 443Sichtbarkeit 100TabStrip 289TextView 44, 46TransparentContainer 40ViewContainer 40, 56, 309zusammengesetztes 188

UI-Kategorie 155action 155, 163complex 155, 190Favorites 155graphic 155integration 156layout 155selection 155

1315.book Seite 476 Dienstag, 31. März 2009 11:16 11

Page 50: Entwicklung von Web-Dynpro- Anwendungen

477

Index

UI-Kategorie (Forts.)text 155

URL-Parameter 398sap-config-mode 399sap-wd-configId 399sap-wd-ssrconsole 399

V

Vererbungshierarchie 268View 38, 40

Anlage 42API 435Editor 43Einbettung 292Empty 61, 417Erweiterung 452, 456Hierarchie 49Lebensdauer 44, 415

View Designer 43View-Controller � ControllerView-Element 140

ABAP-Klassenrepräsentation 267Button 163Caption 169CheckBox 339CheckBoxGroup 339DropDownByIndex 331DropDownByKey 332Eigenschaft 271Einfügen 156, 266Einfügeposition 267Explanation 373FileDownload 204FileUpload 204, 210Group 336Image 198InputField 159InvisibleElement 152ItemListBox 341Karteikarte 168Konstante 257Label 143, 160Laufzeitobjekt 271Menu 444MenuActionItem 444MenuCheckBox 444MenuRadioButton 445MenuSeparator 445

View-Element (Forts.)MessageArea 223RadioButton 336RadioButtonGroupByIndex 337RadioButtonGroupByKey 337, 338ScrollContainer 150Tab 268Table 187TableColumn 196TabStrip 168, 268TextView 157Toolbar 169Tree 173TreeItemType 175, 177TreeNodeType 175TriStateCheckBox 342Typ 266Verschiebung 156, 162

View-InterfaceIF_WD_VIEW_ELEMENT 268, 270

View-KlasseCL_WD_CAPTION 276CL_WD_LAYOUT_DATA 268CL_WD_MATRIX_DATA 268CL_WD_MATRIX_HEAD_DATA 268,

273CL_WD_TAB 268, 275CL_WD_TABSTRIP 257, 268, 273CL_WD_TRANSPARENT_CONTAINER

277CL_WD_UIELEMENT 268, 370CL_WD_UIELEMENT_CONTAINER 270CL_WD_VIEW_ELEMENT 268CL_WDR_VIEW_ELEMENT 268

Vorschlagswert 111Vorwärtsnavigation 215

W

WarnungACC 167

WD_GLOBAL_SETTING 404, 405wdevent 179, 280

context_element 179id 179name 281Name/Wert-Paare 281parameters 179path 179

1315.book Seite 477 Dienstag, 31. März 2009 11:16 11

Page 51: Entwicklung von Web-Dynpro- Anwendungen

478

Index

Web Dynpro 31Anwendung 35, 47Autorenumgebung 374Component 34, 37, 38Debugger 118Entwicklungsumgebung 36Explorer 36, 38Java 31Kapselung 32Komponentenmodell 32Metadatenmodell 31Namenskonvention 31Programmiermodell 33, 36Text-Browser 374Vorteil 31Werkzeugkasten 104

Web-Dynpro-AnpassungCustomizing 383explizite 384implizite 384Konfiguration 383Konfigurationsdatenset 383Personalisierung 384

Web-Dynpro-AnwendungCONFIGURE_APPLICATION 389CONFIGURE_COMPONENT 386Eigenschaft 222WDR_TEST_UI_ELEMENTS 156

Web-Dynpro-Code-Wizard 115Auslesen 120Component-Instanzierung 296Context-Element 92Meldung 229Methodenaufruf 74, 117Navigationsübergang 170Start 74Tabellenoperation 123Table 199Template Table 189Template-Galerie 199Textsymbol 219

Web-Dynpro-ComponentKopie 249WDR_OVS 350WDR_SELECT_OPTIONS 365

Web-Dynpro-Component-InterfaceIWD_VALUE_HELP 363

Web-Dynpro-Debugger � Debugger

Web-Dynpro-EntwicklungVorgehen 246

Werkzeugleiste 168Wertehilfe 344

DATS 349Datumsauswahl 344Domäne 348Domänenfestwert 344Festwert 348frei programmierte 363keine 350Prüftabelle 344Schlüsselfeld 347Suchalgorithmus 346TIMS 349

Wertehilfe-Modus 257automatischer 346deaktivierter 346Dictionary-Suchhilfe 350OVS 352

when visible � View-LebensdauerWiederholungsknoten 181Wiederverwendung 166

ABAP Dictionary 344von Components � Multi-Component-

ArchitekturWindow 39, 49

Editor 52Eigenschaft 53Interface 53Struktur 52View 60, 61

Window-API 224Window-Controller � ControllerWindow-Manager � Popup-Fensterwrapping 144WYSIWYG 43

Z

Zeile 187orientierte 140Selektion 189Umbruch 207Vorsprung 207

Zelleneditor 188, 197Einfügen 198

Zugangstaste � KontextmenüZweidimensionalität 187

1315.book Seite 478 Dienstag, 31. März 2009 11:16 11