ABAP Dictionary
mySAP Technology
Stand
Schulungszentrum
Referenten
Schulungs-
Homepage
Teilnehmerhandbuch
Version der Schulung: 2006/Q2
Dauer der Schulung: 3 Tag(e)
Materialnummer: 50084449
Weitergabe und Vervielfältigung dieser Publikation oder von Teilen daraus sind, zu welchem Zweck
und in welcher Form auch immer, ohne die ausdrückliche schriftliche Genehmigung durch SAP AG
nicht gestattet. In dieser Publikation enthaltene Informationen können ohne vorherige Ankündigung
geändert werden.
Markenzeichen
• Microsoft®, WINDOWS®, NT®, EXCEL®, Word®, PowerPoint® und SQL Server® sind
eingetragene Marken der Microsoft Corporation.
• IBM®, DB2®, OS/2®, DB2/6000®, Parallel Sysplex®, MVS/ESA®, RS/6000®, AIX®,
S/390®, AS/400®, OS/390® und OS/400® sind eingetragene Marken der IBM Corporation.
• ORACLE® ist eine eingetragene Marke der ORACLE Corporation.
• INFORMIX®-OnLine for SAP und Informix® Dynamic ServerTM sind eingetragene Marken
der Informix Software Incorporated.
• UNIX®, X/Open®, OSF/1® und Motif® sind eingetragene Marken der Open Group.
• Citrix®, das Citrix-Logo, ICA®, Program Neighborhood®, MetaFrame®, WinFrame®,
VideoFrame®, MultiWin® und andere hier erwähnte Namen von Citrix-Produkten sind
Marken von Citrix Systems, Inc.
• HTML, DHTML, XML, XHTML sind Marken oder eingetragene Marken des W3C®, World
Wide Web Consortium, Massachusetts Institute of Technology.
• JAVA® ist eine eingetragene Marke der Sun Microsystems, Inc.
• JAVASCRIPT® ist eine eingetragene Marke der Sun Microsystems, Inc., verwendet unter der
Lizenz der von Netscape entwickelten und implementierten Technologie.
• SAP, SAP Logo, R/2, RIVA, R/3, ABAP, SAP ArchiveLink, SAP Business Workflow,
WebFlow, SAP EarlyWatch, BAPI, SAPPHIRE, Management Cockpit, mySAP.com Logo
und mySAP.com sind Marken oder eingetragene Marken der SAP AG in Deutschland und
vielen anderen Ländern weltweit. Alle anderen Produkte sind Marken oder eingetragene
Marken der jeweiligen Firmen.
Verzichtserklärung
Bei der Zusammenstellung der Texte, Verweise und Abbildungen wurde mit größter Sorgfalt
vorgegangen; trotzdem ist ein vollständiger Fehlerausschluss nicht möglich. Die nachfolgende
Dokumentation erfolgt daher ohne Gewähr für Richtigkeit und Vollständigkeit der gemachten
Angaben, für deren Verifizierung allein der Anwender die Verantwortung trägt.
SAP übernimmt für aus der Verwendung dieser Dokumentation entstehende Schäden, gleich aus
welchem Rechtsgrund, eine Haftung nur im Falle vorsätzlichen oder grob fahrlässigen Handelns;
im übrigen ist die Haftung von SAP ausgeschlossen. SAP übernimmt keine Verantwortung für die
Inhalte von Seiten Dritter, auf welche wir durch Links verweisen.
g2007411102223
Über dieses Handbuch
Dieses Handbuch ergänzt die Präsentation des Schulungsreferenten und dient als
Nachschlagewerk. Es ist nicht zum Selbststudium geeignet.
Typografische Konventionen
Die folgenden typografischen Konventionen werden in diesem Handbuch
verwendet:
Format Beschreibung
Symbole im Text
Die folgenden Ikonen werden in diesem Handbuch verwendet:
Symbol Bedeutung
Vorgehensweise
Zielgruppe
Diese Schulung richtet sich an die folgenden Zielgruppen:
Empfohlene Vorkenntnisse
• Prinzipielles Verständnis über den Aufbau einer Relationalen Datenbank
Unternehmensszenario
Sie sollen einem Kollegen die wesentlichen Möglichkeiten des ABAP-Dictionary
erläutern
Das ABAP Dictionary ermöglicht die zentrale Verwaltung aller im R/3 System
verwendeten Typdefinitionen.
Im ABAP Dictionary können benutzerdefinierte Typen (Datenelemente,
Strukturen und Tabellentypen) zur Verwendung in ABAP Programmen oder in
Schnittstellen von Funktionsbausteinen, Objektmethoden usw. angelegt werden.
Auch Datenbankobjekte wie Tabellen, Indizes und Views können im ABAP
Dictionary definiert und mit dieser Definition auf der Datenbank angelegt werden.
Weiterhin stellt das ABAP Dictionary eine Reihe von Services zur Verfügung, die
die Programmentwicklung unterstützen. Hier werden beispielsweise das Setzen
und Freigeben von Sperren, die Definition einer Eingabehilfe (F4-Hilfe) und das
Anbinden einer Feldhilfe (F1-Hilfe) an ein Dynprofeld unterstützt.
Unternehmensszenario
Sie sollten einfache und komplexe Datentypen im Dictionary definieren und in
einem ABAP-Programm verwenden können.
Datentypen
Abbildung 8: Domäne
Die Länge ist bei diesem Datentyp auf 8 Stellen festgelegt. Die
Ausgabemaske kann über das Benutzerprofil festgelegt werden.
DEC
Rechen- oder Betragsfeld mit Komma, Vorzeichen und
Tausenderpunkten.
Ein DEC Feld darf maximal 31 Stellen lang sein.
NUMC
Zeichenfolge, die nur Ziffern enthalten darf. Die Länge eines
Feldes dieses Typs ist auf maximal 255 Stellen begrenzt.
Ausgabeeigenschaften:
Hier wird die maximale Feldlänge inklusive Aufbereitungszeichen
(z.B. Kommata oder Punkte) für die Eingabe und Ausgabe von Werten
angegeben.
Dieser Wert wird normalerweise automatisch berechnet, sobald unter
Format eine Anzahl der Stellen vergeben wurde, kann aber nachträglich
überschrieben werden. Das Ausgabeformat wirkt sich auf die Ausgabe
auf Dynpros und Selektionsbildern aus. Beim Einbau eines Feldes
auf ein Dynpro werden die Angaben aus diesem Bereich verwendet,
können jedoch im Screen Painter modifiziert werden.
Des weiteren besteht die Möglichkeit, eine Konvertierungsroutine
für diese Domäne zu definieren. Sie dient dazu, beim Umwandeln
des Inhalts eines Dynpro-Feldes vom Anzeigeformat in das
SAP-interne Format und umgekehrt, sowie bei der Ausgabe mittels
der ABAP-Anweisung WRITE , das Anzeigeformat zu ändern (z.B.
führende Nullen vor eine Zahl stellen). Ebenso können mit dieser
Konvertierungs-Routine evtl. ungeeignete Standardkonvertierungen
übersteuert werden.
Für bestimmte Datentypen (DEC, FLTP, QUAN und CURR) wird
die Checkbox Vorzeichen eingabebereit. Wird diese aktiviert, wird
auf einem Dynpro das erste Zeichen des Feldes für das Vorzeichen
reserviert. Die Ausgabelänge sollte entsprechend um 1 erhöht werden.
Für zeichenartige Datentypen kann außerdem bestimmt werden, ob
auch Kleinbuchstaben erlaubt sind. Ist dieses Flag nicht gesetzt,
können zwar im entsprechenden Eingabefeld Kleinbuchstaben erfasst
werden, die jedoch in Großbuchstaben umgewandelt werden, sobald
die Eingabe vom Anwender bestätigt wird (z.B. ENTER-Taste).
Darüber hinaus können gültige Wertebereiche definiert werden, die
zur Eingabeprüfung verwendet werden. Diese Thema wird jedoch an
anderer Stelle im Kurs noch näher erläutert.
Abbildung 9: Datenelement
Die Datenelemente sind zum einen die Brücke zwischen Domänen und den
Datenobjekten, beherbergen darüber hinaus aber auch noch semantische/fachliche
Informationen über daraus erzeugte Datenobjekte.
In den Datenelementen können und sollten auch die Feldbezeichner für das
Datenfeld gepflegt sein. Diese Feldbezeichner (kurz, mittel oder lang) können
später auf Dynpros oder Selektionsbildern zur Erläuterung des Feldinhaltes
angezeigt werden.
Auf Selektionsbildern (z.B. ABAP-Befehl PARAMETERS) kann nur die
lange Version des Feldbezeichners aus dem Dictionary gezogen werden (Im
ABAP-Editor Menüpfad: Springen -> Textelemente -> Selectionstext =>
Checkbox ‚Dictionary Referenz ).
Wird der Feldwert in einer Liste ausgegeben, wird der Eintrag aus dem
Feldbezeichner für Überschrift verwendet. Für die jeweiligen Feldbezeichner
ist auch eine Länge mitzugeben. Diese Länge gibt die maximale Länge für den
Feldbezeichner an. Für den Fall, daß Sie für ein global agierendes Unternehmen
arbeiten, können Sie die Feldbezeichner in andere Sprachen übersetzen
(Menüpfad: Springen -> Übersetzung oder die Transaktion SE63). Denken Sie
bei der Längenangabe daran, daß in einer anderen Sprache der gleiche Begriff im
Feldbezeichner evtl. mehr Buchstaben benötigt.
Die einfachste Form einer Struktur ist die Aneinanderreihung von Feldern durch
das Verwenden von Datenelementen. Hierbei entsteht immer eine sog. flache
Struktur. Ein Datenobjekt auf Basis dieses Strukturtyps ist immer eindimensional
(im Gegensatz zu einem tabellenartigen zweidimensionalen Datenobjekt). Die
einzelnen Elemente (Komponenten) der Struktur werden über den Namen der
Struktur, einen Bindestrich und den Namen der Komponente angesprochen.
Es ist möglich ein anderes strukturiertes Objekt mit in die Struktur aufzunehmen
und einer Komponente zuzuweisen. Diese eine Komponente referiert auf das
strukturierte Objekt und dieses neue Datenobjekt wird nun als geschachtelte
Struktur bezeichnet.
Derartige Strukturen sind beliebig ineinander schachtelbar.
Sobald man eine interne Tabelle als Strukturkomponente einfügt, wird daraus
eine sogenannte tiefe Struktur.
Interne Tabellen oder ITAB‘s, können über eine bestehende Zeilenstruktur
definiert werden. Dabei können Datenbanktabellen, Strukturdefinitionen, Views,
Datenelemente, direkte Typdefinitionen oder bestehende Tabellentypen als
Zeilentyp verwendet werden.
Durch das deklarieren einer Internen Tabelle in einem ABAP-Programm entsteht
ein zweidimensionales Array im Hauptsspeicher.
Eine tiefe Struktur enthält mindestens eine Tabelle. Die Komponente einer solchen
Tabelle trägt einen eigenen Namen, über den sie wie eine normale interne Tabelle
angesprochen werden kann (LOOP AT ..., INSERT ... INTO TABLE, ...).
Eine interne Tabelle kann als Zeilentyp wiederum eine tiefe Struktur
haben. Dadurch kann man mehrdimensionale Datentypen erzeugen, da das
ineinanderschachteln von interner Tabelle und Struktur mehrfach möglich ist.
Falls Sie globale Konstanten definieren möchten, müssen Sie eine Typgruppe
verwenden. Der Name der Typgruppe darf maximal fünf Zeichen enthalten. In der
Typgruppe können Sie mit der CONSTANTS-Anweisung Konstanten definieren.
Als Typen stehen Ihnen die eingebauten ABAP-Typen oder die globalen Typen
des Dictionarys zur Verfügung.
Um die Typen einer Typgruppe in einem Programm nutzen zu können, machen Sie
die Typgruppe mit TYPE-POOLS-Anweisung bekannt. Ab dieser Zeile können
Sie alle Konstanten der Typgruppe verwenden.
Die Definition einer Typgruppe ist ein Stück ABAP-Code, das entweder über das
Dictionary (SE11) oder über den ABAP-Editor (SE38) gepflegt wird.
Realisierung:
Die erste Anweisung für die Typgruppe zmytp ist immer: TYPE-POOL zmytp.
Danach folgt die Definition von Datentypen mit der Anweisung TYPES,
wie unter Programmlokale Datentypen beschrieben. Weiterhin können
programmübergreifende Konstanten mit der Anweisung CONSTANTS deklariert
werden. Alle Namen dieser Datentypen und Konstanten müssen mit dem Namen
der Typgruppe und einem Unterstrich beginnen:
zmytp_
In einem ABAP-Programm müssen Typgruppen vor ihrer Verwendung mit
folgender Anweisung bekanntgemacht werden:
TYPE-POOLS zmytp.
Bei Verwendung dieser Anweisung können alle Datentypen und Konstanten, die
in der Typgruppe zmytp definiert sind, im Programm verwendet werden. Es
können mehrere Typgruppen in einem Programm verwendet werden.
Unternehmensszenario
Sie sollten für Ihr Entwicklungsprojekt einige globale Datentypen anlegen, auf
welche auch die anderen Projektbeteiligten zugreifen können.
Aufgabe 1:
Legen Sie zwei Domänen an, um Sie später in Datenelementen verwenden zu
können.
1. Rufen Sie die Transaktion SE11 auf.
2. Legen Sie eine Domäne mit dem Namen ZDO_10NUM_## Im Einstiegsbild
des ABAP-Dictionaries an.
3. Die Domäne soll für Datenelemente angelegt werden, die für 10stellige
Dezimalzahlen aufnehmen sollen. Von den 10 Stellen sollen 2 Stellen für
Nachkomma reserviert werden. Die Datenelemente sollen ausserdem für
kaufmännische Berechungen verwendet werden können.
4. Sichern (als lokales Objekt) und aktivieren Sie die Domäne.
5. Legen Sie eine Domäne mit dem Namen ZDO_30CHAR_## im
Einstiegsbild des ABAP-Dictionaries an. Die Domäne soll 30 Textzeichen
aufnehmen können und in den Eingabefeldern soll die Eingabe von
Kleinbuchstaben erlaubt sein..
6. Sichern (als lokales Objekt) und aktivieren Sie die Domäne.
Aufgabe 2:
Legen Sie meherere Datenelemente an und verwenden Sie die bereits definierten
Domänen für die technischen Eigenschaften.
1. Rufen Sie die Transaktion SE11 auf.
2. Legen Sie ein Datenelement (ZLASTNAME##) für den Nachnamen einer
Person an und verwenden Sie eine passende Domäne. Das Datenelement soll
30 Buchstaben in Groß- und Kleinschrift aufnehmen können.
Aufgabe 3:
Programm anlegen
1. Legen Sie das ausführbare Programm ZBC430_##_DATA_ELEMENTS
ohne „TOP-Include“ an.
2. Legen Sie im Programm mit dem ABAP-Befehl PARAMETERS die
folgenden Eingabefelder an.
Parameter Datentyp
pa_fname ZFIRSTNAME##
pa_lname ZLASTNAME##
pa_activ ZASSETS##
pa_liabs ZLIABILITIES##
Berechnen Sie das Ergebnis von Aktiva minus Passiva und geben Sie alle
Parameter sowie das Rechenergebniss auf einer Liste aus.
3. Führen Sie das Programm aus und geben Sie verschiedene Werte im
Selektionsbild ein, die Sie sich auf einer Liste ausgeben lassen.
Aufgabe 2:
Legen Sie meherere Datenelemente an und verwenden Sie die bereits definierten
Domänen für die technischen Eigenschaften.
1. Rufen Sie die Transaktion SE11 auf.
a) Gehen Sie ins Kommandofeld tragen Sie se11 ein, wenn Sie sich im
SAP EASY ACCESS-Menü befinden, ein und bestätigen Sie die
Eingaben
Befinden Sie sich in einer anderen Transaktion befinden, müssen Sie
ins Kommandofeld /n se11 eintragen und die Eingabe bestätigen.
2. Legen Sie ein Datenelement (ZLASTNAME##) für den Nachnamen einer
Person an und verwenden Sie eine passende Domäne. Das Datenelement soll
30 Buchstaben in Groß- und Kleinschrift aufnehmen können.
a) Wählen Sie auf den Radiobuttons den Punkt Datentyp aus.
b) Tragen Sie den Namen des Datentyps in das Eingabefeld ein.
c) Drücken Sie die Schaltfläche für Anlegen.
d) Im erscheinenden Popup wählen Sie den Radiobutton für Datenelement
aus und bestätigen Sie die Eingabe.
e) Tragen Sie im Feld Kurzbeschreibung einen sinnvollen beschreibenden
Text für das Datenelement ein.
f) Unter dem Reiter Datentyp geben Sie unter elementarer Typ die
passende Domäne an, die sie im verhergehenden Teil der Übung
angelegt haben
g) Unter dem Reiter Feldbezeichner müssen Sie noch geeignete
Bezeichnungen für Ihr Datenelement erfassen. Diese Bezeichnungen
erscheinen z.b. auf Dynpros und Selektionsbildern (Lange Version)
zur Erläuterung der Felder.
3. Legen Sie ein Datenelement (ZFIRSTNAME##) für den Vornamen einer
Person an und verwenden Sie eine passende Domäne. Das Datenelement soll
30 Buchstaben in Groß- und Kleinschrift aufnehmen können.
a) Verfahren Sie analog zum vorherigen Übung.
Aufgabe 3:
Programm anlegen
1. Legen Sie das ausführbare Programm ZBC430_##_DATA_ELEMENTS
ohne „TOP-Include“ an.
a) Verwenden Sie zum Anlegen die Transaktion SE80 oder die
Transaktion SE38.
2. Legen Sie im Programm mit dem ABAP-Befehl PARAMETERS die
folgenden Eingabefelder an.
Parameter Datentyp
pa_fname ZFIRSTNAME##
pa_lname ZLASTNAME##
pa_activ ZASSETS##
pa_liabs ZLIABILITIES##
Berechnen Sie das Ergebnis von Aktiva minus Passiva und geben Sie alle
Parameter sowie das Rechenergebniss auf einer Liste aus.
a) Siehe Quelltextauszug in der Musterlösung.
3. Führen Sie das Programm aus und geben Sie verschiedene Werte im
Selektionsbild ein, die Sie sich auf einer Liste ausgeben lassen.
a) Beachten Sie, daß entsprechend den Definitionen in den Domänen
bei den Namen die Eingabe von Groß- und Kleinbuchstaben möglich
sein muß. Bei den beiden numerischen Feldern muss die Eingabe der
Nachkommastellen und eines negativen Vorzeichens möglich sein.
Ergebnis
Quelltextauszug: SAPBC430S_DATA_ELEMENTS
REPORT sapbc430s_data_elements .
START-OF-SELECTION.
NEW-LINE.
WRITE: 'Client:', pa_fname, pa_lname.
NEW-LINE.
WRITE: 'Finance:', pa_activ, pa_liabs, result.
Unternehmensszenario
Um komplexe Datenstrukturen abbilden zu können sollen Sie für Ihr Projekt eine
komplexe Struktur im Dictionary aufbauen.
Aufgabe 1:
Legen Sie einfache Strukturen an, um Sie später in ABAP-Programmen
verwenden zu können.
1. Legen Sie im Dictionary eine Struktur ZNAME## an und nehmen Sie
die zwei folgenden Komponenten in die Struktur auf. Verwenden Sie zur
Typisierung die Datenelemente, die Sie in vorangegangenen Übungen
erzeugt haben
2. Legen Sie eine Struktur ZADRESS## an und tragen Sie die vier folgenden
Komponenten ein:
Aufgabe 2:
Legen Sie eine geschachtelte Struktur an, um Sie später in ABAP-Programmen
verwenden zu können.
1. Legen Sie im Dictionary eine Struktur ZPERSON## an.
2. Nehmen Sie in die Struktur ZPERSON## die Struktur ZADRESS## als
Include-Struktur auf. Nehmen Sie außerdem die Struktur ZNAME##
als geschachtelte Struktur unter dem Komponentennamen NAME in die
Struktur ZPERSON## auf.
3. Legen Sie ein ABAP-Programm ZBC430_##_STRUCT_NESTED
an. Erzeugen Sie in diesem Programm ein strukturiertes Datenobjekt
(wa_person) vom Typ ZPERSON##. Füllen Sie die Komponenten dieses
Datenojekts mit beliebigen Personendaten und geben Sie diese Daten auf
einer Liste aus.
a) Starten Sie die SE11 und tragen Sie im Eingabefeld Datentyp den
Namen der Struktur ein.
b) Drücken Sie auf die Schaltfläche Anlegen und wählen Sie im folgenden
Dialog Struktur aus.
c) Vergeben Sie ein Kurzbeschreibung und tragen Sie die angegebenen
Komponenten ein. Aktivieren Sie die Struktur, damit Sie global
bekannt ist.
2. Legen Sie eine Struktur ZADRESS## an und tragen Sie die vier folgenden
Komponenten ein:
Aufgabe 2:
Legen Sie eine geschachtelte Struktur an, um Sie später in ABAP-Programmen
verwenden zu können.
1. Legen Sie im Dictionary eine Struktur ZPERSON## an.
a) Gehen Sie analog zum vorangegangenen Übungsteil vor.
2. Nehmen Sie in die Struktur ZPERSON## die Struktur ZADRESS## als
Include-Struktur auf. Nehmen Sie außerdem die Struktur ZNAME##
als geschachtelte Struktur unter dem Komponentennamen NAME in die
Struktur ZPERSON## auf.
a) Includieren Sie die Adresse entweder über das Menü
Bearbeiten->Include->Einfügen oder schreiben Sie in der Spalte
Komponente das Schlüsselwort .INCLUDE.
Für die zweite Struktur, die Sie als tiefe Struktur aufnehmen wollen,
geben Sie eine beliebige Komponentenbezeichnung (z.B. 'Name') ein.
Ergebnis
Quelltextauszug: SAPBC430S_STRUCT_NESTED
REPORT sapbc430s_struct_nested.
START-OF-SELECTION.
wa_person-name-firstname = 'Harry'.
wa_person-name-lastname = 'Potter'.
WRITE: / wa_person-name-firstname ,
wa_person-name-lastname ,
wa_person-street ,
wa_person-nr ,
wa_person-zip ,
wa_person-city .
Unternehmensszenario
Zur lokalen Datenhaltung sollen Sie einen Tabelletyp definieren, der die Daten
sortiert vorhält.
Aufgabe:
Legen Sie einfache interne Tabelle auf Basis einer vorhandenen Struktur an, um
Sie später in ABAP-Programmen verwenden zu können.
1. Legen Sie im Dictionary einen Tabellentyp ZIT_SFLIGHT## an. Der
Tabellentyp soll auf dem Zeilentyp der Datenbanktabelle SFLIGHT basieren
und nach dem Flugdatum (FLDATE) sortiert sein
2. Legen Sie ein ABAP-Programm ZBC430_##_ITAB_SORTED an.
Erzeugen Sie in diesem Programm als Arbeitsbereich ein strukturiertes
Datenobjekt (wa_sflight) vom Typ SFLIGHT und eine interne Tabelle auf
Basis des soeben definierten Tabellentyps. Selektieren Sie aus der Tabelle
SFLIGHT die Daten einer Fluggesellschaft (z.B. 'JL') in den Arbeitsbereich
und geben diesen unsortiert in einer Liste aus.
3. Erweitern Sie das Programm folgendermaßen. Fügen Sie eine Linie
(ABAP-Befehl ULINE ) in die Liste ein. Laden Sie die gleichen Daten
erneut über den SELECT-Befehl mit Array-Fetch in die interne Tabelle vom
Typ ZIT_SFLIGHT## und geben Sie den Inhalt der Tabelle mit Hilfe des
LOOP-Befehls auf der selben Liste aus. Vergleichen Sie die Reihenfolge, der
Daten in den beiden Listenabschnitten.
Ergebnis
Quelltextauszug: SAPBC430S_ITAB_SORTED
REPORT SAPBC430S_ITAB_SORTED.
WRITE: / wa_sflight-carrid,
wa_sflight-connid,
wa_sflight-fldate,
wa_sflight-price,
wa_sflight-currency,
wa_sflight-planetype.
ENDSELECT.
ULINE.
wa_sflight-fldate,
wa_sflight-price,
wa_sflight-currency,
wa_sflight-planetype.
ENDLOOP.
Unternehmensszenario
Sie sollen für Ihr Projektteam die Struktur der Personendaten insoweit erweitern,
dass Sie eine beliebig lange Telefonliste für jeden Mitarbeiter aufnehmen kann.
Aufgabe:
Legen Sie eine interne Tabelle auf Basis eines Datenobjektes an, um Sie in eine
Struktur aufzunehmen. Verwenden Sie diese in einem ABAP-Programm.
1. Legen Sie im Dictionary einen Tabellentyp einer Standard-Tabelle
ZIT_PHONE_NUMBER## an. Der Tabellentyp soll auf dem Zeilentyp
der bestehenden Struktur STR_PHONE basieren.
2. Erweitern Sie im Dictionary Ihre bestehende StrukturZPERSON##. Die
neue Komponente soll den Namen PHONE erhalten und auf der internen
Tabelle ZIT_PHONE_NUMBER## basieren.
3. Legen Sie ein ABAP-Programm ZBC430_##_STRUCT_DEEP
an. Kopieren Sie dazu Ihre Lösung des Programmes
ZBC430_##_STRUCT_NESTED oder die Mustervorlage
SAPBC430S_STRUCT_NESTED. Erweitern Sie dieses Programm um
einen Arbeitsbereich für ein strukturiertes Datenobjekt (wa_phone) vom
Typ STR_PHONE.
4. Erweitern Sie das Programm folgendermaßen:
Fügen Sie drei Telefonnummern in das strukturierte Datenobjekt wa_person
ein und geben Sie diese Daten mit Hilfe des LOOP-Befehls auf der selben
Liste aus.
Ergebnis
Quelltextauszug: SAPBC430S_STRUCT_DEEP
REPORT sapbc430s_struct_deep.
START-OF-SELECTION.
wa_person-name-firstname = 'Harry'.
wa_person-name-lastname = 'Potter'.
wa_phone-p_type = 'P'.
wa_phone-p_number = '+31-10-9938990'.
INSERT wa_phone INTO TABLE wa_person-phone.
wa_phone-p_type = 'F'.
wa_phone-p_number = '+31-10-9938991'.
INSERT wa_phone INTO TABLE wa_person-phone.
wa_phone-p_type = 'M'.
wa_phone-p_number = '+31-79-12211433'.
INSERT wa_phone INTO TABLE wa_person-phone.
*Write on List
WRITE: / wa_person-name-firstname ,
wa_person-name-lastname ,
wa_person-street ,
wa_person-nr ,
wa_person-zip ,
wa_person-city .
WRITE: / 'Phone-Numbers:'.
Unternehmensszenario
Sie sollen für Ihr Unternehmen Informationseinheiten sog. Entitäten in der
Datenbank abbilden.
Tabellen
Die Struktur der Objekte der Anwendungsentwicklung werden in Tabellen auf der
unterliegenden relationalen Datenbank abgebildet.
Die Attribute dieser Objekte entsprechen Feldern der Tabelle.
Eine Tabelle besteht aus Spalten (Felder) und Zeilen (Einträgen). Sie hat
einen Namen und verschiedene allgemeine Eigenschaften wie z.B. die
Auslieferungsklasse oder die Pflegeerlaubnis.
Ein Feld hat einen eindeutigen Namen und Eigenschaften, z.B. kann es
Schlüsselfeld sein.
Eine Tabelle hat ein oder mehrere Schlüsselfelder, den sog. Primärschlüssel.
Die Werte dieser Schlüsselfelder identifizieren einen Eintrag der Tabelle eindeutig.
Für Felder, die Währungsangaben (Datentyp CURR) bzw. Mengenangaben
(Datentyp QUAN) enthalten, muß eine Referenztabelle angegeben werden.
Diese muß ein Feld (Referenzfeld) mit dem Währungsschlüsselformat (Datentyp
CUKY) bzw. dem Format für Mengeneinheiten (Datentyp UNIT) enthalten.
Die Zuordnung des Feldes zum Referenzfeld wird erst zur Laufzeit durch ein
Programm hergestellt.
Ein Feld ist kein unabhängiges Objekt; es hängt von der Tabelle ab. Ein Feld kann
nur innerhalb einer Tabelle gepflegt werden.
Zu einem Feld können Datentyp und Anzahl der Stellen direkt eingeben werden.
In diesem Fall wird kein Datenelement benötigt. Stattdessen werden durch die
Angabe eines direkten Typs Datentyp und Anzahl der Stellen festgelegt.
Die Datentypeigenschaften eines Datenelements können auch durch die Angabe
eines Eingebauten Typs, wobei Datentyp und Anzahl der Stellen direkt
eingegeben werden, festgelegt werden.
In der Tabelle SPFLI ist der Flugplan hinterlegt. Die Tabellenfelder AIRPFROM
(Startflughafen) und AIRPTO (Zielflughafen) haben die gleiche Domäne
S_AIRPID. Beide Felder verwenden die gleiche Domäne, weil beide Felder
Flughäfen enthalten und damit die gleichen technischen Eigenschaften besitzen.
Sie haben jedoch unterschiedliche semantische Bedeutung und verwenden
unterschiedliche Datenelemente, um dies zu dokumentieren. Das Feld
AIRPFROM verwendet das Datenelement S_FROMAIRP und das Feld AIRPTO
verwendet das Datenelement S_TOAIRP.
Achtung: Stammt der Index von einer großen Tabelle ( < 100.000
Datensätze ), braucht das Anlegen evtl. mehrere Minuten oder gar Stunden
( bei Tabellen im BW-Umfeld ). Außerdem ist während der Neuanlage
des Index, dieser nicht für die Datenbankzugriffe verwendbar, was zu
einer zusätzlichen Belastung (Full Table Scan) der Datenbank führen
würde, wenn Datensätze aus der entsprechenden Tabelle gelesen werden.
eine Tabelle unerwartet schnell gewachsen sein, sollten vor der Umsetzung die
Technischen Einstellungen dieser Tabelle nochmals überprüft und gegebenenfalls
angepasst werden.
Mit der Datenart können Sie auf logischer Seite festlegen, in welchem physischen
Bereich der Datenbank (z.B. bei ORACLE der Tablespace) Ihre Tabelle auf der
Datenbank abgelegt wird. Mit der korrekten Wahl der Datenart wird die Tabelle
beim Aktivieren im ABAP Dictionary automatisch im richtigen Bereich auf der
Datenbank angelegt.
Die wichtigsten Datenarten sind Stammdaten, Bewegungsdaten,
Organisationsdaten und Systemdaten.
Stammdaten sind Daten, die nur selten geändert werden. Ein Beispiel für
Stammdaten sind die in einer Adressendatei enthaltenen Daten, wie z.B. Name,
Anschrift und Telefonnummer.
Bewegungsdaten sind Daten, die oft verändert werden. Ein Beispiel sind die in
einem Lager vorhandenen Warenbestände, die sich nach jeder Bestellung ändern.
Organisationsdaten sind Daten, die bei der Einstellung des Systems beim
Customizing angegeben werden und sich danach nur selten ändern. Ein Beispiel
sind die Länderschlüssel.
Systemdaten sind Daten, die das SAP-System selbst benötigt. Ein Beispiel sind
Programm-Sourcen.
Für den Kunden stehen weitere Datenarten, sog. Kundendatenarten (USER,
USER1), zur Verfügung. Diese sind für kundeneigene Entwicklungen vorgesehen.
Auf der Datenbank müssen dafür eigene Speicherbereiche allokiert werden.
Die Größenkategorie beschreibt den vermuteten Platzbedarf der Tabelle auf der
Datenbank.
Beim Anlegen der Tabelle auf der Datenbank wird für diese ein initialer
Speicherbereich (Initial Extent) reserviert. Des Größe des Initial Extens ist bei
allen Größenkategorien identisch. Benötigt die Tabelle später durch Erfassen
von Daten mehr Platz, so werden Speicherbereiche (Extents) hinzugefügt. Diese
hinzugefügten Speicherbereiche haben eine feste Größe, die durch die im ABAP
Dictionary bestimmte Größenkategorie festgelegt ist.
Sie können eine Größenkategorie zwischen 0 und 4 wählen. Jeder Kategorie
wird eine feste Extent-Größe zugeordnet, die vom verwendeten Datenbanksystem
abhängt.
Die korrekte Zuordnung einer Größenkategorie stellt sicher, daß nicht sehr
viele kleine Extents zu einer Tabelle entstehen. Weiterhin wird vermieden, daß
Speicherplatz durch Anlegen von zu großen Extents verschwendet wird.
Zusammenfassung
• Alle betriebswirtschaftlichen Daten werden in Form von Tabellen verwaltet,
deren Definition im ABAP Dictionary abgelegt ist.
• Zur Tabellendefinition wird ein zweistufiges Domänenkonzept benutzt. Die
semantische Definition wird über Datenelemente und die technische über
Domänen realisiert.
• Die Felder von Include-Strukturen können in Tabellen inkludiert werden.
• Die technischen Einstellungen einer Tabelle bestimmen, wie die Tabelle auf
der Datenbank angelegt wird (Tablespace, Extentgröße) und ob Änderungen
an den Datensätzen protokolliert werden.
Unternehmensszenario
Die Tabellen des Flugmodells sollen in den Übungen um eine
Mitarbeiterverwaltung erweitert werden. Diese Mitarbeiterverwaltung soll es
den Fluggesellschaften ermöglichen, Daten über die bei ihnen beschäftigten
Mitarbeiter (zum Beispiel Name, Personalnummer, Gehalt, Abteilung) und über
organisatorische Zuordnungen (Abteilungen der Fluggesellschaften) zu erfassen
und auszuwerten.
Hierzu müssen in dieser Übung zwei Tabellen angelegt werden, die die Daten
der Mitarbeiter und der in den Fluggesellschaften vorhandenen Abteilungen
aufnehmen.
In Tabelle ZEMPLOY## werden die Daten zu den Mitarbeitern gepflegt. Neben
Namen und Adressen sind in Tablelle ZEMPLOY## auch die Gehälter der
Mitarbeiter hinterlegt. In Tabelle ZDEPMENT## sind die Abteilungen der
Fluggesellschaften hinterlegt. Jede Abteilung ist über eine Telefonummer und
Faxnummer erreichbar. Diese Tabellen werden in den folgenden Übungen dann
Schritt für Schritt erweitert.
Aufgabe 1:
Legen Sie die zwei transparenten Tabellen ZEMPLOY## und ZDEPMENT## an.
Bestimmen Sie deren Schlüsselfelder.
Notiz: Bevor Sie die Tabellen aktivieren können, müssen Sie noch die
technischen Einstellungen der Tabellen definieren. Die Vorgehensweise
wird in den letzten Aufgabenpunkten beschrieben. Die ersten
Aufgabenpunkte können auch ohne Aktivierung der Tabelle gelöst
werden.
Für drei Fluggesellschaften sind Daten gepflegt. Eine Fluggesellschaft
hat 20.000 Mitarbeiter und zwischen 10 und 30 Abteilungen. Die Daten
sind weder zu puffern noch zu protokollieren. Die Pufferung wird in der
Übung zum nächsten Kapitel überdacht.
Tabelle ZEMPLOY##
Feld Datenelement Domäne Typ, Bedeutung
Länge
CLIENT S_MANDT MANDT Mandant
CARRIER S_CARR_ID S_CARR_ID Flugge-
sellschaft
EMP_NUM eigenes eigenes NUMC, Personal-
10 nummer
FIRST_NAME S_FNAME S_FNAME Vorname
LAST_NAME S_LNAME S_LNAME Nachname
DEPARTMENT eigenes eigenes CHAR, Abteilungskürzel
4
AREA eigenes eigenes CHAR, Bereich
1
SALARY eigenes eigenes CURR, Gehalt
10
Dez. 2
CURRENCY S_CURRCODE S_CURR Währung
Tabelle ZDEPMENT##
Feld Datenele- Domäne Typ, Bedeutung
ment Länge
CLIENT S_MANDT MANDT Mandant
CARRIER S_CARR_ID S_CARR_ID Flugge-
sellschaft
DEPARTMENT eigenes eigenes CHAR, Abteilungskürzel
4
TELNR eigenes S_PHONE CHAR, Telefon
30
FAXNR eigenes S_PHONE CHAR, Faxnummer
30
Aufgabe 2:
Stellen Sie sicher, daß für die Aufzeichnung der Änderungen in beiden Tabellen
stets die gleichen Felder zur Verfügung stehen, indem Sie diese Felder über eine
Unterstruktur ZCHANGE## in beide Tabellen einhängen.
1. Legen Sie die Struktur ZCHANGE## an. Legen Sie für das Feld letzter
Änderer ein neues Datenelement an, verwenden Sie die Domäne welche Sie
für die Personalnummer angelegt haben. Benutzen Sie S_CHDATE als
Datenelement für das Datum der letzten Änderung.
2. Fügen Sie ZCHANGE## als Include in die Tabellen ZEMPLOY## und
ZDEPMENT##.
3. Finden Sie heraus, welche Aktionen auf der Datenbank durchgeführt wurden.
4. Starten Sie das Programm BC430_CHECK in der Transaktion SE38.
Notiz: Bevor Sie die Tabellen aktivieren können, müssen Sie noch die
technischen Einstellungen der Tabellen definieren. Die Vorgehensweise
wird in den letzten Aufgabenpunkten beschrieben. Die ersten
Aufgabenpunkte können auch ohne Aktivierung der Tabelle gelöst
werden.
Für drei Fluggesellschaften sind Daten gepflegt. Eine Fluggesellschaft
hat 20.000 Mitarbeiter und zwischen 10 und 30 Abteilungen. Die Daten
sind weder zu puffern noch zu protokollieren. Die Pufferung wird in der
Übung zum nächsten Kapitel überdacht.
Tabelle ZEMPLOY##
Feld Datenelement Domäne Typ, Bedeutung
Länge
CLIENT S_MANDT MANDT Mandant
CARRIER S_CARR_ID S_CARR_ID Flugge-
sellschaft
EMP_NUM eigenes eigenes NUMC, Personal-
10 nummer
FIRST_NAME S_FNAME S_FNAME Vorname
LAST_NAME S_LNAME S_LNAME Nachname
DEPARTMENT eigenes eigenes CHAR, Abteilungskürzel
4
AREA eigenes eigenes CHAR, Bereich
1
SALARY eigenes eigenes CURR, Gehalt
10
Dez. 2
CURRENCY S_CURRCODE S_CURR Währung
Feld Wert
Referenztabelle ZEMPLOY##
Referenzfeld Währung
Tabelle ZEMPLOY##
Datenart APPL0 (Stammdaten)
Größenkategorie 2
Pufferung nicht erlaubt
Protokollierung keine Protokollierung
Tabelle ZDEPMENT##
Feld Datenele- Domäne Typ, Bedeutung
ment Länge
CLIENT S_MANDT MANDT Mandant
CARRIER S_CARR_ID S_CARR_ID Flugge-
sellschaft
DEPARTMENT eigenes eigenes CHAR, Abteilungskürzel
4
TELNR eigenes S_PHONE CHAR, Telefon
30
FAXNR eigenes S_PHONE CHAR, Faxnummer
30
h) Dort legen Sie die Kurzbeschreibung, den Datentyp (CHAR) und die
Feldlänge (30) fest. Aktivieren Sie die Domäne.
i) Gehen Sie ein Bild zurück (mit F3) zur Datenelementdefinition und
aktivieren Sie Ihr Datenelement.
j) Sichern Sie Ihre Tabelle.
k) Definieren Sie die Schlüsselfelder für Tabelle ZDEPMENT##, indem
Sie hinter den Feldnamen die Spalte Key ankreuzen. Die Felder
Mandant, Fluggesellschaft, und Abteilungskürzel identifizieren
einen Eintrag eindeutig. Sie müssen deshalb als Schlüsselfelder
gekennzeichnet werden.
l) Aktivieren Sie Ihre Tabelle, und legen Sie die technischen Einstellungen
fest:
Da sich die Inhalte der Tabelle ZDEPMENT## selten ändern, muß als
Datenart APPL0 (Stammdaten) gewählt werden. Die erwartete Anzahl
von Sätzen in Tabelle ZDEPMENT## ist mit maximal 90 definiert,
daher müssen Sie Größenkategorie 0 wählen. Die Tabelle sollte weder
gepuffert noch protokolliert sein.
Tabelle ZDEPMENT##
Feld Wert
Datenart APPL0 (Stammdaten)
Größenkategorie 0
Pufferung nicht erlaubt
Protokollierung keine Protokollierung
Aufgabe 2:
Stellen Sie sicher, daß für die Aufzeichnung der Änderungen in beiden Tabellen
stets die gleichen Felder zur Verfügung stehen, indem Sie diese Felder über eine
Unterstruktur ZCHANGE## in beide Tabellen einhängen.
1. Legen Sie die Struktur ZCHANGE## an. Legen Sie für das Feld letzter
Änderer ein neues Datenelement an, verwenden Sie die Domäne welche Sie
für die Personalnummer angelegt haben. Benutzen Sie S_CHDATE als
Datenelement für das Datum der letzten Änderung.
a) Markieren Sie im Einstiegsbild des ABAP Dictionary Datentyp und
geben Sie ZCHANGE## in das entsprechende Feld ein. Wählen Sie
Anlegen.
b) Markieren Sie Struktur im folgenden Dialogfenster.
c) Geben Sie in der Spalte Komponente die Feldnamen und in der Spalte
Komponententyp die zugehörigen Datenelemente an. Legen Sie Ihr
eigenes Datenelement für das erste Feld an. Verwenden Sie die
Domäne, die Sie für die Personalnummer in Tabelle ZEMPLOY##
angelegt haben.
d) Legen Sie ein Feld für die Personalnummer und eins für das
Änderungsdatum an. Für das zweite Feld benutzen Sie das
Datenelement S_CHDATE.
e) Aktivieren Sie die Struktur ZCHANGE##.
a) Starten Sie die Transaktion SE38 über das Eingabefeld ein. Starten
Sie Programm BC430_CHECK.
Unternehmensszenario
Bei Performanceuntersuchungen einiger Anwendungen sind Sie auf
Select-Anweisungen gestossen, die auf der der Datenbank scheinbar auf andere
Tabellen zugreifen, als im entsprechenden ABAP-Coding angewiesen.
Die Idee von Clustertabellen ist, daß man über verschiedene Tabellen verteilte,
funktional abhängige Daten zusammen in einer Datenbanktabelle ablegt.
Entsprechend bildet die Schnittmenge der Schlüsselfelder der Clustertabellen den
Schlüssel des Tabellenclusters (Clusterschlüssel).
Die von einem Clusterschlüssel abhängigen Daten werden im VARDATA-Feld
des Tabellencluster abgelegt. Reicht das VARDATA-Feld nicht aus, um alle
abhängigen Daten aufzunehmen, wird von der Datenbankschnittstelle ein
Überlaufsatz angelegt. Über das Feld PAGNO wird die Eindeutigkeit innerhalb
des Tabellenclusters gewährleistet.
Der Inhalt des VARDATA-Feldes wird von der Datenbankschnittstelle
komprimiert. Entsprechend beinhaltet das VARDATA-Feld eine Beschreibung
zur Dekomprimierung seiner Daten. Die Felder TIMESTAMP und PAGELG
beinhalten administrative Informationen.
Der entscheidende Vorteil von Pool- und Clustertabellen liegt darin, daß die Daten
komprimiert auf der Datenbank abgelegt werden. Dadurch reduziert sich der
benötigte Speicherplatz und die Netzwerklast.
Die Zusammenfassung von Tabellen zu Tabellenpools oder Tabellenclustern führt
zu weniger Tabellen, die Komprimierung zu weniger Feldern auf der Datenbank.
In der Folge werden weniger unterschiedliche SQL-Anweisungen ausgeführt.
Pool- und Clustertabellen werden nicht als separate Tabellen auf der Datenbank
angelegt. Insofern vereinfacht sich die Administration. Bei Clustertabellen werden
funktional abhängige Daten zusammen gelesen, was weniger Datenbankzugriffe
zur Folge hat.
Der entscheidende Nachteil liegt in der eingeschränkten Datenbankfunktionalität.
Es ist nicht möglich, für Nichtschlüsselfelder einen Index anzulegen. Es gibt
entweder Primärindizes oder Indizes auf eine Teilmenge der Schlüsselfelder. Die
Verwendung von Datenbankviews oder ABAP JOIN‘s ist genauso ausgeschlossen,
wie Table Appends. Auf die Daten in Pool- oder Clustertabellen kann
ausschließlich über OPEN SQL zugegriffen werden (kein Native SQL).
Für Pooltabellen werden nur die WHERE-Bedingungen für Schlüsselfelder, für
Clustertabellen nur die WHERE-Bedingungen für die Felder des Clusterschlüssels
(Untermenge der Schlüsselfelder) an die Datenbank übertragen. ORDER BY -
oder GROUP BY - Klauseln für Nichtschlüsselfelder werden nicht übertragen.
Für Pooltabellen braucht man längere Schlüssel als semantisch notwendig.
Unternehmensszenario
Einige Transaktionen in Ihren Anwendungen beinhalten Select-Anweisungen,
die sehr lange Laufzeiten verursachen. Sie sollten nun ohne die Programme zu
verändern, die Performance verbessern.
Über einen Index kann die Selektion von Datensätzen aus einer Tabelle
beschleunigt werden.
Ein Index kann als eine auf bestimmte Felder reduzierte Kopie einer
Datenbanktabelle aufgefaßt werden. Die Daten liegen in dieser Kopie in sortierter
Form vor. Diese Sortierung ermöglicht einen schnellen Zugriff auf die Sätze der
Tabelle (z.B. über binäre Suche). Im Index sind nicht alle Felder der Tabelle
enthalten. Damit alle Feldinhalte gelesen werden können, ist in einem Index noch
ein Zeiger vom Indexeintrag auf den zugehörigen Tabelleneintrag enthalten.
• Beachten Sie beim Anlegen von Indizes bitte folgende Punkte:
– Ein Index ist bei der Selektion nur bis zum letzten spezifizierten Feld
von Nutzen! An erster Stelle sollten die Felder stehen, die bei vielen
Selektionen in der WHERE-Klausel spezifiziert werden.
– In einem Index sind nur solche Felder sinnvoll, deren Werte die
Datenmenge stark einschränken.
– Beim Ändern eines Datensatzes aus einer Tabelle muß die Sortierung
im Index angepaßt werden. Tabellen, deren Inhalte oft verändert
werden, sollten nicht zu viele Indizes besitzen.
– Achten Sie darauf, daß die Indizes zu einer Tabelle möglichst disjunkt
sind.
Welcher Index zur Tabelle von der Datenbank für den Zugriff auf Datensätze
verwendet wird, wird vom Optimizer der Datenbank entschieden.
Die Pufferung einer Tabelle erhöht die Performance beim lesenden Zugriff auf
die Sätze der Tabelle.
Die Sätze einer gepufferten Tabelle werden beim Zugriff auf die Tabelle direkt
aus dem lokalen Puffer des Applikationsservers gelesen, auf dem die zugreifende
Transaktion läuft. Zeitaufwendige Datenbankzugriffe entfallen damit. Der Zugriff
wird um den Faktor 10 bis 100 besser. Die Erhöhung der Geschwindigkeit hängt
von der Struktur der Tabelle und der genauen Systemkonfiguration ab. Die
Pufferung kann also die Performance des Systems erheblich steigern.
Wenn durch Einlagern neuer Daten Platzbedarf im Puffer entsteht, werden
diejenigen Daten verdrängt, auf die am längsten nicht zugegriffen wurde. Die
Verdrängung findet asynchron zu bestimmten Zeitpunkten statt, die dynamisch
anhand der Zugriffe auf den Puffer bestimmt werden. Verdrängung findet nur statt,
wenn zu diesem Zeitpunkt der freie Platz im Puffer einen voreingestellten Wert
unterschreitet oder die Zugriffsqualität zu schlecht ist.
Über die Eingabe von /$TAB im Kommandofeld können die Tabellenpuffer auf
dem entsprechenden Applikationsserver zurückgesetzt werden. Verwenden Sie
dieses Kommando nur, wenn Inkonsistenzen im Puffer entstanden sind. Das
Füllen der Puffer kann in großen Systemen mehrere Stunden dauern. Während
dieser Zeit ist die Performance erheblich beeinträchtigt.
Die Pufferungsart bestimmt, welche Sätze der Tabelle beim Zugriff auf einen
Satz der Tabelle in den Puffer des Applikationsservers geladen werden. Man
unterscheidet die folgenden Pufferungsarten:
• Vollständige Pufferung: Sobald auf einen Satz der Tabelle zugegriffen
wird, werden alle Sätze der Tabelle in den Puffer geladen.
• Generische Pufferung: Beim Zugriff auf einen Satz der Tabelle werden alle
Sätze in den Puffer geladen, deren linksbündiger Teil des Schlüssels mit
diesem Satz übereinstimmt.
• Pufferung von Einzelsätzen: Nur der Satz wird in den Puffer geladen,
auf den zugegriffen wurde.
Bei vollständiger Pufferung befindet sich die Tabelle entweder ganz oder gar
nicht im Puffer. Beim Zugriff auf einen Satz der Tabelle werden alle Sätze der
Tabelle in den Puffer geladen.
Bei der Entscheidung, ob eine Tabelle vollständig gepuffert werden soll, müssen
die Tabellengröße, die Anzahl der lesenden Zugriffe und die Zahl der schreibenden
Zugriffe auf die Tabelle berücksichtigt werden. Je kleiner die Tabelle ist, je
häufiger sie gelesen und je seltener in sie geschrieben wird, um so günstiger ist
es, die Tabelle vollständig zu puffern.
Auch für Tabellen, auf die häufig Zugriffe auf nicht vorhandene Sätze abgesetzt
werden, ist vollständige Pufferung günstig. Da sich alle Sätze der Tabelle im
Puffer befinden, kann direkt im Puffer entschieden werden, ob ein Satz vorhanden
ist oder nicht.
Die Datensätze sind im Puffer entsprechend dem Tabellenschlüssel sortiert.
Bei Zugriffen über SELECT können nur Felder bis zum letzten spezifizierten
Schlüsselfeld für den Zugriff verwendet werden. Bei solchen Zugriffen sollte also
ein möglichst großer linksbündiger Teil des Schlüssels verwendet werden. Ist
beispielsweise das erste Schlüsselfeld nicht versorgt, so erfolgt ein Full-Table-Scan
im Puffer. Unter diesen Umständen kann ein direkter Zugriff auf die Datenbank
effizienter sein, falls dort ein geeigneter Sekundärindex vorhanden ist.
Bei generischer Pufferung werden beim Zugriff auf einen Satz der Tabelle alle
mit diesem Satz in den generischen Schlüsselfeldern übereinstimmenden Sätze
in den Puffer geladen. Der generische Schlüssel ist ein linksbündiger Teil des
Primärschlüssels der Tabelle, der bei der Wahl der Pufferungsart festgelegt werden
muß. Der generische Schlüssel sollte so gewählt werden, daß die generischen
Bereiche nicht zu klein werden und damit nicht zu viele generische Bereiche
entstehen. Gibt es pro generischem Bereich nur einige wenige Sätze, so ist es in der
Regel günstiger, die Tabelle vollständig zu puffern. Wird der generische Schlüssel
zu groß gewählt, so werden bei Änderungen an den Einträgen der Tabelle zu viele
Daten invalidiert, was sich ebenfalls negativ auf die Performance auswirken kann.
Eine Tabelle sollte generisch gepuffert werden, wenn für die Verarbeitung in der
Regel nur bestimmte generische Bereiche der Tabelle benötigt werden.
Mandantenabhängige, vollständig gepufferte Tabellen werden automatisch
generisch gepuffert. Das Mandantenfeld ist der generische Schlüssel. Es wird
davon ausgegangen, daß auf einem Applikationsserver nicht auf allen Mandanten
gleichzeitig gearbeitet wird. Sprachabhängige Tabellen sind ein weiteres Beispiel
für den sinnvollen Einsatz generischer Pufferung. Der generische Schlüssel
umfaßt alle Schlüsselfelder bis einschließlich des Sprachfeldes.
Die generischen Bereiche werden im Puffer als eigenständige Objekte verwaltet.
Die Verwaltung der generischen Bereiche ist dabei völlig analog zur Verwaltung
vollständig gepufferter Tabellen. Beachten Sie deshalb auch die zur vollständigen
Pufferung gegebenen Hinweise.
Es werden nur die Sätze in den Puffer geladen, auf die tatsächlich zugegriffen
wird. Pufferung von Einzelsätzen spart dadurch gegenüber generischer bzw.
vollständiger Pufferung Speicherplatz im Puffer ein. Der Verwaltungsaufwand
im Puffer ist allerdings höher als bei generischer oder vollständiger Pufferung.
Es sind weiterhin zum Laden der Sätze wesentlich mehr Datenbankzugriffe
erforderlich als bei den anderen Pufferungsarten.
Pufferung von Einzelsätzen ist insbesondere bei großen Tabellen empfehlenswert,
für die nur auf wenige Sätze wiederholt durch SELECT SINGLE zugegriffen
wird. Alle Zugriffe auf die Tabelle, die nicht über SELECT SINGLE abgesetzt
werden, gehen am Puffer vorbei direkt auf die Datenbank.
Wird mit SELECT SINGLE auf einen noch nicht gepufferten Satz zugegriffen,
erfolgt ein Datenbankzugriff, um den Satz zu laden. Enthält die Tabelle keinen
Satz zum angegebenen Schlüssel, so wird dieser Satz im Puffer als nicht existent
vermerkt. Bei einem späteren Zugriff mit demselben Schlüssel kann damit ein
erneuter Datenbankzugriff vermieden werden.
Zum Laden einer Tabelle ist bei vollständiger Pufferung nur ein Datenbankzugriff
erforderlich, während bei Pufferung von Einzelsätzen viele Datenbankzugriffe
notwendig sind. Deshalb ist bei kleinen Tabellen, auf die oft zugegriffen wird,
vollständige Pufferung in der Regel günstiger.
Da die Puffer lokal auf den Applikationsservern liegen, ist es nötig, diese nach
Änderungen an den Daten einer gepufferten Tabelle zu synchronisieren. Diese
Synchronisation erfolgt in festen Zeitintervallen, deren Dauer im System-Profile
eingestellt werden kann. Der entsprechende Parameter heißt „rdisp/bufreftime“
und gibt die Länge des Intervalls in Sekunden an. Der Wert muss zwischen 60 und
3600 liegen. Wir empfehlen einen Wert zwischen 60 und 240.
Das folgende Beispiel zeigt, wie die lokalen Puffer des Systems synchronisiert
werden. Wir gehen von einem System mit zwei Applikationsservern aus.
Ausgangssituation: Beide Server haben bisher noch nicht auf Sätze der
vollständig zu puffernden Tabelle SCARR zugegriffen. Die Tabelle ist deshalb
noch nicht in den lokalen Puffern der beiden Server enthalten.
• Zeitpunkt 1: Ein Anwender auf Server 1 liest Sätze aus der Tabelle SCARR
auf der Datenbank.
• Zeitpunkt 2: Die Tabelle SCARR wird vollständig in den lokalen Puffer
von Server 1 geladen. Für Zugriffe von Server 1 auf die Daten der Tabelle
SCARR wird nun der lokale Puffer dieses Servers verwendet.
• Zeitpunkt 3: Ein Anwender auf Server 2 greift auf Sätze der Tabelle zu. Da
sich die Tabelle noch nicht im lokalen Puffer von Server 2 befindet, werden
die Sätze direkt von der Datenbank gelesen.
• Zeitpunkt 4: Die Tabelle SCARR wird in den lokalen Puffer von Server
2 geladen. Server 2 verwendet daher auch seinen lokalen Puffer, um beim
nächsten Lesen von Tabelle SCARR auf deren Daten zuzugreifen.
• Zeitpunkt 5: Ein Anwender auf Server 1 löscht Sätze aus der Tabelle
SCARR und aktualisiert die Datenbank.
• Zeitpunkt 6: Server 1 schreibt einen Eintrag in die Synchronisationstabelle.
• Zeitpunkt 7: Server 1 aktualisiert seinen lokalen Puffer.
• Zeitpunkt 11: Server 2 greift erneut auf Sätze der Tabelle SCARR zu. Da
SCARR im lokalen Puffer von Server 2 invalidiert ist, erfolgt der Zugriff
über die Datenbank.
• Zeitpunkt 12: Die Tabelle wird erneut un den lokalen Puffer von Server 2
geladen. Die Informationen über Tabelle SCARR sind nun wieder konsistent
auf den Servern und der Datenbank.
Vor- und Nachteile dieses Verfahrens zur Puffersynchronisation:
• Vorteil: Die Netzlast wird gering gehalten. Würden die Puffer sofort nach
jeder Änderung synchronisiert, müßte jeder Server jede Änderung an einer
gepufferten Tabelle allen anderen Servern über das Netz mitteilen. Dies
würde sich negativ auf die Performance auswirken.
• Nachteil: Die lokalen Puffer der Applikationsserver können zwischen den
Synchronisationszeitpunkten veraltete Daten enthalten.
Daraus folgt:
• Es dürfen nur solche Tabellen gepuffert werden, auf die sehr selten
schreibend zugegriffen wird (read mostly) oder für die solche temporären
Inkonsistenzen keine Bedeutung haben.
• Tabellen, deren Einträge sich oft verändern, sollten nicht gepuffert werden.
Sonst findet ein ständiges Invalidieren und Neuladen statt, was sich negativ
auf die Performance auswirkt.
Ein Index ist ein Hilfsmittel, um lesende Zugriffe auf eine Tabelle zu
beschleunigen. Ein Index kann als eine sortierte, auf die Indexfelder reduzierte
Kopie der Tabelle aufgefaßt werden.
Die Tabellenpuffer befinden sich lokal auf den Applikationsservern.
Die Pufferung kann die Performance beim Zugriff auf Daten einer Tabelle
erheblich steigern. Die Wahl der richtigen Pufferungsart ist wichtig.
Die Tabellenpuffer werden in festen Zeitintervallen an Änderungen der
Tabelleneinträge angepaßt.
Je häufiger auf eine Tabelle lesend zugegriffen wird und je seltener die
Tabelleninhalte verändert werden, desto günstiger ist es, die Tabelle zu puffern.
Der Entscheidungsbaum zum Puffern von Tabellen soll Ihnen zur Handreichung
auf Ihrem Entwicklungssystem dienen. Die oben genannten Erkenntnisse sind hier
in Diagrammform abgebildet.
Unternehmensszenario
Für die tägliche Arbeit benötigen die Sachbearbeiter der Fluggesellschaften einen
schnellen Zugriff auf die Daten der Tabellen der Mitarbeiterverwaltung. In dieser
Übung sollen die Zugriffe auf die Daten in diesen Tabellen beschleunigt werden.
Auf die Personaldaten eines Mitarbeiters wird oft über die Kombination aus Vor-
und Nachnamen zugegriffen. Dabei ist der Nachname häufiger bekannt (beim
Zugriff spezifiziert) als der Vorname. Hierzu muß ein Index angelegt werden.
Für die Zusammenstellung der Mannschaft eines Fluges ist eine Zuordnung der
Mitarbeiter (Piloten und Flugbegleiter) zu Flügen notwendig. Hierzu muß eine
Tabelle angelegt werden, in der zu jedem Flug die beteiligten Mitarbeiter und
deren Funktionen auf dem Flug erfaßt werden können.
Aufgabe 1:
Legen Sie einen Index an, der den Zugriff auf die Kombination aus Vornamen
und Nachnamen unterstützt. Sorgen Sie dafür, daß der Index auf der Datenbank
angelegt wird.
Die Personaldaten der Mitarbeiter werden in der Tabelle ZEMPLOY## verwaltet.
Für diese Tabelle ist daher der Index anzulegen.
1. Legen Sie einen Index für die Tabelle ZEMPLOY## an. Er muß die Felder
Mandant, Nachname, und Vorname enthalten. Ordnen Sie die Felder in
dieser Reihenfolge.
Aufgabe 2:
Kopieren Sie die Tabelle SFLCREW auf die Tabelle ZFLCREW##. Aktivieren
Sie die Tabelle ZFLCREW## anschließend.
1. Kopieren Sie die Tabelle SFLCREW auf die Tabelle ZFLCREW##. Ersetzen
Sie das vorhandene Datenelement für die Mitarbeiternummer durch ein
eigenes Datenelement.
Aufgabe 3:
Pflegen Sie die Einstellungen zur Pufferung der Tabellen ZDEPMENT## und
ZFLCREW#.
Überdenken Sie diese Einstellungen zur Pufferung der Tabellen ZDEPMENT##
und ZFLCREW##. Beachten Sie dabei folgende Informationen zur Nutzung
dieser Tabellen.
Die Fluggesellschaften haben zwischen 10 und 30 Abteilungen. Es werden nur
wenige Fluggesellschaften (maximal 3) in den Tabellen gemeinsam verwaltet. Die
Daten über die Mannschaften bereits beendeter Flüge werden alle drei Monate in
eine Archivdatei ausgelagert. Die Tabelle ZFLCREW## hat daher relativ wenige
Einträge (höchstens 5.000 pro Fluggesellschaft).
Auf die Tabellen ZDEPMENT## und ZFLCREW## wird sehr häufig zugegriffen.
Dabei werden Datensätze aus diesen Tabellen oft wiederholt gelesen.
Auf einem Applikationsserver arbeiten nur Verwaltungsmitarbeiter einer
Fluggesellschaft. Die Daten zur Besatzung eines Fluges sind nur innerhalb der
Fluggesellschaft von Interesse. Da die Fluggesellschaften einige Leistungen
gemeinsam erbringen, müssen Verwaltungsmitarbeiter einer Fluggesellschaft
dagegen oft auf die Abteilungsdaten einer anderen Fluggesellschaft zugreifen.
1. Pflegen Sie die Einstellungen zur Pufferung der Tabellen ZDEPMENT##
in den technischen Einstellungen.
Auf einem Applikationsserver werden in der Regel nur die Daten zu einer
Fluggesellschaft benötigt. Deshalb soll die Tabelle generisch mit dem
generischen Schlüssel Mandant und Fluggesellschaft gepuffert werden.
3. Starten Sie das Programm BC430_CHECK in der Transaktion SE38.
Programm BC430_CHECK überprüft die Korrektheit Ihrer Lösungen und
füllt die neu angelegte Tabelle ZFLCREW## mit Beispieldaten, die für
spätere Übungen benötigt werden.
Aufgabe 4: (optional)
Legen Sie für die Mitarbeitertabelle einen Index über die Bereiche einer
Fluggesellschaft an. Stellen Sie sicher, daß dieser Index nur auf den
Datenbanksystemen MAXDB und SQL-Server angelegt wird.
Notiz: Für den Zugriff auf die Mitarbeiterdaten bringt eventuell auch
ein Index über die Bereiche einen Performance-Gewinn, beispielsweise
wenn oft alle Piloten einer Fluggesellschaft selektiert werden. Bei
Performance-Messungen auf verschiedenen Datenbanksystemen hat
sich herausgestellt, daß dieser Performance-Gewinn nur bei den
Datenbanksystemen MAXDB und SQL-Server besteht.
h) Aktivieren Sie den Index. Der Index wird dabei automatisch auf der
Datenbank angelegt.
Aufgabe 2:
Kopieren Sie die Tabelle SFLCREW auf die Tabelle ZFLCREW##. Aktivieren
Sie die Tabelle ZFLCREW## anschließend.
1. Kopieren Sie die Tabelle SFLCREW auf die Tabelle ZFLCREW##. Ersetzen
Sie das vorhandene Datenelement für die Mitarbeiternummer durch ein
eigenes Datenelement.
a) Geben Sie im Einstiegsbild des ABAP Dictionary im Feld
Datenbanktabelle SFLCREW ein. Wählen Sie kopieren.
b) Geben Sie im folgenden Dialogfenster im Feld nach Tabelle den
Namen ZFLCREW## ein, und wählen Sie Weiter.
c) Gehen Sie im Änderungsmodus in die Pflege der Tabelle, und ersetzen
Sie das Datenelement SEMP_NUM durch das von Ihnen angelegte
Datenelement für die Mitarbeiternummer.
d) Aktivieren Sie nun Ihre Tabelle.
Aufgabe 3:
Pflegen Sie die Einstellungen zur Pufferung der Tabellen ZDEPMENT## und
ZFLCREW#.
Überdenken Sie diese Einstellungen zur Pufferung der Tabellen ZDEPMENT##
und ZFLCREW##. Beachten Sie dabei folgende Informationen zur Nutzung
dieser Tabellen.
Die Fluggesellschaften haben zwischen 10 und 30 Abteilungen. Es werden nur
wenige Fluggesellschaften (maximal 3) in den Tabellen gemeinsam verwaltet. Die
Daten über die Mannschaften bereits beendeter Flüge werden alle drei Monate in
eine Archivdatei ausgelagert. Die Tabelle ZFLCREW## hat daher relativ wenige
Einträge (höchstens 5.000 pro Fluggesellschaft).
Auf die Tabellen ZDEPMENT## und ZFLCREW## wird sehr häufig zugegriffen.
Dabei werden Datensätze aus diesen Tabellen oft wiederholt gelesen.
Auf einem Applikationsserver arbeiten nur Verwaltungsmitarbeiter einer
Fluggesellschaft. Die Daten zur Besatzung eines Fluges sind nur innerhalb der
Fluggesellschaft von Interesse. Da die Fluggesellschaften einige Leistungen
gemeinsam erbringen, müssen Verwaltungsmitarbeiter einer Fluggesellschaft
dagegen oft auf die Abteilungsdaten einer anderen Fluggesellschaft zugreifen.
1. Pflegen Sie die Einstellungen zur Pufferung der Tabellen ZDEPMENT##
in den technischen Einstellungen.
Auf einem Applikationsserver werden in der Regel nur die Daten zu einer
Fluggesellschaft benötigt. Deshalb soll die Tabelle generisch mit dem
generischen Schlüssel Mandant und Fluggesellschaft gepuffert werden.
a) Verzweigen Sie im Anzeigemodus in die Pflege der Tabelle
ZFLCREW## und wählen Sie Technische Einstellungen. Sie gelangen
in das gewünschte Pflegebild, in dem Sie noch in den Änderungsmodus
wechseln müssen.
b) Markieren Sie Pufferung eingeschaltet. Markieren Sie generische
Pufferung, und wählen Sie 2 als Anzahl der generischen Schlüsselfelder.
c) Aktivieren Sie die technischen Einstellungen der Tabelle ZFLCREW##.
3. Starten Sie das Programm BC430_CHECK in der Transaktion SE38.
Programm BC430_CHECK überprüft die Korrektheit Ihrer Lösungen und
füllt die neu angelegte Tabelle ZFLCREW## mit Beispieldaten, die für
spätere Übungen benötigt werden.
Aufgabe 4: (optional)
Legen Sie für die Mitarbeitertabelle einen Index über die Bereiche einer
Fluggesellschaft an. Stellen Sie sicher, daß dieser Index nur auf den
Datenbanksystemen MAXDB und SQL-Server angelegt wird.
Notiz: Für den Zugriff auf die Mitarbeiterdaten bringt eventuell auch
ein Index über die Bereiche einen Performance-Gewinn, beispielsweise
wenn oft alle Piloten einer Fluggesellschaft selektiert werden. Bei
Performance-Messungen auf verschiedenen Datenbanksystemen hat
sich herausgestellt, daß dieser Performance-Gewinn nur bei den
Datenbanksystemen MAXDB und SQL-Server besteht.
Der Index wird nur dann auf der Datenbank angelegt, wenn Ihr
Schulungssystem auf einem der gewählten Datenbanksysteme läuft.
2. Legen Sie den neuen Index nur auf den Datenbanksystemen MAXDB und
SQL-Server.
a) Markieren Sie auf ausgewählten Datenbank-Systemen.
b) Wählen Sie dann das Pfeilsymbol in dieser Zeile. Wählen Sie
Auswahlliste. Wählen Sie über die F4-Hilfe in der Liste die Kennungen
der Datenbanksysteme ADA für Adabas und MSS für SQL-Server aus.
c) Wählen Sie Weiter.
d) Aktivieren Sie den Index.
Unternehmensszenario
Bei der Eingabe von Werten in Ihren Applikationen, sollen bereits ohne
zusätzliches ABAP-Coding Werteprüfungen auf den Dynpros stattfinden.
Die Domäne beschreibt durch die Angabe von Datentyp und Feldlänge den
Wertebereich eines Feldes. Falls nur eine eingeschränkte Menge von Werten
zulässig ist, können diese als Festwerte angegeben werden.
Die Angabe von Festwerten bewirkt, dass der Wertebereich der Domäne durch
diese Werte beschränkt wird. Festwerte ziehen sofort als Prüfwerte bei Eingabe
auf dem Dynpro. Ebenso wird eine F4-Hilfe zur Verfügung gestellt.
Festwerte können entweder einzeln aufgelistet oder als Intervall angegeben
werden.
Der Wertebereich eines Feldes kann auch durch die Angabe einer Wertetabelle in
der Domäne bestimmt werden.
Im Gegensatz zu den Festwerten erfolgt jedoch durch die alleinige Angabe einer
Wertetabelle noch keine Eingabeprüfung. Eine F4-Hilfe ist ebenso nicht verfügbar.
Der Eintrag einer Wertetabelle bewirkt, dass das System bei der
Fremdschlüsseldefinition einen Vorschlag erstellen kann.
Eine Wertetabelle wird erst zur Prüftabelle durch die Definition eines
Fremdschlüssels. Wenn in einem Feld auf eine Dömane mit Wertetabelle
verwiesen wird, aber auf Feldebene kein Fremdschlüssel definiert wurde,
finden keine Prüfungen statt.
Eine Kunde möchte einen Flug bei der Fluggesellschaft American Airlines (AA)
buchen. Dieser Flug mit der Flugverbindungsnummer 0017 soll am 22.11.1997
stattfinden. Die Buchung soll am Verkaufsschalter 8 vorgenommen werden.
In der Tabelle SBOOK sind alle Flugbuchungen der Fluggesellschaften hinterlegt.
Die Tabelle SCOUNTER enthält alle gültigen Verkaufsschalter der
Fluggesellschaften.
Wird ein Eintrag in das Feld COUNTER der Tabelle SBOOK vorgenommen, so
muß sichergestellt werden, daß nur gültige Verkaufsschalter eingetragen werden
können. Das bedeutet, daß der Verkaufsschalter in der Tabelle SCOUNTER
hinterlegt sein muß.
Frage: Ist das Einfügen des oben angegeben Datensatzes in die Tabelle SBOOK
erlaubt ?
BEISPIEL:
In diesem Beispiel ist die Fremdschlüsseltabelle die Tabelle SBOOK. Ziel des
Fremdschlüssels ist es zu gewährleisten, daß nur gültige Verkaufsschalter von
Fluggesellschaften einer Buchung zugeordnet werden können. Genau diese
Information enthält die Prüftabelle SCOUNTER. In dieser Tabelle wird jeder
Verkaufsschalter über drei Schlüsselfelder identifiziert: MANDT, CARRID und
COUNTNUM.
Zur Definition des Fremdschlüssels werden diese drei Felder Feldern der
Fremdschlüsseltabelle (Fremdschlüsselfeldern) zugeordnet, über die die zu
kontrollierenden Eingaben auf dem Dynpro gemacht werden. In der Tabelle
SBOOK sind dies die Felder: MANDT, CARRID, COUNTER. Stellt die Eingabe
in diese Felder eine gültige Verkaufsstelle dar, wird die Eingabe zugelassen,
andernfalls vom System abgelehnt.
Der Fremdschlüssel wird für das Feld SBOOK-COUNTER (Prüffeld) definiert,
d.h. die Prüfung findet nach der Eingabe in dieses Feld statt. Deshalb wird das
Feld COUNTER Prüffeld für diesen Fremdschlüssel genannt.
Für das Feld COUNTER, der Tabelle SBOOK wird ein Fremdschlüssel definiert,
der folgende Feldzuordnung herstellt:
Prüftabelle Fremdschlüsseltabelle
SCOUNTER-MANDT SBOOK-MANDT
SCOUNTER-CARRID SBOOK-CARRID
SCOUNTER-COUNTNUM SBOOK-COUNTER
Eine Kombination von Feldern einer Tabelle wird als Fremdschlüssel bezeichnet,
wenn diese Feldkombination Primärschlüssel einer anderen Tabelle ist.
Ein Fremdschlüssel stellt eine Verbindung zwischen zwei Tabellen her.
Als Prüftabelle wird diejenige Tabelle bezeichnet, gegen deren Schlüsselfelder
verprobt wird. Synonym wird diese Tabelle auch referierte Tabelle genannt.
In die Fremdschlüsseltabelle soll ein Eintrag geschrieben werden. Dieser Eintrag
muß konsistent gegen die Schlüsselfelder der Prüftabelle sein.
Das Feld der Fremdschlüsseltabelle, auf dem die Prüfungen stattfinden, wird
als Prüffeld bezeichnet.
Fremdschlüssel sind nur auf Dynpros wirksam. Mittels eines ABAP Programms
können Datensätze ohne Verprobung in die Tabelle geschrieben werden.
Beispiel: In die Tabelle SPFLI (Flugplan) soll ein neuer Eintrag geschrieben
werden. Für das Feld SPFLI-CARRID wird geprüft, ob die eingetragene
Fluggesellschaft in der Tabelle SCARR (Fluggesellschaft) hinterlegt ist. Nur
wenn dies der Fall ist, wird der Satz in die Tabelle SPFLI (Fremdschlüssseltabelle)
aufgenommen. Für das Feld SPFLI-CARRID (Prüffeld) wurde ein Fremdschlüssel
definiert, d.h. auf diesem Feld finden die Verprobungen statt. Die zugehörige
Prüftabelle ist die Tabelle SCARR mit den Primärschlüsselfeldern MANDT und
CARRID.
Feldzuordnung:
Prüftabelle Fremschlüsseltabelle
SBUSPART-MANDT SBOOK-MANDT
SBUSPART-BUSPARTNUM SBOOK-AGENCYNUM
In der Tabelle SMEAL sind Mahlzeiten hinterlegt, die dem Flugkunden während
eines Fluges serviert werden. Die Bezeichnungen der Flugmahlzeiten sind in
der Tabelle SMEALT gepflegt.
Die Tabelle SMEALT ist Texttabelle zur Tabelle SMEAL, da sich der Schlüssel
von SMEALT aus dem Schlüssel der SMEAL und einem zusätzlichen
Sprachschlüsselfeld (Feld mit Datentyp LANG) zusammensetzt.
In der Tabelle SMEALT können damit zu jedem Schlüsseleintrag von SMEAL
erläuternde Texte in mehreren Sprachen erfaßt werden.
Um die Schlüsseleinträge mit den Texten zu verknüpfen, muß die Texttabelle
SMEALT mit der Tabelle SMEAL über einen Fremdschlüssel verbunden werden.
Hierbei muß Schlüsselfelder einer Texttabelle für die Art der Fremdschlüsselfelder
gewählt werden.
Die Fremdschlüsselbeziehung wird von der SMEALT zur SMEAL definiert.
Mit einer Tabelle kann nur eine Texttabelle verknüpft werden.
Unternehmensszenario
Beim Erfassen oder Ändern der Mitarbeiterstammdaten sollen nur konsistente
Daten, gültige Fluggesellschaften, Abteilungen, Bereiche zugelassen werden.
Die Mitarbeiter der Fluggesellschaften werden unterteilt in Administrationsper-
sonal (A), Flugpersonal (F) oder Servicepersonal (S). Entsprechend dieser
Einteilung werden sie den Tätigkeitsbereichen A, F oder S zugeordnet.
Aufgabe 1:
Unterteilen Sie die Mitarbeiter der Fluggesellschaften in Administrationspersonal
(A), Flugpersonal (F) oder Servicepersonal (S). Sorgen Sie dafür, daß in die
Tabelle ZEMPLOY## nur gültige Tätigkeitsbereiche eingetragen werden können.
1. Pflegen Sie Festwerte in der Domäne für das Feld AREA in ZEMPLOY##.
Aufgabe 2:
Definieren Sie geeignete Fremschlüssel für Tabellen ZEMPLOY##,
ZDEPMENT## and ZFLCREW##.
Verwenden Sie zur Fremdschlüsseldefinition außer Ihren Tabellen die Tabellen
des Flugmodells, die Tabellen T000 (Mandant) und SCURX (Währungscodes).
Zur Pflege der einzelnen Fremdschlüssel rufen Sie die Pflege der jeweiligen
Tabellen auf. Wählen Sie das Register Felder.
Definieren Sie jeweils eine Fremdschlüsselprüfung für folgende Felder:
Tabelle Feld
ZEMPLOY## Mandant
Fluggesellschaft
Abteilungskürzel
Währung
ZDEPMENT## Mandant
Fluggesellschaft
ZFLCREW## Mitarbeiternummer
Aufgabe 3:
Manche Mitarbeiter von Fluggesellschaften arbeiten in Reisebüros, um dort für
Ihre Gesellschaft Flüge zu verkaufen. Erweitern Sie Tabelle ZEMPLOY## um ein
Feld, das das Reisebüro dokumentiert, in dem der jeweilige Mitarbeiter arbeitet.
Erweitern Sie die Tabelle ZEMPLOY entsprechend und definieren Sie die
Fremdschlüsselbeziehung.
1. Legen Sie nun ein neues Feld Reisebüro in Ihrer Tabelle ZEMPLOY## an.
Aufgabe 4:
Erweitern Sie die Tabelle ZDEPMENT## um ein Feld.
Jede Abteilung in einer Fluggesellschaft hat einen Abteilungsleiter. Die
Zuordnung zwischen Abteilung und Abteilungsleiter soll auch im Flugmodell
abgebildet werden.
1. Erweitern Sie die Tabelle ZDEPMENT## um ein Feld Abteilungsleiter.
Aufgabe 5:
Legen Sie eine Texttabelle an.
1. Legen Sie eine Texttabelle ZDEPMENTT## zu der Tabelle ZDEPMENT##.
Festwert Kurzbeschreibung
A Administrationspersonal
F Flugpersonal
S Servicepersonal
Aufgabe 2:
Definieren Sie geeignete Fremschlüssel für Tabellen ZEMPLOY##,
ZDEPMENT## and ZFLCREW##.
Verwenden Sie zur Fremdschlüsseldefinition außer Ihren Tabellen die Tabellen
des Flugmodells, die Tabellen T000 (Mandant) und SCURX (Währungscodes).
Zur Pflege der einzelnen Fremdschlüssel rufen Sie die Pflege der jeweiligen
Tabellen auf. Wählen Sie das Register Felder.
Definieren Sie jeweils eine Fremdschlüsselprüfung für folgende Felder:
Tabelle Feld
ZEMPLOY## Mandant
Fluggesellschaft
Abteilungskürzel
Währung
Tabelle Feld
ZDEPMENT## Mandant
Fluggesellschaft
ZFLCREW## Mitarbeiternummer
Prüftabelle T000
PrüftabFeld FremdschlTab FremdschlFeld
MANDT ZEMPLOY## Mandant
Feld Wert
Art der Fremdschlüsselfelder Schlüsselfelder/-
kandidaten
Kardinalität 1:CN
Prüftabelle SCARR
PrüftabFeld FremdschlTab FremdschlFeld
MANDT ZEMPLOY## Mandant
CARRID ZEMPLOY## Fluggesellschaft
Feld Wert
Art der Fremdschlüsselfelder Schlüsselfelder/-
kandidaten
Kardinalität 1:CN
Prüftabelle ZDEPMENT##
PrüftabFeld FremdschlTab FremdschlFeld
MANDT ZEMPLOY## Mandant
CARRID ZEMPLOY## Fluggesellschaft
DEPARTMENT ZEMPLOY## Abteilungskürzel
Feld Wert
Art der Fremdschlüsselfelder keine Schlüs-
selfelder/-kandidaten
Kardinalität 1:CN
Prüftabelle SCURX
PrüftabFeld FremdschlTab FremdschlFeld
CURRKEY ZEMPLOY## Währung
Feld Wert
Art der Fremdschlüsselfelder keine Schlüs-
selfelder/-kandidaten
Kardinalität 1:CN
Feld Wert
Art der Fremdschlüsselfelder Schlüsselfelder/-
kandidaten
Kardinalität 1:CN
Feld Wert
Art der Fremdschlüsselfelder Schlüsselfelder/-
kandidaten
Kardinalität 1:CN
Feld Wert
Art der Fremdschlüsselfelder Schlüsselfelder/-
kandidaten
Kardinalität 1:CN
Aufgabe 3:
Manche Mitarbeiter von Fluggesellschaften arbeiten in Reisebüros, um dort für
Ihre Gesellschaft Flüge zu verkaufen. Erweitern Sie Tabelle ZEMPLOY## um ein
Feld, das das Reisebüro dokumentiert, in dem der jeweilige Mitarbeiter arbeitet.
Erweitern Sie die Tabelle ZEMPLOY entsprechend und definieren Sie die
Fremdschlüsselbeziehung.
1. Legen Sie nun ein neues Feld Reisebüro in Ihrer Tabelle ZEMPLOY## an.
a) Navigieren Sie zur Feldpflege der Tabelle ZEMPLOY##. Fügen Sie
ein neues Feld Reisebüro in die Feldliste ein (über Neue Zeilen).
Notiz: In der Pflege der Tabelle STRAVELAG können Sie
feststellen, daß das passende Datenelement S_AGNCYNUM
heißt.
Prüftabelle STRAVELAG
PrüftabFeld FremdschlTab FremdschlFeld
MANDT ZEMPLOY## Mandant
AGENCYNUM ZEMPLOY## Reisebüro
Feld Wert
Art der Fremdschlüsselfelder keine Schlüs-
selfelder/-kandidaten
Kardinalität 1:CN
Aufgabe 4:
Erweitern Sie die Tabelle ZDEPMENT## um ein Feld.
Jede Abteilung in einer Fluggesellschaft hat einen Abteilungsleiter. Die
Zuordnung zwischen Abteilung und Abteilungsleiter soll auch im Flugmodell
abgebildet werden.
1. Erweitern Sie die Tabelle ZDEPMENT## um ein Feld Abteilungsleiter.
c) Tragen Sie direkt hinter den bereits vorhandenen Feldern das neue Feld
Abteilungleiter ein, indem Sie in die erste Spalte einen geeigneten
Feldnamen eingeben und in die Spalte Feldtyp einen Namen für das
anzulegende Datenelement eintragen.
d) Sichern Sie die Tabellendefinition.
e) Markieren Sie den Namen des neu anzulegenden Datenelements.
Bestätigen Sie, daß Sie das Datenelement anlegen möchten.
f) Erfassen Sie eine Kurzbeschreibung für das Datenelement. Geben Sie
dann in das Feld Domäne den Namen der Domäne ein, die Sie für die
Personalnummer bereits angelegt haben.
g) Wählen Sie die Registerkarte Feldbezeichner, und geben Sie dort
entsprechende Texte ein.
h) Aktivieren Sie das Datenelement. Gehen Sie dann mit Zurück in die
Pflege der Tabelle ZDEPMENT##.
i) Legen Sie den Fremdschlüssel zu dem neuen Feld wie gewohnt an. Die
Prüftabelle ist Tabelle ZEMPLOY##.
Notiz: Wenn Sie diese Tabelle als eine Wertetabelle für die
Domäne für die Personalnummer abgelegt haben, macht das
System diesen Vorschlag. Wenn nicht, müssen Sie sie selbst
eingeben.
Feld Wert
Art der Fremdschlüsselfelder keine Schlüs-
selfelder/-kandidaten
Kardinalität 1:C
Aufgabe 5:
Legen Sie eine Texttabelle an.
1. Legen Sie eine Texttabelle ZDEPMENTT## zu der Tabelle ZDEPMENT##.
Prüftabelle ZDEPMENT##
PrüftabFeld FremdschlTab FremdschlFeld
MANDT ZDEPMENT## Mandant
CARRID ZDEPMENT## Fluggesellschaft
DEPARTMENT ZDEPMENT## Abteilungskürzel
Feld Wert
Art der Fremdschlüsselfelder Schlüsselfelder einer
Texttabelle
Kardinalität 1:CN
Prüftabelle T002
PrüftabFeld FremdschlTab FremdschlFeld
SPRAS ZDEPMENTT## Sprache
Feld Wert
Art der Fremdschlüs- Schlüsselfelder/-
selfelder kandidaten
Kardinalität 1:CN
Unternehmensszenario
Zwischen Dictionary-Objekten bestehen des öfteren gewisse Abhängikeiten, die
durch Veränderungen eines Objekts zum Tragen kommen. Wenn Sie z.B. eine
technische Domäne verändern, kann dies zur Folge haben, dass eine oder mehrere
Datenbanktabellen umgesetzt werden müssen (kann sehr zeitintensiv sein).
Im Rahmen einer Entwicklung besteht oft der Bedarf, ein bereits vom System
genutztes (aktives) Objekt zu ändern. Solche Änderungen werden im ABAP
Dictionary durch die Trennung von aktiver und inaktiver Version unterstützt.
Die aktive Version eines ABAP Dictionary Objekts ist die Version, auf die die
Komponenten der Laufzeitumgebung (ABAP Prozessor, Datenbankschnittstelle
usw.) zugreifen. Diese Version bleibt von Änderungen zunächst unberührt.
Eine inaktive Version entsteht, wenn ein bereits aktives Objekt geändert wird.
Die inaktive Version kann ungeprüft gesichert werden. Sie beeinflußt das
Laufzeitsystem nicht.
Am Ende eines Entwicklungsprozesses kann die inaktive Version zur aktiven
Version gemacht werden. Dieses geschieht durch den Vorgang des Aktivierens.
Hierbei wird die inaktive Version des Objekts zunächst auf Konsistenz geprüft. Ist
diese gegeben, so ersetzt die inaktive Version die aktive. Von diesem Zeitpunkt an
benutzt das Laufzeitsystem die neue aktive Version.
Das obige Beispiel zeigt den Wechsel des Objektstatus. Eine aktive Struktur
enthält drei Felder. Im ABAP Dictionary wird ein Feld an diese Struktur angefügt.
Nach dieser Aktion sind eine aktive Version mit drei Feldern und eine inaktive
Version mit vier Feldern vorhanden. Beim Aktivieren wird die aktive Version mit
der inaktiven Version überschrieben. Die inaktive Version wird damit zur aktiven
Version. Nach dieser Aktion existiert also nur noch die aktive Version mit vier
Feldern.
Die Informationen zu einer Struktur (bzw. Tabelle) sind im ABAP Dictionary auf
Domänen, Datenelemente und die Strukturdefinition verteilt. Das Laufzeitobjekt
(Nametab) faßt diese Informationen zu einer Struktur in einer für den Zugriff von
ABAP Programmen optimierten Form zusammen. Das Laufzeitobjekt wird bei
der Aktivierung der Struktur erzeugt.
Die Laufzeitobjekte der Strukturen werden gepuffert, so daß das ABAP
Laufzeitsystem schnell auf diese Informationen zugreifen kann.
Im Laufzeitobjekt sind Informationen zur Gesamtstruktur (z.B. Anzahl der Felder)
und zu den einzelnen Strukturfeldern (Feldname, Position des Feldes in der
Struktur, Datentyp, Länge, Anzahl Dezimalstellen, Referenzfeld, Referenztabelle,
Prüftabelle, Konvertierungsroutine usw.) enthalten.
Das Laufzeitobjekt einer Tabelle enthält zusätzlich Informationen, die die
Datenbankschnittstelle für den Zugriff auf die Daten der Tabelle benötigt
(Mandantenabhängigkeit, Pufferung, Schlüsselfelder usw.).
Laufzeitobjekte werden für alle ABAP Dictionary Objekte erzeugt, die in ABAP
Programmen als Typen verwendet werden können. Neben Strukturen und Tabellen
sind dies Datenelemente, Tabellentypen und Views.
Wird ein bereits aktives Objekt modifiziert, so kann dies Auswirkungen auf
andere Objekte haben, die es (direkt oder indirekt) verwenden. Diese Verwender
werden als abhängige Objekte bezeichnet. Zum einen kann es nötig sein, die
Unternehmensszenario
In der Mitarbeiterverwaltung sollen Informationen über die Abteilungsleiter
abgelegt werden. Außerdem soll die Änderungsprotokollierung verfeinert werden.
Die Änderungsprotokollierung an den Tabellen ZEMPLOY## und ZDEPMENT##
ist noch nicht präzise genug. Neben der Person, die die letzte Änderung
vorgenommen hat, und dem Datum dieser Änderung soll auch die Uhrzeit der
letzten Änderung vermerkt werden.
Aufgabe:
Erweitern Sie die beiden Tabellen ZEMPLOY## und ZDEPMENT## mit einem
Feld.
1. Sorgen Sie mit möglichst geringem Aufwand dafür, daß in die beiden
Tabellen ZEMPLOY## und ZDEPMENT## ein entsprechendes Feld zur
Änderungsprotokollierung aufgenommen wird. Verwenden Sie hierbei das
Datenelement S_TIME.
1. Sorgen Sie mit möglichst geringem Aufwand dafür, daß in die beiden
Tabellen ZEMPLOY## und ZDEPMENT## ein entsprechendes Feld zur
Änderungsprotokollierung aufgenommen wird. Verwenden Sie hierbei das
Datenelement S_TIME.
Unternehmensszenario
Die Datenstrukturen einer Applikation müssen sich, genauso wie die Programme,
an geänderte Prozesse anpassen. Sie sollen für Ihr Projekt nun bestehende
Datenbanktabellen zu diesem Zwecke ändern.
Damit ein korrekter Zugriff von ABAP Programmen auf eine Datenbanktabelle
möglich ist, muß das Laufzeitobjekt der Tabelle zur Struktur der Tabelle auf der
Datenbank konsistent sein. Bei jeder Änderung der Tabelle im ABAP Dictionary
muß somit bei der Aktivierung (bei der das Laufzeitobjekt neu geschrieben wird)
geprüft werden, ob die Datenbankstruktur der Tabelle an die geänderte ABAP
Dictionary Definition der Tabelle angepaßt werden muß.
Bei bestimmten Änderungen im ABAP Dictionary ist keine Änderung der
Datenbankstruktur notwendig. Zum Beispiel ist bei einer Änderung der
Feldreihenfolge (außer bei Schlüsselfeldern) im ABAP Dictionary keine
Änderung der Datenbankstruktur erforderlich. In diesem Fall wird einfach die
geänderte Struktur im ABAP Dictionary aktiviert und die Datenbankstruktur
bleibt unverändert.
Das folgende Beispiel zeigtl die bei einer Umsetzung vom System ausgeführten
Schritte.
Ausgangssituation: Die Tabelle TAB wurde im ABAP Dictionary verändert.
Dabei wurde die Länge von Feld 3 von 60 auf 30 Stellen gekürzt.
Im ABAP Dictionary ist eine aktive (in der Feld 3 eine Länge von 60 Stellen
besitzt) und eine inaktive Version der Tabelle (in der Feld 3 noch 30 Stellen
besitzt) vorhanden.
Auf der Datenbank ist die Tabelle mit der aktiven Version angelegt, d.h. auf
der Datenbank hat Feld 3 momentan 60 Stellen. Für die Tabelle ist im ABAP
Dictionary ein Sekundärindex mit Kennung A11 definiert, der auf der Datenbank
ebenfalls angelegt wurde.
Die Tabelle enthält bereits Daten.
Schritt 1: Die Tabelle wird gegen weitere Strukturänderungen gesperrt. Falls die
Umsetzung aufgrund eines Fehlers abbricht, bleibt die Tabelle gesperrt. Dieser
Sperrmechanismus soll verhindern, daß eine neue Strukturänderung durchgeführt
wird, solange die Umsetzung noch nicht korrekt beendet ist. In einem solchen Fall
könnten Daten verlorengehen. Außerdem werden alle von der Tabelle abhängigen
Views inaktiviert und damit gesperrt.
Schritt 2: Die auf der Datenbank vorhandene Tabelle wird umbenannt. Alle
Indizes zur Tabelle werden dabei gelöscht. Der Name der neuen (temporären)
Tabelle setzt sich aus dem Präfix QCM und dem Tabellennamen zusammen. Der
Name der temporären Tabelle zur Tabelle TAB ist also QCMTAB.
Schritt 3: Die inaktive Version der Tabelle TAB wird im ABAP Dictionary
aktiviert. Dabei wird die Tabelle mit ihrer neuen Struktur unter dem Namen
QCM8TAB auf der Datenbank angelegt. Der Primärindex zur Tabelle wird
ebenfalls auf der Datenbank angelegt. Die Struktur der Datenbanktabelle
QCM8TAB entspricht also nach diesem Schritt der Struktur der aktiven Tabelle
im ABAP Dictionary. Die Datenbanktabelle enthält aber noch keine Daten.
Die Tabelle ist also während der Umsetzung unter ihrem Originalnamen nicht
auf der Datenbank vorhanden. Programme, die auf diese Tabelle zugreifen, sind
damit nicht lauffähig! Sie sollten deshalb stets sicherstellen, daß während der
Umsetzung keine Anwendungen auf die umzusetzende Tabelle zugreifen!
Schritt 4: Die Daten werden aus der Tabelle QCMTAB in die Tabelle QCM8TAB
zurückgeladen (mit MOVE-CORRESPONDING). Die Daten sind nach
diesem Schritt in beiden Tabellen vorhanden. Bei Feldverkürzungen werden
beispielsweise die überschüssigen Stellen beim Zurückladen abgeschnitten.
Da die Daten während der Umsetzung sowohl in der Tabelle QCM8TAB als auch
in der Tabelle QCMTAB vorhanden sind, entsteht bei der Umsetzung ein erhöhter
Platzbedarf. Sie sollten vor der Umsetzung größerer Tabellen deshalb prüfen, ob
im betreffenden Tablespace genügend Platz vorhanden ist.
Beim Kopieren der Daten aus der Tabelle QCMTAB in die Tabelle QCM8TAB
wird nach 16 MB ein Datenbank-Commit abgesetzt. Ein Umsetzprozeß
benötigt deshalb 16 MB Resourcen im Rollback-Segment. Die bestehende
Datenbanksperre wird beim Commit freigegeben und dann vor der Bearbeitung
des nächsten umzusetzenden Datenbereichs erneut angefordert.
Bei Schlüsselverkürzungen kann von mehreren Sätzen, die sich bzgl. des neuen
Schlüssels nicht mehr unterscheiden, nur einer zurückgeladen werden. Welcher
Satz dies ist, ist nicht vorhersehbar. Sie sollten in einem solchen Fall den
Datenbestand der Tabelle vor der Umsetzung bereinigen.
Da die Daten während der Umsetzung sowohl in der Originaltabelle als auch in
der temporären Tabelle vorhanden sind, entsteht bei der Umsetzung ein erhöhter
Platzbedarf. Falls der Tablespace beim Zurückladen der Daten aus der temporären
Tabelle in die Originaltabelle überläuft, bricht die Umsetzung an dieser Stelle
ab. Sie müssen in diesem Fall den Tablespace erweitern und die Umsetzung im
Datenbank-Utility erneut starten.
Wird der Schlüssel einer Tabelle verkürzt (z.B. durch Entfernen oder Verkürzung
der Feldlänge von Schlüsselfeldern) können vorhandene Sätze der Tabelle sich
bzgl. des neuen Schlüssels nicht mehr unterscheiden. Beim Zurückladen der
Daten aus der temporären Tabelle kann nur einer dieser Sätze in die Tabelle
zurückgeladen werden. Welcher Satz das ist, ist nicht vorhersehbar. Falls Sie
bestimmte Sätze übernehmen wollen, müssen Sie die Tabelle vor der Umsetzung
bereinigen!
Bei einer Umsetzung werden die Daten mit dem ABAP Befehl
MOVE-CORRESPONDING aus der temporären Tabelle in die Datenbanktabelle
zurückkopiert. Daher sind nur solche Typänderungen möglich, die durch
MOVE-CORRESPONDING durchgeführt werden können. Bei anderen
Typänderungen, bricht die Umsetzung beim Zurückladen der Daten in die
Originaltabelle ab. In diesem Fall müssen Sie den alten Zustand vor der
Umsetzung wiederherstellen. Hierzu müssen Sie mit Datenbanktools die Tabelle
löschen, die QCM-Tabelle wieder auf den alten Namen umbenennen, das
Laufzeitobjekt rekonstruieren (im DB-Utility), die Tabellenstruktur im Dictionary
wieder auf den alten Stand bringen und abschließend die Tabelle aktivieren.
Bricht eine Umsetzung ab, bleibt der im ersten Schritt gesetzte Sperreintrag für die
Tabelle stehen. Die Tabelle kann damit nicht mehr mit den Pflegewerkzeugen des
ABAP Dictionary (Transaktion SE11) bearbeitet werden.
Eine abgebrochene Umsetzung kann mit dem Datenbank-Utility (Transaktion
SE14) analysiert und fortgesetzt werden. Das Datenbank-Utility bietet ein
Analysetool an, mit dem Sie die Fehlerursache sowie den momentanen Zustand
aller an der Umsetzung beteiligten Tabellen ermitteln können.
Dem Objektprotokoll können Sie in der Regel die genaue Ursache des Abbruchs
entnehmen. Falls das Objektprotokoll keine Information über die Fehlerursache
liefert, müssen Sie den Syslog oder die vorhandenen Kurzdumps analysieren.
Liegt eine abgebrochene Umsetzung vor, so sind im Datenbank-Utility zwei
Optionen als Druckknöpfe eingeblendet
• Mit der Option Anpassung fortsetzen können Sie, nach Beseitigung der
Fehlerursache, die Umsetzung an der Abbruchstelle fortsetzen.
• Daneben gibt es noch die Option Tabelle entsperren. Diese Option löscht
aber lediglich den bestehenden Sperreintrag für die Tabelle. Sie sollten
für eine abgebrochene Umsetzung nie Tabelle entsperren wählen, wenn
die Daten nur noch in der temporären Tabelle vorhanden sind, also die
Umsetzung z.B. in Schritt 3 oder in Schritt 4 abgebrochen wurde.
Die neue Version der SAP Standardtabelle wird aktiviert und das neue Feld wird
an die Datenbanktabelle angehängt.
Strukturen und Tabellen, die von SAP im ABAP Dictionary definiert wurden,
können nachträglich durch Kunden auf folgende Weise erweitert werden:
Customizing-Includes
Bei dieser Variante sind bereits bestimmte Stellen innerhalb einer Struktur
oder Tabelle für Erweiterungen reserviert. Die zugehörigen Includes werden
jedoch erst vom Kunden angelegt.
Appends
Bei dieser Variante werden beliebige Felder ohne vorherige Reservierung an
das Ende von Strukturen oder Tabellen angehängt.
Unternehmensszenario
Das ursprüngliche Design der Mitarbeiterverwaltung ist nach einigen
organisatorischen Änderungen in den Fluggesellschaften nicht mehr angemessen.
Das Design der Tabelle ZFLCREW## ist nicht mehr angemessen. Das Feld für
die Rolle des Mitarbeiters während des Fluges ist zu lang.
Aufgabe 1:
Verkürzen Sie ein Feld in der Tabelle ZFLCREW##.
1. Reduzieren Sie die Feldlänge auf 15 Stellen.
Aufgabe 2:
Die Mitarbeiter mit Verwaltungsfunktionen oder Wartungsfunktionen haben
ihren Arbeitsplatz auf einem Flughafen. Zeichnen Sie in Tabelle ZEMPLOY##
Informationen auf, wie Sie diese Mitarbeiter erreichen können: eine
Telefonnummer, unter der Sie Wartungspersonal auf dem Flughafen erreichen,
und ein Büro, in dem die Verwaltungsmitarbeiter arbeiten.
1. Legen Sie eine Append-Struktur zur Tabelle ZEMPLOY## an, die die
folgenden Informationen enthält:
Feld Datenelement
ZZFlughafen S_AIRPORT
ZZBueronummer S_BUREAUNO
ZZTelefon S_TELNO
Aufgabe 3:
Legen Sie für ein Feld Flughafen aus der Append-Struktur einen geeigneten
Fremdschlüssel an.
1. Definieren Sie den Fremdschlüssel in der Pflege der Append-Struktur.
Lösung 9: Änderungen an
Datenbanktabellen
Aufgabe 1:
Verkürzen Sie ein Feld in der Tabelle ZFLCREW##.
1. Reduzieren Sie die Feldlänge auf 15 Stellen.
Aufgabe 2:
Die Mitarbeiter mit Verwaltungsfunktionen oder Wartungsfunktionen haben
ihren Arbeitsplatz auf einem Flughafen. Zeichnen Sie in Tabelle ZEMPLOY##
Informationen auf, wie Sie diese Mitarbeiter erreichen können: eine
Telefonnummer, unter der Sie Wartungspersonal auf dem Flughafen erreichen,
und ein Büro, in dem die Verwaltungsmitarbeiter arbeiten.
1. Legen Sie eine Append-Struktur zur Tabelle ZEMPLOY## an, die die
folgenden Informationen enthält:
Feld Datenelement
ZZFlughafen S_AIRPORT
ZZBueronummer S_BUREAUNO
ZZTelefon S_TELNO
Aufgabe 3:
Legen Sie für ein Feld Flughafen aus der Append-Struktur einen geeigneten
Fremdschlüssel an.
1. Definieren Sie den Fremdschlüssel in der Pflege der Append-Struktur.
Unternehmensszenario
Durch Umsetzungen von bestehenden DB-Tabellen, können Daten verloren gehen
oder andere Probleme auftreten. Sie sollten für diesen Fall die Umsetzung wieder
Rückgägig machen können.
Aufgabe:
Sie sollen verhindern, daß Daten durch eine fehlerhafte Umsetzung verloren gehen.
1. Datenverluste vermeiden.
2. Ändern Sie die Domäne für die Abteilungen von der Länge 4 auf die die
Länge 2 und aktivieren Sie die Domäne.
3. Lassen Sie auch die abhängigen Objekte (Tabellen) aktivieren.
4. Lassen Sie sich das Protokoll anzeigen.
5. Setzen Sie zunächst die Tabelle der Abteilungen mit Hilfe der Transaktion
SE14 um.
6. Setzen Sie nun auch die Tabelle der Mitarbeiter um und prüfen Sie den Inhalt
der Tabelle.
7. Sollte die Umsetzung fehlschlagen, versuchen Sie die Umsetzung wieder
rückgängig zu machen.
a) Kopieren Sie die beiden Tabellen für die Mitarbeiter und die
Abteilungen über die SE11 oder die SE80.
b) Kopieren Sie den Inhalt der Tabellen mit Hilfe eines ABAP-Reports
(ABAP-Befehl INSERT)
c) Ändern Sie Ausserdem die Typdefinition für das Tabellenfeld der
Abteilung in beiden Tabellen und verwenden Sie den Datentyp CHAR
4 als Eingebauter Typ. Somit werden die Temporären Tabellen
unabhängig von der kommenden Änderung der Domäne.
2. Ändern Sie die Domäne für die Abteilungen von der Länge 4 auf die die
Länge 2 und aktivieren Sie die Domäne.
a) Gehen Sie wie in den vorangegangenen Übungen vor.
3. Lassen Sie auch die abhängigen Objekte (Tabellen) aktivieren.
a) Bestätigen Sie den folgenden Dialog mit der Schaltfläche Weiter.
.
4. Lassen Sie sich das Protokoll anzeigen.
5. Setzen Sie zunächst die Tabelle der Abteilungen mit Hilfe der Transaktion
SE14 um.
a) Geben Sie im Einstiegsbild des Datenbankutilities den Tabellennamen
ein.
b) Betätigen Sie die Schaltfläche Bearbeiten.
c) Starten Sie den Umsetzprozess mit der Schaltfläche Aktivieren und
Datenbank anpassen.
Notiz: Der Umsetzprozess endete ohne Fehlermeldung. Sie
sollten sich aber trotzdem das Protokoll genauer ansehen und
die Meldungen auswerten.
6. Setzen Sie nun auch die Tabelle der Mitarbeiter um und prüfen Sie den Inhalt
der Tabelle.
a) Geben Sie im Einstiegsbild des Datenbankutilities (SE14)den
Tabellennamen ein.
b) Betätigen Sie die Schaltfläche Bearbeiten.
c) Starten Sie den Umsetzprozess mit der Schaltfläche Aktivieren und
Datenbank anpassen.
Ergebnis
Diskutieren Sie mit dem Referenten die Möglichkeiten, Ihre Daten wieder in den
Ursprungszustand zu versetzen.
• beurteilen, wie ein View durch Join, Projektion und Selektion aus Tabellen
erzeugt wird
• Datenbank-Views anlegen
• den Zusammenhang zwischen Fremdschlüsseln und Joinbedingungen
herstellen
• Views in Programmen zur Datenselektion einsetzen
• die Einsatzmöglichkeiten von Pflege-Views beurteilen
• den Unterschied zwischen Inner Join und Outer Join erkennen
• einen Pflegeview anlegen
• einfache Pflegedialoge erzeugen
• komplexe Pflegedialoge erzeugen
Lektion: Views
Unternehmensszenario
Um in Ihren Anwendungen vereinfachtes ABAP-Coding zu erzeugen, sollen Sie
Views als Ausschnitt oder als Kombination von Tabellen erzeugen.
Der Aufbau eines Views und die Datenselektion mit Hilfe dieses Views wird in
einem Beispiel gezeigt.
Gegeben sind die beiden Tabellen SCARR und SFLIGHT. Die Tabelle SCARR
enthält zwei Einträge, die Tabelle SFLIGHT vier Einträge.
Zuerst werden die Tabellen aneinander gehängt. Daraus ergibt sich das
Kreuzprodukt der zwei Tabellen, in dem jeder Satz der Tabelle SCARR mit jedem
Satz der Tabelle SFLIGHT kombiniert wird.
Das gesamte Kreuzprodukt ist in der Regel keine sinnvolle Selektion. Deshalb
muß das Kreuzprodukt über eine Join-Bedingung eingeschränkt werden. Die
Join-Bedingung beschreibt, wie die Sätze der beiden Tabellen zusammenhängen.
In unserem Beispiel soll das Feld CARRID von SCARR mit dem Feld CARRID
von SFLIGHT verglichen werden. Die Join-Bedingung lautet also:
SCARR-CARRID = SFLIGHT-CARRID
Durch diese Join-Bedingung werden alle Sätze aus dem Kreuzprodukt entfernt,
bei denen der Eintrag in Feld 1 nicht mit dem Eintrag aus Feld 3 identisch ist. Die
Spalte für Feld 3 im View wird damit überflüssig.
Oft sind nicht alle Felder der an einem View beteiligten Tabellen von Interesse.
Die in den View eingehende Menge von Feldern kann explizit bestimmt werden
(Projektion).
In unserem Beispiel ist das Feld PLANETYPE nicht von Interesse und wird
deshalb ausgeblendet.
Über eine Selektionsbedingung kann die Menge der Sätze, die über den View
angezeigt werden können, weiter eingeschränkt werden.
In unserem Beispiel sollen nur solche Sätze über den View angezeigt werden, die
in Feld CARRID den Wert DL haben.
Eine Selektionsbedingung kann also auch über ein nicht im View enthaltenes
Feld formuliert werden.
Für die erforderliche Sicht auf die Buchungsdaten muß ein View auf die Tabellen
SCUSTOM, SBOOK und SPFLI angelegt werden.
Die Join-Bedingungen lauten in diesem Fall:
• SBOOK-MANDT = SCUSTOM-MANDT
• SBOOK-CUSTOMID = SCUSTOM-ID
• SPFLI-MANDT = SBOOK-MANDT
• SPFLI-CARRID = SBOOK-CARRID
• SPFLI-CONNID = SBOOK-CONNID
Für einen Kunden erhält man die zugehörigen Buchungen, indem man die
zugehörigen Sätze zum Schlüssel MANDT und CUSTOMID aus der Tabelle
SBOOK selektiert.
Für jede Buchung aus der Tabelle SBOOK erhält man die Flugdaten aus der
Tabelle SPFLI, indem man den zugehörigen Satz zum Schlüssel MANDT,
CARRID und CONNID aus der Tabelle SPFLI selektiert.
Falls man nur die nicht stornierten Buchungen eines Kunden über den View
anzeigen will, kann man dies über die folgende Selektionsbedingung erreichen:
• SBOOK-CANCELED <> X
Die Join-Bedingungen können auch aus den bestehenden Fremdschlüssel-
beziehungen abgeleitet werden. In der Pflegetransaktion wird diese Übernahme
der Join-Bedingungen aus den bereits vorhandenen Fremdschlüsseln unterstützt.
Als Feldnamen im View werden in der Regel die Feldnamen der zugrundeliegenden
Tabellenfelder übernommen. Es kann im View aber ein anderer Feldname
gewählt werden. Dies ist z.B. notwendig, wenn zwei gleichnamige Felder aus
unterschiedlichen Tabellen in den View aufgenommen werden sollen. In diesem
Fall muß für eines der beiden Felder im View ein anderer Name als in der Tabelle
gewählt werden.
Ein View hat Typcharakter und kann in Programmen wie alle anderen Typen
angesprochen und zur Definition von Datenobjekten verwendet werden.
Die Datenmenge, die über einen View selektiert werden kann, hängt entscheidend
davon ab, ob der View einen Inner Join oder einen Outer Join realisiert.
Beim Inner Join erhält man nur diejenigen Sätze, zu denen in allen der am View
beteiligten Tabellen ein Eintrag existiert. Beim Outer Join werden dagegen auch
solche Sätze selektiert, bei denen in einigen der am View beteiligten Tabellen kein
entsprechender Eintrag vorhanden ist.
Die über einen Outer Join ermittelte Treffermenge kann also eine echte Obermenge
der über einen Inner Join ermittelten Treffermenge sein.
Datenbank-Views realisieren einen Inner Join. Man erhält also nur solche Sätze,
zu denen in allen am View beteiligten Tabellen ein Eintrag vorhanden ist.
Pflege-Views realisieren einen Outer Join.
Unternehmensszenario
Die für einen Mitarbeiter vorhandenen Daten sind (dem relationalen Datenmodell
entsprechend) auf mehrere Tabellen der Mitarbeiterverwaltung verteilt. Für
manche Aufgaben müssen die entsprechenden Sachbearbeiter aber eine
übergreifende Sicht auf diese Daten haben. In dieser Übung sollen die
entsprechenden Sichten durch Anlegen von Views realisiert werden.
Für die Zusammenstellung der Mannschaft eines Fluges muß das fliegende
Personal (alle Piloten und Flugbegleiter) selektiert werden. Eventuell können
nicht alle Daten in Tabelle ZEMPLOY## beim Zugriff angezeigt werden; so
kann etwa der Mitarbeiter, der die Teams zusammenstellt, nicht die Gehälter der
Crew-Mitglieder sehen. Weiterhin soll für Nachfragen noch die Telefonnummer
der Abteilung des Mitarbeiters ausgegeben werden.
Aufgabe:
1. Legen Sie einen entsprechenden Datenbank-View ZEMPFLY## an, der
die Anforderungen erfüllt. Es sollen folgende Informationen zu einem
Mitarbeiter angezeigt werden:
Mandant
Fluggesellschaft
Personalnummer
Vorname
Nachname
Telefonnummer der Abteilung
Abteilungskürzel
Notiz: Der View sollte eine Sicht auf die Daten in den Tabellen
ZEMPLOY## und ZDEPMENT## ermöglichen. Der View sollte
Daten über Mitarbeiter (aus Tabelle ZEMPLOY##) und über
Abteilungen (aus Tabelle ZDEPMENT##) anzeigen.
Notiz: Der View sollte eine Sicht auf die Daten in den Tabellen
ZEMPLOY## und ZDEPMENT## ermöglichen. Der View sollte
Daten über Mitarbeiter (aus Tabelle ZEMPLOY##) und über
Abteilungen (aus Tabelle ZDEPMENT##) anzeigen.
Lektion: Pflegedialoge
Unternehmensszenario
Sie Sollen in Ihrem Projekt zur schnellen Testdatengenerierung einfache Dialoge
zu den neuen DB-Tabellen anlegen.
Für den Anwender bilden auf mehrere Tabellen verteilte Daten oft eine logische
Einheit, d.h, ein Anwendungsobjekt. Die Daten eines solchen Anwendungsobjekts
sollen deshalb gemeinsam angezeigt, geändert und angelegt werden können. An
der technischen Realisierung des Anwendungsobjekts, d.h. der Verteilung der
Daten auf mehrere Tabellen, ist der Anwender in der Regel nicht interessiert.
Über Pflege-Views können auf einfache Weise Möglichkeiten für die Pflege
komplexer Anwendungsobjekte geschaffen werden. Die Verteilung der Daten auf
die unterliegenden Datenbanktabellen findet automatisch statt.
Alle in einem Pflege-View zusammengefaßten Tabellen müssen über
Fremdschlüssel verknüpft sein, d.h. die Joinbedingungen werden beim
Pflege-View immer aus dem Fremdschlüssel abgeleitet. Eine direkte Eingabe der
Joinbedingungen wie bei Datenbank-Views ist nicht möglich.
Aus der Definition eines Pflege-Views im ABAP Dictionary muß eine
Pflegeoberfläche generiert werden, über die die Daten des Views angezeigt,
geändert und angelegt werden können.
Beim Anlegen der Pflegeoberfläche werden automatisch Funktionsbausteine
generiert, die die über den View gepflegten Daten auf die zugrundeliegenden
Tabellen verteilen.
Die Generierung der Pflegeoberfläche erfolgt über die Transaktion Generierung
Tabellensicht (Transaktion SE54) oder aus der Viewpflege heraus über Hilfsmittel
→ Tab.pflegegenerator.
Sie können auch Tabellen aufnehmen, die mit einer der bisher aufgenommenen
Sekundärtabellen über einen Fremdschlüssel verbunden sind. Stellen Sie hierzu
den Cursor auf die Sekundärtabelle und betätigen Sie Beziehungen. Gehen Sie
dann wie oben beschrieben vor.
Fremdschlüsselbeziehungen die für eine Pflege-View nicht geeignet sind,
werden am Ende der Liste unter der Überschrift Beziehungen mit ungeeigneter
Kardinalität angezeigt.
Übernahme der Viewfelder
Wählen Sie auf der Registerkarte Viewfelder die Felder aus, die Sie in den View
übernehmen wollen.
Betätigen Sie die Drucktaste Tabellenfelder. In einem Dialogfenster werden
alle im View enthaltenen Tabellen angezeigt. Wählen Sie eine Tabelle aus. Die
Felder der Tabelle werden nun in einem Dialogfenster eingeblendet. Sie können
daraus Felder übernehmen, indem Sie diese in der ersten Spalte markieren und
Übernehmen wählen.
Alle Schlüsselfelder der Primärtabelle müssen in einen Pflege-View aufgenommen
werden. Zusätzlich müssen alle Schlüsselfelder von Sekundärtabellen, die nicht
am Fremdschlüssel beteiligt sind (d.h. nicht über eine Join-Bedingung mit einem
bereits in den View aufgenommenen Schlüsselfeld verbunden sind), in den View
aufgenommen werden.
Damit wird sichergestellt, daß die über einen Pflege-View eingefügten Sätze
korrekt in die im View enthaltenen Tabellen geschrieben werden können.
Selektionsbedingungen
Formulieren Sie (optional) auf der Registerkarte Selektionsbedingungen
Einschränkungen an die Datensätze, die über den View angezeigt werden können
(siehe Selektionsbedingung des Views pflegen). Die Selektionsbedingungen legen
fest, welche Datensätze über den View selektiert werden können.
Pflegestatus
Legen Sie auf der Registerkarte Pflegestatus den Pflegestatus des Views fest.
Der Pflegestatus bestimmt, wie Sie über die Standardviewpflege (SM30) auf die
Viewdaten zugreifen können.
Aktivieren
Bei der Aktivierung wird ein Protokoll geschrieben, das Sie sich über Hilfsmittel
-> Aktivierungsprotokoll anzeigen lassen können. Falls bei der Aktivierung
des Views Fehler oder Warnungen auftraten, wird das Aktivierungsprotokoll
automatisch angezeigt.
Pflegeoberflächen generieren
Berechtigungsgruppe
Hier bestimmen Sie, welche Benutzer zur Pflege der Tabellen/Viewinhalte
berechtigt sind
Pflegetyp
Hier legen Sie fest, ob der Dialog ein- oder zweistufig aufgebaut wird.
Einstufige Dialoge bestehen nur aus einem Übersichtbild, in dem alle Felder
enthalten sind. Bei zweistufigen Dialogen werden im Übersichtsbild nur die
Schlüsselfelder und Textfelder mit einer Länge von mehr als 20 Zeichen
angezeigt. Im Detailbild werden alle Felder angeboten.
Pflegebilder
Hier bestimmen Sie die interne Nummer jedes Pflegebildes. Über eine
Suchfunktion können Sie sich mögliche Werte vorschlagen lassen.
Aufzeichnungsroutine
Hier legen Sie fest, ob und wie die mit dem Dialog gepflegten
Tabellen/Viewinhalte in einen Transport aufgenommen werden.
Nach der Eingabe aller Werte wird die Generierung des Pflegedialoges gestartet.
Wenn dieser Vorgang fehlerfrei verläuft, kann der Dialog unmittelbar zur Pflege
der Tabellen/Viewinhalte benutzt werden. Starten Sie dazu die Transaktion SM30
und tragen sie im Feld Tabelle/Sicht die Tabelle oder View ein, für die Sie den
Pflegedialog generiert haben. Betätigen Sie die Schaltfläche Pflegen.
Die Pflegeview und die Pflegedialoge sollte nicht für die Datenpflege im
Standardbetrieb verwendet werden, da die Gefahr von Dateninkonsistenzen
besteht.
Wenn Sie einzelne Pflegedialoge für Tabellen/Views generiert haben, können Sie
diese zu einem Viewcluster verbinden.
Unter einem Viewcluster versteht man eine Gruppe von Pflegedialogen, die
aus betriebswirtschaftlichen oder technischen Gründen zu einer Pflegeeinheit
zusammengefaßt wurden.
Viewcluster bieten damit die Möglichkeit, inhaltlich zusammengehörige Daten,
die über eine Tabelle/einen View hinausgehen, konsistent zu pflegen.
Während sich in Pflegeviews (mit Ausnahme von sprachabhängigen Texten)
nur 1:1 Beziehungen verarbeiten lassen, können mit Viewclustern auch
Schlüsselerweiterungen und Beziehungen der Kardinalität N:M abgebildet
werden. Darüber hinaus lassen sich Pflegedialoge ohne Schlüssel- oder
Teilschlüsselabhängigkeit zu einem Viewcluster zusammenfassen.
Die Navigation innerhalb des Viewclusters orientiert sich i.d.R. an der Hierarchie
der den Einzeldialogen zugrundeliegenden Tabellen/Views. Master – Detail –
Beziehungen, auch über mehrere Ebenen hinweg eignen sich besonders gut für
einen Viewcluster.
Normalerweise besteht ein Viewcluster aus einem oder mehreren Wurzeldialogen
und den von ihm bzw. ihnen abhängigen, maximal 14 Pflegedialogen. Diese
Pflegedialoge können sowohl ein- als auch zweistufig sein.
Sie müssen zunächst über die SE54 für jede beteiligte Tabelle/View einen
Pflegedialog generieren, um sie dann ebenfalls in der SE54 zu einem Viewcluster
zusammenzufügen.
Die anschließende Pflege der Daten führen Sie mit der Transaktion SM34 und
der Angabe des Clusternames durch.
Unternehmensszenario
Sie sollen in Ihrem Projekt zur schnellen Testdatengenerierung einfache Dialoge
zu DB-Tabellen anlegen.
Aufgabe 1:
Legen Sie einen Pflege-View mit Namen ZPARTNER## an, mit dem Sie bequem
neue Geschäftspartner einpflegen können.
Funktionsgruppe ZZBC430##
Berechtigungsgruppe SUNI
Pflegetyp Einstufig
Übersichtsbild 100
2. Nehmen Sie die Felder der beiden Tabellen in den View auf.
3. Genieren Sie eine Pflegeoberfläche für den View.
4. Pflegen Sie die Daten eines neuen Reisebüros über die erweiterte
Tabellenpflege ein. Wählen Sie System → Dienste → Tabellenpflege →
Erweit. Tab.pflege.
Aufgabe 2:
Pflegedialoge in einem Viewcluster bündeln.
Funktionsgruppe ZZBC430##
Berechtigungsgruppe SUNI
Pflegetyp Einstufig
Übersichtsbild 100
Aufgabe 2:
Pflegedialoge in einem Viewcluster bündeln.
3. Legen Sie für jede der kopierten Tabellen einen zweistufigen Pflegedialog
(Dynpronummern z.B. 100 und 110) an.
a) Sie haben zwei Möglichkeiten in den passenden Bildschirm der
Transaktion SE54zu kommen:
1. Springen Sie in der Transaktion SE11 zur jeweiligen Tabelle
über den Menüpfad Hilfsmittel -> Tabellenpflegegenerator in
die Generierungsumgebung.
2. Starten Sie die Transaktion SE54 und geben Sie die entsprechende
Tabelle ein.
Wählen Sie Generierte Objekte und drücken Sie die Schaltfläche
Anlegen/Ändern.
b) Geben Sie im Folgebild die Berechtigungsgruppe SUNI und als
Funktionsgruppe den jeweiligen Tabellennamen mit dem Präfix ZFP_
ein.
c) Markieren Sie den Pflegetyp zweistufig. Wählen Sie die Nummer
0100 und 0110 als Pflegebildnummern des Übersichtsbildes und
des Einzelbildes.
d) Wählen Sie Anlegen. Sie werden dann nach der Entwicklungsklasse der
Funktionsgruppe und der generierten Pflegeobjekte gefragt. Wählen
Sie in beiden Fällen Lokales Objekt.
e) Verfahren Sie analog zu allen kopierten Tabellen
4. Legen Sie einen Viewcluster mit der Bezeichnung ZPC_FLIGHT## an.
a) Starten Sie Transaktion SE54 und wechseln Sie aus dem Einstiegsbild
über die Schaltfläche Bearb. Viewcluster in die Ansicht für das
Bearbeiten/Anlegen eines Viewcluster.
b) Geben Sie den Namen des Clusters im Feld Viewcluster an.
c) Drücken Sie die Schaltfläche Anlegen/Ändern.
d) Ignorieren Sie die die Meldung „Bitte keine Änderungen (Daten
gehören SAP)“. So lange Sie im Kundennamensraum (Z* bzw.
Y*) bleiben hat diese Meldung keine Bedeutung. Genauere Info im
SAP-Hinweis Nr.: 671067
5. Vergeben Sie im Kopfeintrag eine sinnvolle Kurzbeschreibung.
6. Wechseln Sie zur Objektstruktur und geben Sie die folgenden neue Einträge
ein:
Ergebnis
REPORT SAPBC430S_FILL_CLUSTER_TAB .
START-OF-SELECTION.
IF sy-subrc = 0.
SELECT * FROM spfli INTO wa_spfli.
INSERT INTO zpfli## VALUES wa_spfli.
ENDSELECT.
IF sy-subrc = 0.
IF my_error = 0.
WRITE / 'Datatransport successfully finished'.
ELSE.
WRITE: / 'ERROR:', my_error.
ENDIF.
Lektion: Suchhilfen
Unternehmensszenario
Sie wollen den Anwendern Ihres Unternehmens auf Dialogen einfache
Eingabehilfen zur Verfügung stellen.
Eingabehilfen
Die von der Eingabehilfe angezeigten möglichen Werte für ein Feld werden zur
Laufzeit durch eine Selektion von der Datenbank ermittelt. Bei der Definition einer
Suchhilfe ist durch Angabe einer Tabelle oder eines View als Selektionsmethode
festzulegen, aus welchem Datenbankobjekt die Daten selektiert werden sollen.
Die Benutzung eines Views als Selektionsmethode ist dann sinnvoll, wenn die für
die Eingabehilfe relevanten Daten zu den möglichen Werten über mehrere Tabellen
verteilt sind. Wenn diese Daten alle in einer Tabelle oder in der zugehörigen
Texttabelle sind, können Sie die Tabelle als Selektionsmethode verwenden. Das
System sorgt dann automatisch dafür, daß die Texte aus der Texttabelle in der
Anmeldesprache des Benutzers mit berücksichtigt werden.
Existiert noch kein View, der die für eine Eingabehilfe relevanten Daten
zusammenfaßt, so muß dieser zunächst im ABAP Dictionary angelegt werden.
Pflege-Views dürfen nicht als Selektionsmethoden für Suchhilfen benutzt werden.
Im Normalfall wird also ein Datenbank-View verwendet. Es ist allerdings zu
berücksichtigen, daß Datenbank-Views (im SAP System) immer über einen Inner
Join gebildet werden. Somit werden bei der Eingabehilfe nur die Werte angeboten,
für die in jeder beteiligten Tabelle ein Eintrag vorhanden ist. In manchen Fällen
sollen die Werte über einen Outer Join bestimmt werden. Als Selektionsmethode
ist dann ein Help-View zu wählen. Weitere Informationen zu Help-Views finden
Sie im Anhang.
Ist die Selektionsmethode einer Suchhilfe mandantenabhängig, so erfolgt die
Selektion der möglichen Werte immer nur im Anmeldemandanten des Benutzers.
Die möglichen Werte werden in einem Dialogfenster, dem Popup zur Anzeige
der Treffermenge, als Liste präsentiert, aus der der Benutzer den gewünschten
Eintrag auswählt. Bestehen die möglichen Werte aus formalen Schlüsseln, so
sollten erläuternde Zusatzinformationen zu diesen angezeigt werden.
Ist die Treffermenge sehr groß, so sollte der Benutzer Zusatzbedingungen an
Attribute des auszuwählenden Eintrags stellen können. Eine solche Einschränkung
der zu verarbeitenden Datenmenge erhöht die Übersichtlichkeit der Liste und
verringert die Systembelastung. Die Zusatzbedingungen werden vom Benutzer auf
einem weiteren Dialogfenster, dem Popup zur Werteeinschränkung, eingegeben.
Der Dialogtyp einer Suchhilfe legt fest, ob das Popup zur Werteeinschränkung
angeboten wird, bevor die Treffermenge ermittelt wird.
Die Merkmale, die auf einem der beiden Popups (oder beiden) erscheinen sollen,
müssen Sie als Parameter in die Suchhilfe aufnehmen. Als Parameter können
Sie alle Felder der Selektionsmethode (bis auf das Mandantenfeld) sowie ggf. die
Nichtschlüsselfelder ihrer Texttabelle benutzen.
Welche Parameter auf welchem Popup (in welcher Reihenfolge) erscheinen,
legen Sie fest, indem Sie den Parametern Positionen auf den beiden Popups
zuweisen. Es ist also möglich, auf den beiden Popups verschiedene Parameter
(oder verschiedene Reihenfolgen) zu verwenden.
Suchhilfeparameter müssen durch Datenelemente typisiert sein. Diese legen
ihre Darstellung auf den beiden Popups fest. Wenn nicht anders festgelegt,
übernimmt ein Parameter das Datenelement des entsprechenden Feldes der
Selektionsmethode.
Bei der Definition eines Parameters einer Suchhilfe müssen Sie festlegen, ob durch
ihn Daten in die Eingabehilfe übernommen werden sollen (IMPORT-Parameter)
und ob durch ihn Daten aus der Eingabehilfe zurückgestellt werden sollen
(EXPORT-Parameter).
Die IMPORT- und EXPORT-Parameter einer Suchhilfe bilden zusammen ihre
Schnittstelle. (Auch hier besteht die Analogie zu Funktionsbausteinen.)
Sie können auch Schnittstellenparameter definieren, die weder auf dem Popup
zur Anzeige der Treffermenge noch auf dem Popup zur Werteeinschränkung
erscheinen. Das ist z.B. sinnvoll, wenn bei Auswahl eines Wertes Bildschirmfelder
aktualisiert werden sollen, die auf keinem der beiden Popups erscheinen.
Woher die IMPORT-Parameter einer Suchhilfe ihre Werte beziehen und in welche
Bildschirmfelder die Inhalte der EXPORT-Parameter der Suchhilfe zurückgestellt
werden, wird bei der Suchhilfeanbindung festgelegt.
Für das Suchfeld gilt eine Sonderlogik. Sein Inhalt wird nur dann in der
Eingabehilfe verwendet, wenn es sich um ein Suchmuster handelt (das heißt, wenn
er ein * oder ein + enthält) und der mit dem Suchfeld verbundene Parameter ein
IMPORT-Parameter ist.
Parameter, die nur Zusatzinformation zum Suchfeld beinhalten, sollten Sie
nicht als IMPORT-Parameter definieren, da der Benutzer die entsprechenden
Dynprofelder sonst jedes Mal leeren muß, bevor er mit der Eingabehilfe einen
neuen Wert bestimmen kann.
Eine Suchhilfe beschreibt den Verlauf einer Eingabehilfe. Damit sie bei einem
Eingabefeld wirksam wird, bedarf es noch eines Mechanismus, der die Suchhilfe
diesem Feld zuordnet. Dieser Mechanismus wird als Suchhilfeanbindung an das
Feld bezeichnet.
Die Anbindung einer Suchhilfe an ein Feld beeinflußt dessen Verhalten. Sie wird
daher als Teil der Definition dieses Feldes angesehen.
Die semantischen und technischen Eigenschaften eines Bildschirmfeldes (Typ,
Länge, F1-Hilfe...) werden im Normalfall nicht direkt bei der Definition der
Eingabemaske festgelegt. Vielmehr wird im Screen-Painter nur ein Verweis auf ein
(meist namensgleiches) ABAP Dictionary Feld angegeben. Das Bildschirmfeld
übernimmt dann die Eigenschaften dieses Feldes aus dem ABAP Dictionary. Das
selbe Prinzip wird auch für die Definition der Eingabehilfe eines Bildschirmfeldes
genutzt. Die Anbindung der Suchhilfe an das Suchfeld findet also nicht beim
Bildschirmfeld sondern beim zugeordneten ABAP Dictionary Feld statt.
Bei der Suchhilfeanbindung erfolgt eine Zuordnung zwischen den
Schnittstellenparametern der Suchhilfe und den Bildschirmfeldern, die Daten in
die Eingabehilfe eingehen lassen oder Daten aus der Eingabehilfe übergeben
bekommen sollen. Dabei muß das Suchfeld einem EXPORT-Parameter der
Suchhilfe zugeordnet werden. Es wird empfohlen, daß dieser Parameter
auch IMPORT-Parameter ist, damit vom Benutzer eingetragene Suchmustern
berücksichtigt werden.
Auch Felder ohne Suchhilfeanbindung können eine Eingabehilfe besitzen, da für
die F4-Hilfe noch weitere Mechanismen (z.B. Domänenfestwerte) benutzt werden.
Zur Anbindung einer Suchhilfe an ein Feld des ABAP Dictionary gibt es drei
Mechanismen:
1. Eine Suchhilfe kann direkt an ein Feld einer Struktur oder Tabelle
angebunden werden. Die Definition dieser Anbindung erfolgt weitgehend
analog zur Definition eines Fremdschlüssels. Insbesondere ist auch hier
eine Zuordnung zu definieren (zwischen den Schnittstellenparametern der
Suchhilfe und den Feldern der Struktur), für die das System einen Vorschlag
erzeugt.
2. Besitzt ein Feld eine Prüftabelle, so wird deren Inhalt automatisch als
mögliche Werte in der Eingabehilfe angeboten. Hierbei werden die
Schlüsselfelder der Prüftabelle angezeigt. Besitzt die Prüftabelle eine
Texttabelle, so wird noch deren erstes characterartiges Nichtschlüsselfeld
angezeigt. Ist die beschriebene Standarddarstellung des Datenbestandes
der Prüftabelle nicht zufriedenstellend, so kann an die Prüftabelle eine
Suchhilfe angebunden werden. Diese Suchhilfe wird dann für alle Felder
benutzt, die diese Tabelle als Prüftabelle besitzen. Bei der Anbindung ist
eine Zuordnung zwischen der Schnittstelle der Suchhilfe und dem Schlüssel
der Prüftabelle zu definieren.
3. Die Semantik eines Feldes und somit auch seine möglichen Werte sind bei
seinem Datenelement definiert. Es ist daher auch möglich, eine Suchhilfe
an ein Datenelement anzubinden. Die Suchhilfe steht dann für alle Felder
zur Verfügung, die auf dieses Datenelement verweisen. Bei der Anbindung
ist ein EXPORT-Parameter der Suchhilfe zu spezifizieren, über den die
Datenübertragung erfolgt.
Die direkt in der Ablauflogik des Dynpro definierten Eingabeprüfungen, aus denen
ebenfalls Eingabehilfen abgeleitet werden, sollten nicht mehr verwendet werden.
Im Menü der rechten Maustaste auf der Trefferliste wird die Funktion Technische
Info angeboten. Hiermit kann ermittelt werden, welcher der genannten
Mechanismen im Einzelfall genutzt wird.
Bei den im Rahmen einer Eingabehilfe anfallenden Selektionen muß oft ein
erheblicher Datenbestand durchsucht werden. Das kann zum einen dazu führen,
daß der einzelne Benutzer lange auf die Anzeige der möglichen Eingaben warten
muß, zum anderen wird dadurch die Belastung des Gesamtsystems gegebenenfalls
empfindlich erhöht.
Aus diesem Grund sollte bei der Definition einer Suchhilfe geprüft werden, ob
für die Selektionsmethode Maßnahmen zur Optimierung des Zugriffsverhaltens
getroffen werden müssen. Dies gilt insbesondere, wenn die Selektion über einen
View und somit über mehrere physische Tabellen erfolgt.
Ist die Anzahl der Einträge in der Selektionsmethode sehr groß, so sollte die
Treffermenge durch zusätzliche Bedingungen eingeschränkt werden. Dies erhöht
auch die Übersichtlichkeit der Trefferliste. Die zusätzlichen Bedingungen können
sich automatisch aus dem Kontext ergeben oder vom Benutzer im Popup zur
Werteeinschränkung erfragt werden. In vielen Fällen läßt sich die Performance
der Eingabehilfe entscheidend steigern, indem ein Index auf die Felder angelegt
wird, über die die entsprechenden Einschränkungen formuliert werden.
Ist die Anzahl der Einträge in der Selektionsmethode relativ klein, so sollte auf
jeden Fall geprüft werden, ob die Selektionsmethode gepuffert werden kann.
Die Menge der für ein Objekt sinnvollen Suchpfade hängt stark von den
besonderen Gegebenheiten beim jeweiligen SAP-Kunden ab. Daher besteht
oft der Wunsch, Sammelsuchhilfen des SAP Standards um eigene elementare
Suchhilfen zu erweitern. Ab Release 4.6 steht eine Appendtechnik zur Verfügung,
die die modifikationsfreie Erweiterung von Sammelsuchhilfen erlaubt.
Eine Append-Suchhilfe ist eine Sammelsuchhilfe, die einer anderen
Sammelsuchhilfe (ihrer Appendierenden) fest zugeordnet ist und diese um die in
sie inkludierten Suchhilfen erweitert.
Die Append-Suchhilfe übernimmt die Schnittstelle ihrer Appendierenden. Die
Append-Suchhilfe liegt dabei im Namensraum des Kunden. Im Normalfall werden
die in die Append-Suchhilfe inkludierten Suchhilfen ebenfalls vom Kunden
angelegt und liegen in dessen Namensraum. Es ist aber auch möglich, daß die
benötigte elementare Suchhilfe schon von SAP bereit gestellt ist und vom Kunden
nur noch in seine Append-Suchhilfe aufgenommen werden muß.
Innerhalb der SAP werden Append-Suchhilfen benutzt, um eine bessere
Komponententrennung zu erreichen. Einige SAP-Sammelsuchhilfen
besitzen daher bereits im Standard eine oder mehrere Append-Suchhilfen.
Kundenerweiterungen sollten aber immer durch das Anlegen einer eigenen
Append-Suchhilfe vorgenommen werden.
SAP-Sammelsuchhilfen beinhalten oft elementare Suchhilfen, die nicht von allen
Kunden benötigt werden. Die nicht benötigten Suchhilfen können mit Hilfe
einer Append-Suchhilfe ausgeblendet werden. Dazu muß die entsprechende
Suchhilfe in die Append-Suchhilfe aufgenommen werden, wobei das Kennzeichen
ausgeblendet zu setzen ist.
Durch die Zuordnung eines Defaultwerts kann ein Parameter mit einem Wert
vorbelegt werden. Der Parameter erhält diesen Wert dann immer, es sei denn, es
handelt sich um einen IMPORT-Parameter, der mit einem Feld des Dynpros,
seines Modulpools oder mit einem Parameter der inkludierenden Sammelsuchhilfe
verbunden ist.
Defaultwerte können sein: Literale, Systemfelder und GET-Parameter.
Ein Defaultwert kann auch genutzt werden, um eine einfache Selektionsbedingung
an ein Feld der Selektionsmethode zu formulieren.
Elementaren Suchhilfen kann ein einzelner Buchstabe oder eine Ziffer als
Kurzanwahl zugeordnet werden. Steht diese elementare Suchhilfe bei einem
Bildschirmfeld für die Eingabehilfe zur Verfügung und befindet sich in diesem Feld
bei Aufruf der Eingabehilfe die Kurznotation =<Kurzanwahl>.<SEL1>.<SEL2>,
so wird diese elementare Suchhilfe prozessiert. Dabei werden <SEL1>, <SEL2>
als Inhalte für die Felder des Popups zur Werteeinschränkung genommen (durch
ein * am Ende ergänzt) und dann direkt die Trefferliste angezeigt.
In einer Sammelsuchhilfe können einzelne Suchhilfeinklusionen ausgeblendet
werden. Somit besteht die Möglichkeit einzelne Suchpfade, die in einem System
nicht erwünscht sind, dort zu deaktivieren. Diese Ausblendung sollte aber im
Normalfall in einer Append-Suchhilfe vorgenommen werden, da sie dann ohne
Modifikation erfolgen kann.
Parameter einer elementaren Suchhilfe können auf dem Popup zur
Werteeinschränkung als reine Anzeigefelder ausgewiesen werden. Generell
werden IMPORT-Parameter, denen nicht änderbare Felder des Dynpros
zugeordnet sind, auf diesem Popup nicht änderbar angezeigt.
Eine Suchhilfe ist ein Objekt, das eine Eingabehilfe im Rahmen eines
systemweiten Standards beschreibt. In manchen Fällen erfordert die spezielle
Semantik eines Feldes, in Details von diesem Standard abzuweichen. Eine solche
Abweichung kann durch ein Suchhilfe-Exit realisiert werden.
Ein Suchhilfe-Exit ist ein Funktionsbaustein, der eine genormte Schnittstelle
besitzt. Als Vorlage kann der Funktionsbaustein F4IF_SHLP_EXIT_EXAMPLE
verwendet werden. Besitzt eine Suchhilfe ein solches Suchhilfe-Exit, so wird
dieses vor jedem Einzelschritt des Ablaufs aufgerufen. Über die Schnittstelle
werden ihm dabei die Verwaltungsdaten des Hilfeprozessors übergeben. Das
Suchhilfe-Exit kann diese Daten manipulieren.
Insbesondere enthalten die Verwaltungsdaten auch die Information über den
nächsten durchzuführenden Schritt. Das Suchhilfe-Exit kann nun vorbereitende
Aktionen für diesen Schritt ausführen oder aber den Schritt vollkommen selbst
übernehmen (z.B. eine Datenselektion, die nicht über ein SELECT auf eine
Tabelle oder einen View realisierbar ist). Im zweiten Fall wird das Suchhilfe-Exit
dann auch die Information über den nächsten durchzuführenden Schritt verändern.
Mit dem Präfix F4UT_ sind bereits einige Funktionsbausteine definiert, die
als Suchhilfe-Exits verwendet werden können oder die zur Manipulation der
Verwaltungsdaten in Suchhilfe-Exits genutzt werden können. Suchhilfe-Exits
sollten nur in Ausnahmefällen verwendet werden.
Suchhilfe-Exits bergen die Gefahr einer unnötigen Abweichung vom Standard und
erschweren die Wartung der Eingabehilfe.
Das Control ist vor allem dann nützlich, wenn (etwa in einem Table Control)
mehrere Felder mit gleicher Eingabehilfe nacheinander gefüllt werden sollen.
Mit der Funktion Liste halten kann das Control aus der modalen Hilfe heraus
gestartet werden.
Unternehmensszenario
Für viele Verwaltungstätigkeiten müssen die entsprechenden Sachbearbeiter nach
Daten von Mitarbeitern suchen. Hierfür sollen Sie geeignete Suchmöglichkeiten
zur Verfügung stellen.
Aufgabe:
Sie sollen eine einfache Suchhilfe für ein Eingabefeld anlegen.
1. Gehen Sie in die Anzeige der Tabelle ZDEPMENT##, und rufen Sie hier die
Funktion Hilfsmittel ->Tabelleninhalt ->Einträge erfassen auf.
Sie gelangen auf eine Eingabemaske, in der Sie neue Einträge für die Tabelle
ZDEPMENT## (z.B. neue Abteilungen) anlegen können. Hierbei soll auch
der Leiter der neuen Abteilungen festgelegt werden. Der entsprechende
Eintrag erfolgt im Feld Abteilungsleiter. Zur Unterstützung der Pflege
dieses Feldes sollte für dieses eine Eingabehilfe zur Verfügung stehen, die
die (Personalnummern der) Mitarbeiter anzeigt. Verifizieren Sie, daß das
genannte Feld bereits eine Eingabehilfe besitzt. Stellen Sie fest, welcher
Mechanismus der Eingabehilfe an dieser Stelle wirksam ist.
Ziel dieser Aufgabe ist es nun, die zur Prüftabelle ZEMPLOY## gehörende
Eingabehilfe benutzungsfreundlicher zu gestalten. Sie können den Erfolg
durch erneuten Aufruf der oben beschriebenen Eingabehilfe später
kontrollieren. Um dies zu erreichen, müssen Sie eine elementare Suchhilfe
ZEMPLOY##_ESH1 anlegen. Auf der Trefferliste sollen dabei die
folgenden Merkmale in dieser Reihenfolge erscheinen:
Fluggesellschaft
Vorname
Nachname
Personalnummer
Wegen der großen Zahl der Mitarbeiter soll der Benutzer vor der Anzeige
der Treffermenge auf jeden Fall die Möglichkeit erhalten, die angezeigten
Werte durch Angabe von Nach- und/oder Vorname der gesuchten Person
einzuschränken. Berücksichtigen Sie dabei, daß die Einschränkung über den
Nachnamen wesentlich häufiger genutzt wird als die über den Vornamen.
Wurde vor dem Aufruf der Eingabehilfe bereits eine Fluggesellschaft
spezifiziert, so sollen auch nur deren Mitarbeiter angeboten werden.
Andernfalls soll ein eventuell auf der Eingabemaske befindliches
Eingabefeld für die Fluggesellschaft ebenfalls gefüllt werden, wenn Sie den
Mitarbeiter auswählen. Sorgen Sie dafür, daß die definierte Suchhilfe für die
Prüftabellenhilfe der Tabelle ZEMPLOY## genutzt wird, und kontrollieren
Sie den Erfolg wie oben beschrieben.
2. Damit die soeben angelegte Suchhilfe die Prüftabellenhilfe der
Tabelle ZEMPLOY## (und somit auch die Eingabehilfe des Feldes
ZDEPMENT##-Abteilungsleiter) verbessert, muß sie noch an die Tabelle
ZEMPLOY## angebunden werden.
3. Für die Suche nach Mitarbeitern sollen eventuell noch weitere Suchpfade
angeboten werden. Führen Sie dazu die folgenden vorbereitenden
Maßnahmen durch:
Kopieren Sie die Suchhilfe SAREA in Ihre neue Suchhilfe ZEM-
PLOY##_AREA. Ändern Sie die Parameter, die Selektionsmethodentabelle
und die Datenelemente in Ihrer Kopie so, dass sie sich auf die in Ihrer Tabelle
verwendeten Namen beziehen anstatt auf die Namen in der Originaltabelle.
Prüfen und aktivieren Sie die Suchhilfe. Kopieren Sie die Suchhilfe
SDEPT in Ihre neue Suchhilfe ZEMPLOY##_DEPT. Ändern Sie sie
entsprechend und aktivieren Sie sie (wie oben). Kopieren Sie die Suchhilfe
ZEMPLOY##_DEPT nach ZEMPLOY##_CSH und wandeln Sie die
neue Kopie in eine Sammelsuchhilfe um. Nehmen Sie die Suchhilfen
ZEMPLOY##_ESH1, ZEMPLOY##_AREA und ZEMPLOY##_DEPT als
Komponenten in die neue Sammelsuchhilfe auf.
Ändern Sie die für die Prüftabellenhilfe von Tabelle ZEMPLOY## definierte
Suchhilfe und überprüfen Sie Ihren Erfolg.
4. Ihre geschäftlichen Anforderungen haben sich geändert und machen die
Suche nach Mitarbeitern erforderlich. Der Suchpfad, mit dem Mitarbeiter
über ihre Abteilungen gesucht werden können, ist gegenwärtig nicht
erwünscht.
Verändern Sie die Eingabehilfe des Feldes ZDEPMENT##-Abteilungsleiter
entsprechend diesen Vorgaben, ohne die Suchhilfe ZEMPLOY##_CSH
(oder eine beteiligte Tabelle) zu modifizieren. Legen Sie dazu eine
Append-Suchhilfe für ZEMPLOY##_CSH an. Dieses Append sollte
die Suchhilfe ZEMPLOY##_DEPT als verborgene Suchhilfe enthalten.
Überprüfen Sie Ihren Erfolg.
Mitarbeiter auswählen. Sorgen Sie dafür, daß die definierte Suchhilfe für die
Prüftabellenhilfe der Tabelle ZEMPLOY## genutzt wird, und kontrollieren
Sie den Erfolg wie oben beschrieben.
a) Wählen Sie Suchhilfe im Einstiegsbild des ABAP Dictionary, und
geben Sie in das entsprechende Feld den Namen ZEMPLOY##_ESH1
ein.
b) Wählen Sie Anlegen. Bestätigen Sie im folgenden Dialogfenster, daß
Sie eine elementare Suchhilfe anlegen möchten.
c) Erfassen Sie eine Kurzbeschreibung für Ihre Suchhilfe.
d) Die Suchhilfe soll die Suche nach Mitarbeitern unterstützen.
Diese werden in der Tabelle ZEMPLOY## verwaltet. Also ist als
Selektionsmethode diese Tabelle (oder ein View auf diese) zu wählen.
Für die beschriebene Aufgabe reicht die Tabelle aus. Tragen Sie diese
in das Feld Selektionsmethode ein.
e) Um das beschriebene Verhalten zu erreichen, müssen Sie den Dialogtyp
Dialog mit Werteeinschränkung wählen.
f) Wählen Sie die Suchhilfeparameter über die F4-Hilfe aus. Es empfiehlt
sich, die Trefferliste mit den möglichen Suchhilfeparametern mittels
Liste halten festzuhalten, da die Hilfe dann nicht mehrfach aufgerufen
werden muß. Wählen Sie als Parameter die Felder Fluggesellschaft,
Vorname, Nachname und Personalnummer aus.
g) Markieren Sie alle Parameter als EXPORT-Parameter (Spalte
EXP). Markieren Sie das Merkmal, nach dem gesucht wird,
(z.B. Personalnummer) sowie die hierarchisch darüber stehende
Fluggesellschaft als IMPORT-Parameter (Spalte IMP). Letzteres stellt
sicher, daß ein entsprechender Eintrag auf der Eingabemaske (wie in
der Aufgabe beschrieben) berücksichtigt wird.
h) Um die Trefferliste zu gestalten, müssen Sie in der Spalte LPos
entsprechende Positionsnummern (z.B. 1, 2, 3, 4, 5) vergeben.
i) Um das Dialogfenster zur Werteeinschränkung zu gestalten, müssen
Sie in der Spalte SPos Positionsnummern vergeben. Tragen Sie also
in diese Spalte bei den Parametern Vorname und Nachname positive
Zahlen ein, wobei der Wert bei Nachname kleiner sein soll als der
bei Vorname.
j) Aktivieren Sie Ihre Suchhilfe. Die Suchhilfe wirkt nun noch nicht beim
Feld ZDEPMENT##-Abteilungsleiter. Sie können die Suchhilfe aber
mit der Funktion Testen sofort ausprobieren.
Ändern Sie die für die Prüftabellenhilfe von Tabelle ZEMPLOY## definierte
Suchhilfe und überprüfen Sie Ihren Erfolg.
a) Geben Sie auf dem Einstiegsbild des Dictionary im Namensfeld der
Suchhilfe SAREA ein und wählen Sie Kopieren. Ändern Sie den
Suchhilfenamen im Feld nach auf ZEMPLOY##_AREA und wählen
Sie Weiter. Wählen Sie Ändern für die neue Suchhilfe.
b) Ändern Sie die Selektionsmethodentabelle in ZEMPLOY##. Ändern
Sie die Parameternamen so, dass Sie den Tabellenfeldern entsprechen,
indem Sie den Parameter und die Eingabehilfe auswählen. Auf diese
Weise wird auch der Datenelementbezug korrigiert. Korrigieren Sie
die anderen Angaben nach Bedarf, führen Sie eine Syntaxprüfung der
Definition durch und aktivieren Sie die Suchhilfe.
c) Wiederholen Sie Schritte a) und b) zum Anlegen der Suchhilfe
ZEMPLOY##_DEPT unter Verwedung der Vorlage SDEPT.
d) Kopieren Sie die Suchhilfe ZEMPLOY##_DEPT nach
ZEMPLOY##_CSH. Rufen Sie auf dem Suchhilfenpflegebild
Bearbeiten ® Suchhilfetyp ändern auf und bestätigen Sie die Änderung.
e) Fügen Sie einen Import-Parameter für den Bereich ein. Dieser muss
auf das Datenelement verweisen, das Sie für ZEMPLOY##-Bereich
verwendet haben.
f) Wählen Sie die Registerkarte Inkludierte Suchhilfen. Geben Sie die
Suchhilfe ZEMPLOY##_ESH1 ein.
g) Positionieren Sie den Cursor auf die soeben eingetragene Suchhilfe.
Wählen Sie Parameterzuordnung. Lassen Sie sich einen Vorschlag für
die Zuordnung erzeugen.
h) Der Vorschlag ist vermutlich bereits korrekt. Prüfen Sie den Vorschlag
zur Sicherheit und übernehmen Sie ihn dann.
i) Wiederholen Sie die Schritte 4 – 6 für die inkludierten Suchhilfen
ZEMPLOY##_AREA und ZEMPLOY##_DEPT.
j) Aktivieren Sie die Suchhilfe ZEMPLOY##_CSH.
k) Gehen Sie zum Pflegebild für Tabelle ZEMPLOY##, um die Suchhilfe
für die Tabelle zu ändern. Wählen Sie Springen->Suchhilfe->Für
Tabelle und ändern Sie den Suchhilfenamen in ZEMPLOY##_CSH.
Lassen Sie sich vom System einen Vorschlag erstellen, kontrollieren
und übernehmen Sie ihn. Aktivieren Sie Tabelle ZEMPLOY##.
l) Durch Aufruf der Eingabehilfe für das Feld ZDEPMENT##-
Abteilungsleiter können Sie feststellen, dass die Eingabehilfe
unverändert funktioniert und eine Sammelsuchhilfe jetzt wirksam ist.
Weiterführende Informationen
• Für weitere Informationen verwenden Sie bitte die Onlinehilfe, oder den
Servicemarktplatz der SAP ( http://service.sap.com)