Programmieren mit SAP ABAP: Teil 2 – Das ABAP Dictionary in der Praxis
Im ersten Teil der Blogreihe “Programmieren mit SAP ABAP” haben Sie das ABAP Dictionary als mächtiges Entwicklerwerkzeug im ABAP-Universum in seinen theoretischen Grundzügen kennengelernt. Beim zweiten Teil steigen Sie anhand eines Fallbeispiels in die praktische Nutzung des ABAP Dictionary ein.
Inhaltsverzeichnis
- Domänen anlegen
- Datenelemente anlegen
- Anlage einer Datenbanktabelle
- Erfassung von Datensätzen in einer Datenbanktabelle
- Erstellung eines Tabellenpflegebildes für den Nutzer
Fallbeispiel Bäckerei
Im SAP-System einer großen Bäckereikette soll zu allen Verkaufsprodukten eine Reihe von Informationen hinterlegt werden:
- Produkt-ID (Datentyp NUMC, 6-stellig)
- Produktbezeichnung (Datentyp CHAR, 40-stellig)
- Produktkategorie (Optionen: 1 = Brote, 2 = Brötchen und Kleingebäck, 3 = Süßwaren, Kuchen und Torten) (Datentyp NUMC, 1-stellig)
- Datum der Produkteinführung (Datentyp DATS, 8-stellig)
- Produktkennzeichnung „vegan“ (Optionen: X = ja, leeres Feld = nein) (Datentyp CHAR, 1-stellig)
Alle Informationen sollen in einer gemeinsamen Datenbanktabelle abgelegt werden. Bevor Sie die Tabelle im Dictionary anlegen, definieren Sie für die gewünschten Tabellenfelder zunächst alle notwendigen Domänen und Datenelemente. Beginnen wir mit dem ersten praktischen Schritt, zum Programmieren mit SAP ABAP!
Domänen anlegen
- Falls Sie sich nicht bereits im ABAP Dictionary befinden, öffnen Sie dieses durch Eingabe und Bestätigung des Transaktionscodes SE11.
- Wählen Sie zur Anlage der Domäne für die Produktbezeichnung den Radiobutton Domäne aus und geben Sie in das Textfeld einen passenden Namen ein. Beachten Sie dabei, dass die Bezeichnungen von Kundenobjekten nach der SAP-Namenskonvention mit dem Buchstaben Z, Y oder einer speziellen, bei SAP durch den Kunden reservierten Folge aus Schrägstrichen und Buchstaben (sogenannten Präfixnamensraum, zum Beispiel /NUTSHELL/) beginnen. Nennen Sie Ihre Domäne für die Produkt-ID beispielsweise Z_NUMC6 und klicken Sie auf Anlegen. In der Regel ist es hier sinnvoll, sich bei der Namensgebung eher an den gewünschten technischen Eigenschaften des Feldes (Datentyp NUMC, 6-stellig) als an der geplanten Feldbezeichnung („Produkt-ID“) zu orientieren, da die Domäne gegebenenfalls im Laufe weiterer Entwicklungen auch für andere Felder beziehungsweise Datenelemente wiederverwendet werden kann.
- Pflegen Sie eine aussagekräftige Kurzbeschreibung für Ihre Domäne. Tragen Sie als Datentyp NUMC und als Zahl der Stellen sowie als Ausgabelänge 6 ein.
- Speichern, prüfen und aktivieren Sie die Domäne über folgende Icons:
- In dem erscheinenden Dialogfenster legen Sie fest, ob das angelegte Objekt später in ein anderes SAP-System transportiert werden soll. In der Regel legen Sie Objekte und Programme zunächst in einem Entwicklungssystem an. Von diesem aus werden sie später zunächst in ein Testsystem transportiert und durch entsprechende Vertreter des Kunden aus Anwendersicht getestet. Ein Transport in das Produktivsystem, in dem die Anwendungen tagtäglich „real“ genutzt werden, findet erst statt, wenn diese Tests erfolgreich verlaufen sind (gegebenenfalls nach Durchführung von Korrekturen). Für diese Transporte werden Objekte im Entwicklungssystem in sogenannten Entwicklungspaketen gebündelt. Da es sich hier um eine Übungsaufgabe handelt und ein Transport nicht geplant ist, müssen Sie an dieser Stelle kein Paket eintragen. Klicken Sie stattdessen auf den Button Lokales Objekt:
-
- Legen Sie alle weiteren Domänen analog dazu an. Bei der Domäne zur Typisierung der Produktkategorie ist der Reiter Wertebereich zusätzlich so zu bearbeiten, dass dem Festwert 1 die Kurzbeschreibung „Brote“, dem Wert 2 „Brötchen und Kleingebäck“ und dem Wert 3 „Süßwaren, Kuchen und Torten“ zugeordnet wird.
Datenelemente anlegen
Um die nun festgelegten technischen Eigenschaften der Tabellenfelder um semantische Informationen zu ergänzen, werden entsprechende Datenelemente angelegt.
- Kehren Sie zum Startbildschirm des ABAP Dictionary beziehungsweise der Transaktion SE11 zurück.
- Wählen Sie den Radiobutton Datentyp aus und geben Sie in das Textfeld einen passenden Namen ein, z. B. Z_PROD_ID für das Datenelement, das die Produkt-ID beschreiben soll. Nachdem Sie auf Anlegen geklickt haben, werden Sie nach der Art des anzulegenden Datentyps gefragt. Wählen Sie Datenelement aus und bestätigen Sie.
- Geben Sie auch hier eine aussagekräftige Kurzbeschreibung ein und wählen Sie als Domäne Ihre soeben angelegte Domäne Z_NUMC6 aus. Sobald Sie Ihre Eingabe mit Enter bestätigen, werden die Eigenschaften der Domäne angezeigt.
-
- Pflegen Sie im Reiter Feldbezeichner die gewünschten Kurz-, Mittel- und Langbezeichnungen sowie Überschriften für Ihr Datenelement.
- Speichern, prüfen und aktivieren Sie das Datenelement.
- Legen Sie alle weiteren Datenelemente analog dazu an. Für eine bessere Übersichtlichkeit sollten alle Datenelemente mit Z_PROD_… beginnen, z. B. Z_PROD_BEZ für die Produktbezeichnung.
Anlage einer Datenbanktabelle
Auf Grundlage der zuvor definierten Komponenten kann nun eine Datenbanktabelle zur Speicherung der produktbezogenen Informationen angelegt werden.
- Kehren Sie zum Startbildschirm des ABAP Dictionary beziehungsweise der Transaktion SE11 zurück.
- Wählen Sie den Radiobutton Datenbanktabelle aus und geben Sie in das Textfeld einen passenden Namen für Ihre Tabelle ein, zum Beispiel ZBACKWAREN, und klicken Sie auf Anlegen.
- Pflegen Sie eine passende Kurzbeschreibung und wählen Sie als Auslieferungsklasse A aus (= Anwendungstabelle, Stamm- und Bewegungsdaten). Geben Sie im Feld Data Browser/Tabellensicht-Pflege außerdem „Anzeige/Pflege erlaubt“ ein. Dies ist notwendig, um die Tabelle später mit Daten füllen zu können – wird die Pflege hier nicht erlaubt, kann die Änderung der Tabelleneinträge nicht direkt durch den Nutzer erfolgen, sondern nur über die automatisierte Bearbeitung durch Programme.
- Wechseln Sie zum Reiter Felder, um die Spalten Ihrer Tabelle zu definieren. Möglicherweise ist Ihnen das SAP-Mandantenkonzept bereits bekannt, welches dazu dient „ein SAP-System in mehrere logische Subsysteme – Mandanten – zu unterteilen, [die] wie eigene Systeme betriebswirtschaftlich unabhängig […] genutzt werden.“ In Datenbanktabellen muss der Mandant, dem die Daten in der Tabelle zugeordnet werden sollen, als Teil des Primärschlüssels definiert werden, wenn eine mandantenabhängige Pflege der Daten möglich sein soll. Für Anwendungs- und Stammdatentabellen sollte dies fast immer der Fall sein.
- Tragen Sie daher als erstes Feld MANDT ein. Das dazugehörige Datenelement ist standardmäßig bereits definiert und heißt ebenfalls MANDT.
- Sobald Sie die Eingabe des Datenelements mit Enter bestätigen, werden die Eigenschaften dieser Komponente eingeblendet. Setzen Sie nun noch einen Haken in der Spalte Key, um das Mandantenfeld als Teil des Primärschlüssels festzulegen.
- Setzen Sie außerdem einen Haken in der Spalte Initialwert. Auf diese Weise wird ein Feld für den Fall, dass es in einem Datensatz leer ist, automatisch mit einem (zu dem erwarteten Datentyp passenden) Initialwert befüllt.
- Dieser Wert variiert je nach dem vom Feld erwarteten Datentyp – Für eine Integerzahl (Typen INT1, INT2, INT4) wird beispielsweise standardmäßig der Wert 0 gesetzt, für ein Datum (Typ DATS) der Wert 00000000.
- Die Belegung von Feldern mit Initialwerten ist insofern vorteilhaft, als dass sie das Auftreten sogenannter NULL-Werte in Datenbanktabellen verhindert. Solche können zum Beispiel bei Datenbankabfragen leicht zu Fehlern führen.
- Damit jeder Tabelleneintrag sich eindeutig identifizieren lässt, ist es erforderlich, der Tabelle mindestens ein Feld mit unverwechselbarem Inhalt hinzuzufügen. Am besten eignet sich dafür eine laufende Nummer oder ID, in unserem Fall die Produkt-ID, welche die einzelnen Backwaren voneinander unterscheidet. Tragen Sie daher als zweites Feld unter MANDT das Feld PRODUKTID ein und in der Spalte Datenelement das Datenelement, das Sie zuvor für die ID angelegt haben: Z_PROD_ID.Da die ID ebenfalls ein Schlüsselfeld sein soll, setzen Sie auch hier jeweils den Haken in den Spalten Key und Initialwert. Es ist zu beachten, dass alle Schlüsselfelder zusammenhängend am Anfang der Tabelle stehen müssen. Das Feld PRODUKTID wird es uns erlauben, manuell die Kennziffer eines Produktes zu pflegen. In der Regel werden solche Kennziffern in SAP auf der Basis von sogenannten Nummernkreisen als laufende Nummern automatisch hochgezählt. Da eine detaillierte Erläuterung dieses Mechanismus jedoch den Rahmen des Blogartikels sprengen würde, soll an dieser Stelle nur ein Verweis auf den SAP-Hilfeartikel zum Thema Nummernkreise gegeben werden.
- Tragen Sie auch die weiteren Felder, die Ihre Tabelle enthalten soll, jeweils mit einer passenden Bezeichnung und dem zugehörigen Datenelement ein. Da Sie bereits Schlüsselfelder definiert haben, müssen Sie die übrigen Felder nicht mit Haken in den Spalten Key und Initialwert versehen. Wenn Sie alle Felder eingegeben haben, sollte Ihre Tabelle ungefähr wie folgt aussehen:
- Nach der Felddefinition sind für Ihre Datenbanktabelle noch einige technische Details anzugeben. Betätigen Sie zu diesem Zweck die Drucktaste Technische Einstellungen.
- Legen Sie dort zunächst die gewünschte Datenart für die Tabelle fest. Diese bestimmt, in welchen physischen Bereich die Tabelle innerhalb des Systems eingeordnet wird. Da in Ihrer Tabelle lediglich Stammdaten (Daten, die selten geändert werden müssen) angelegt werden sollen, wählen Sie hier die Datenart APPL0. Eine Übersicht über alle relevanten Datenarten finden Sie in folgendem SAP-Hilfeartikel.
- Durch die Auswahl einer entsprechenden Größenkategorie geben Sie außerdem an, wie viele Datensätze in der Tabelle zu erwarten sind. Da Sie von aktuell circa 2.000 verschiedenen Backwaren ausgehen, wählen Sie hier die Kategorie 0 aus (entspricht 0 bis 4.300 erwarteten Datensätzen). Der gewählten Größenkategorie entsprechend wird eine bestimmte Menge an Speicherplatz für die Tabelleneinträge reserviert – um eine Verschwendung von Speicherplatz zu verhindern, ist es daher wichtig, die Größenkategorie mit Bedacht zu wählen.
- Sie können des Weiteren entscheiden, ob und wenn ja, in welcher Form Ihre Tabelle gepuffert werden soll. Auf jedem Applikationsserver des Systems befinden sich Tabellenpuffer zur Zwischenspeicherung der Datensätze aus der Tabelle. Wenn Sie die Pufferung einschalten, können Sie über den Puffer einerseits schneller auf die Datensätze zugreifen. Andererseits muss jede Änderung an einer gepufferten Tabelle auf allen Applikationsservern nachgezogen werden. Durch diese Synchronisation werden die Änderungen erst mit einem gewissen zeitlichen Verzug sichtbar, so dass die Tabelle, die Sie als Nutzer sehen, vielleicht nicht immer auf dem aktuellen Stand ist. Bei Tabellen, die sich häufig ändern, kann der Synchronisationsaufwand unter Umständen den Performancegewinn durch die Pufferung übersteigen. In diesem Beispiel soll die Pufferung nicht genutzt werden.
-
- Speichern, prüfen und aktivieren Sie die Datenbanktabelle. Das folgende Dialogfenster erscheint. Bestätigen Sie mit Ja.
- Im Aktivierungsprotokoll werden Ihnen mit gelber Markierung Warnungen angezeigt.
- Springen Sie über den Zurück-Button wieder zu den Tabelleneigenschaften zurück. Über den Pfad Zusätze → Erweiterungskategorie… öffnet sich das folgende Pop-Up. Schließen Sie dieses mit einem Klick auf den grünen Haken.
- Sie können nun eine Erweiterungskategorie für Ihre Tabelle pflegen. Durch diese wird festgelegt, ob und inwiefern die Tabellenstruktur nach ihrer initialen Anlage um weitere Felder ergänzt werden kann.
Was die möglichen Kategorien im Einzelnen beinhalten, ist ausführlich in der SAP-Hilfe zu diesem Thema beschrieben (Sie können diese aufrufen, indem Sie die F1-Taste betätigen). Hier ein Auszug daraus:
-
- nicht erweiterbar: Die Struktur darf nicht erweitert werden.
- erweiterbar und zeichenartig: Alle Strukturkomponenten und deren Erweiterungen müssen zeichenartig (C, N, D oder T) sein. Die Ausgangsstruktur und alle Erweiterungen durch Customizing-Includes oder durch Append-Strukturen unterliegen dieser Einschränkung.
- erweiterbar und zeichenartig oder numerisch: Die Struktur und deren Erweiterung darf keine tiefen Datentypen (Tabellen, Referenzen, Strings) enthalten.
- beliebig erweiterbar: Die Struktur und deren Erweiterung darf Komponenten enthalten, deren Datentyp beliebig ist.
- nicht klassifiziert: Diese Kategorie kann beispielsweise für einen Übergangszustand gewählt werden, allerdings nicht beim Anlegen von Strukturen.
Wählen Sie in diesem Fall für eine maximale Flexibilität die Kategorie beliebig erweiterbar aus, bestätigen Sie diese mit Übernehmen und aktivieren Sie die Tabelle erneut.
Erfassung von Datensätzen in einer Datenbanktabelle
Damit Sie einen Grundstock an eigenen Daten haben, mit denen Sie später im Rahmen Ihrer ABAP-Übungsprogramme arbeiten können, erfassen Sie im Folgenden einige Datensätze in Ihrer neuen Tabelle.
- Springen Sie über den Pfad Hilfsmittel → Tabelleninhalt → Einträge erfassen in die Maske zur Pflege neuer Tabelleneinträge.
- Erfassen Sie das erste Produkt mit Angaben Ihrer Wahl, z. B.:
- Speichern Sie Ihre Eingaben über den Disketten-Button. Im unteren Bildschirmbereich wird Ihnen anschließend eine entsprechende Erfolgsmeldung angezeigt.
-
-
- Überschreiben Sie die Inhalte der Eingabefelder, um das nächste Produkt mit den dazugehörigen Informationen zu erfassen, und speichern Sie Ihre Eingaben wieder. Erfassen Sie auf diese Weise mindestens zehn Datensätze.
- Betätigen Sie den Zurück-Button, um wieder zu den Tabelleneigenschaften zu gelangen.
- Klicken Sie in der horizontalen Menüleiste auf die Schaltfläche mit drei Spalten, von denen eine blau eingefärbt ist. Machen Sie im darauffolgenden Selektionsbild keine Eingaben, sondern lassen Sie sich über das Uhr-Symbol mit grünem Haken direkt den vollständigen Tabelleninhalt anzeigen. Sie sollten nun alle Tabelleneinträge sehen, die Sie zuvor erfasst haben.
-
Auch aus dieser Maske heraus ist es möglich, weitere Datensätze zu pflegen. Dazu können Sie auf das Seiten-Symbol links neben dem Stift-Symbol klicken. Vorhandene Einträge lassen sich mit Hilfe des Stift-Icons bearbeiten.
Erstellung eines Tabellenpflegebildes für den Nutzer
Der „Otto-Normal-Nutzer“ hat als Nicht-Entwickler nicht unbedingt Zugriff auf die Transaktion SE11 im SAP-System. Damit er dennoch die Möglichkeit hat, Einträge in einer Datenbanktabelle zu pflegen, können Sie für den Nutzer ein entsprechendes Pflegebild erstellen.
- Kehren Sie über die Transaktion SE11 zum Einstiegsbildschirm des ABAP Dictionary zurück und geben Sie im Feld Datenbanktabelle den Namen Ihrer Tabelle ein.
- Über den Pfad Hilfsmittel → Tabellenpflegegenerator gelangen Sie zum Pflegegenerator für die soeben eingetragene Tabelle.
- An dieser Stelle sind einige technische Angaben zum Dialog zu pflegen, welcher erstellt werden soll:
- Tragen Sie als Berechtigungsgruppe zu Übungszwecken &NC& („ohne Berechtigungsgruppe“) ein. Im „echten“ Leben kann hier je nach Bedarf auch eine andere geeignete Berechtigungsgruppe ausgewählt werden.
- Mit Anlage des Tabellen-Pflegedialogs wird automatisch eine Funktionsgruppe erzeugt. Im Coding dieser Funktionsgruppe können Sie die Optik und die Aussteuerung des Pflegedialogs gegebenenfalls noch nachträglich manipulieren. Die Funktionsgruppe sollte idealerweise dieselbe Bezeichnung wie Ihre Tabelle haben, damit Sie sie später leichter auffinden und bearbeiten können.
- Wählen Sie als Pflegetyp einstufig aus und klicken Sie anschließend auf die Schaltfläche Bildnummer(n) suchen. Wählen Sie im erscheinenden Dialogfenster den Radiobutton Bildnummer(n) vorschlagen aus und bestätigen Sie mit dem weißen Häckchen auf grünem Hintergrund. Das Eingabefeld Übersichtsbild sollte nun mit einer vom System vorgeschlagenen Bildnummer gefüllt sein.
- Klicken Sie auf das Seiten-Icon links neben Bildnummer(n) suchen, um das Pflegebild anzulegen, und in den nachfolgenden Dialogfenstern jeweils auf das Disketten-Symbol, um den neuen Objektkatalogeintrag zu speichern (wieder als lokales Objekt).
- Öffnen Sie nun testweise die Transaktion SM30, über die der Nutzer die Datenbanktabelle dann selbst pflegen könnte. Geben Sie in das Feld Tabelle/Sicht den Namen der Datenbanktabelle ein und klicken Sie auf Pflegen.
- Es öffnet sich der von Ihnen erstellte Pflegedialog, über den Sie und der Nutzer weitere Tabelleneinträge erfassen oder vorhandene modifizieren können.
Fertig! In Teil 3 der Blogreihe “Programmieren mit SAP ABAP” wird ein ABAP-Programm erstellt, mit dem nach einem bestimmten Kriterium ausgewählte Datensätze der Tabelle in Form einer Liste für den Nutzer ausgegeben werden.
Über den Autor
Franziska Georg beschäftigt sich im Bereich Workplace Solutions mit der Entwicklung von Lösungsbausteinen im Rahmen von Microsoft 365. Standardprodukte wie SharePoint Online oder Microsoft Teams passt sie mit Hilfe der eigenentwickelten Komponenten so an, dass eine individuell zugeschnittene Arbeitsumgebung entsteht.
Sehr geehrte Frau Georg,
ich befinde mich momentan im 4.Semester meines Master Studiums und bin dabei meine Masterarbeit zu schreiben. Mein Thema handelt von der „Work-Life Balance“ und bei meiner Recherche bin ich auf Ihr Buch gestoßen. Es ist leider nirgends frei verfügbar, jedoch interessant für meine Masterarbeit. Deswegen versuche ich über diesem Wege zu fragen, ob Sie mir das Buch als digitale Ausgabe per E-Mail schicken könnten? Es würde mir sehr weiterhelfen.
Vielen Dank.
Mit freundlichen Grüßen
Olympia Korouni
Hi! Dein Beitrag ist richtig gut gemacht, danke für die Hilfe! Freue mich schon auf Teil 3:)