Sie sind auf Seite 1von 71

ABAP Delta

ABAP Delta

-

1

-

1. Entwicklungswerkzeuge

1.1

ABAP-Editor

Der neue ABAP-Editor muss zunächst einmal aktiviert werden:

Der neue ABAP-Editor muss zunächst einmal aktiviert werden: Die Option wird nur angeboten, wenn sowohl das

Die Option wird nur angeboten, wenn sowohl das SAP-System wir auch der SAPGui einen Mindest-Releasestand haben.

Das Layout des neuen Editors unterscheidet sich von der bisherigen Darstellung:

haben. Das Layout des neuen Editors unterscheidet sich von der bisherigen Darstellung: ABAP Delta - 2

Durch Anwahl des Icons des Editors verändern:

Durch Anwahl des Icons des Editors verändern: im rechten unteren Teil des Editors kann man die

im rechten unteren Teil des Editors kann man die Konfiguration

rechten unteren Teil des Editors kann man die Konfiguration Interessant sind hier insbesondere die Möglichkeiten der

Interessant sind hier insbesondere die Möglichkeiten der Code-Vervollständigung und der Codevorlagen:

Interessant sind hier insbesondere die Möglichkeiten der Code-Vervollständigung und der Codevorlagen: ABAP Delta - 3 -

Ebenso kann die Formatierung und die Autokorrektur eingestellt werden:

die Formatierung und die Autokorrektur eingestellt werden: Das Layout für den Ausdruck des Sourcecodes kann

Das Layout für den Ausdruck des Sourcecodes kann beeinflusst werden:

für den Ausdruck des Sourcecodes kann beeinflusst werden: Zusätzliche Funktionen, die nicht im Kontextmenü angeboten

Zusätzliche Funktionen, die nicht im Kontextmenü angeboten werden, können Tastaturcodes zugewiesen werden:

Funktionen, die nicht im Kontextmenü angeboten werden, können Tastaturcodes zugewiesen werden: ABAP Delta - 4 -

Das folgende Bild zeigt einen Ausschnitt aus dem Kontextmenü des Editors:

zeigt einen Ausschnitt aus dem Kontextmenü des Editors: Die Editor-Konfiguration wird lokal auf der Workstation im

Die Editor-Konfiguration wird lokal auf der Workstation im Arbeitsverzeichnis (Unterverzeichnis „ab4_data“) des SAPGUI‘s gesichert:

auf der Workstation im Arbeitsverzeichnis (Unterverzeichnis „ab4_data“) des SAPGUI‘s gesichert: ABAP Delta - 5 -

1.2 Debugger

Neben dem bisherigen Debugger (Classic Debugger), steht ein neuer Debugger zur Verfügung. Er kann über „Einstellungen“ aktiviert werden:

Er kann über „Einstellungen“ aktiviert werden: Der Debugger wird in einem neuen Modus gestartet (wenn noch

Der Debugger wird in einem neuen Modus gestartet (wenn noch nicht die Maximalzahl der Modi erreicht ist).

Debugger wird in einem neuen Modus gestartet (wenn noch nicht die Maximalzahl der Modi erreicht ist).

Der aktuelle Inhalt von Variablen kann komfortabel angezeigt werden:

Inhalt von Variablen kann komfortabel angezeigt werden: Ebenso kann der Inhalt kompletter Strukturen und interner

Ebenso kann der Inhalt kompletter Strukturen und interner Tabellen sichtbar gemacht werden. Die Bearbeitung interner Tabellen ist mit Hilfe der „Tabellen Services“ möglich.

gemacht werden. Die Bearbeitung interner Tabellen ist mit Hilfe der „Tabellen Services“ möglich. ABAP Delta -

Interessant ist die Möglichkeit, während des Debuggings zu beliebigen Source-Code-Zeilen zu springen (auch Rückwärts). Achten Sie aber darauf, dass bei Rückwärtssprüngen der aktuelle Inhalt von Variablen nicht verändert wird.

der aktuelle Inhalt von Variablen nicht verändert wird. Ebenso kann eine Debug-Session gesichert und wieder geladen

Ebenso kann eine Debug-Session gesichert und wieder geladen werden. Das bedeutet allerdings nicht, dass man nach dem laden der Session das Debugging fortsetzen kann. Verschiedene Arten von Breakpoints werden unterstützt:

Debugger Breakpoint wirkt nur in der Debugger-Session

Session Breakpoint wirkt in allen Modi der gleichen Session

Externer (User) Breakpoint wirkt in allen Session des aktuellen Users

Modi der gleichen Session • Externer (User) Breakpoint wirkt in allen Session des aktuellen Users ABAP

Der Debugger verfügt über insgesamt vier „Desktops“ zur Anzeige von Informationen. Drei dieser Desktops sind frei konfigurierbar:

Drei dieser Desktops sind frei konfigurierbar: Mit Hilfe des „Diff-Tools“ kann man den Inhalt von 2

Mit Hilfe des „Diff-Tools“ kann man den Inhalt von 2 Variablen oder von 2 internen Tabellen miteinander vergleichen:

kann man den Inhalt von 2 Variablen oder von 2 internen Tabellen miteinander vergleichen: ABAP Delta

1.3 Checkpoints

Das Konzept der „Checkpoints“ erweitert erheblich die Möglichkeiten der bisher verwendeten Anweisung „BREAK-POINT“. BREAK-POINT ist gekennzeichnet durch:

BREAK-POINT hält Verarbeitung an und verzweigt in Debugger

Anweisung wird unabhängig von User, System etc. durchlaufen

Anweisung wird unabhängig von User, System etc. durchlaufen Breakpoints können nun aktiviert oder deaktiviert werden.

Breakpoints können nun aktiviert oder deaktiviert werden. Dazu muss der Breakpoint einer sogenannten Checkpoint-Gruppe zugewiesen werden. Checkpointgruppen können mit Hilfe der Transaktion SAAB oder durch Vorwärtsnavigation aus dem Editor heraus definiert werden:

Vorwärtsnavigation aus dem Editor heraus definiert werden: Achten Sie unbedingt darauf, dass Checkpoint-Gruppen

Achten Sie unbedingt darauf, dass Checkpoint-Gruppen eigenständige Entwicklungsobjekte sind mit Transportsystem-Anschluss. Ein Programm ist syntaktisch falsch, wenn die verwendete Checkpoint-Gruppe nicht existiert.

Mit Hilfe der Transaktion SAAB kann nun konfiguriert werden, ob und für welchen User ein Breakpoint wirksam sein soll. Wählen Sie dazu im Startbild der Transaktion SAAB zunächst die Checkpoint-Gruppe, zu der der Breakpoint gehört, und dann die Aktivieren-Funktion (nicht die Ändern-Funktion).

zu der der Breakpoint gehört, und dann die Aktivieren-Funktion (nicht die Ändern-Funktion). ABAP Delta - 10

Im Folgebild können Sie dann die Benutzer auswählen, für die die Breakpoints wirksam werden sollen:

auswählen, für die die Breakpoints wirksam werden sollen: Die ASSERT-Anweisung deckt im Prinzip die Möglichkeiten der

Die ASSERT-Anweisung deckt im Prinzip die Möglichkeiten der Anweisung BREAK-POINT ab, bietet aber zusätzlich die Möglichkeit, bei Bedarf Variablen-Inhalte zu protokollieren:

bei Bedarf Variablen-Inhalte zu protokollieren: Achten Sie darauf, dass die ASSERT-Anweisung nur zu einer

Achten Sie darauf, dass die ASSERT-Anweisung nur zu einer Reaktion des Systems führt, wenn die hinter CONDITION angegebene Bedingung nicht (!) wahr ist.

Hinter FIELDS angegebene Variable werden bei aktivierten ASSERT‘s in Protokoll geschrieben. Die Größe jedes der mit dem Zusatz FIELDS im Protokoll abgespeicherten Objekte wird durch den Profilparameter „abap/aab_log_field_size_limit“ begrenzt. Der Wert des Profilparameters gibt die Größe in Bytes an. Der voreingestellte Wert ist 1.024.

Das Systemverhalten für ASSERT wird mit Hilfe der Transaktion SAAB eingestellt:

Wert ist 1.024. Das Systemverhalten für ASSERT wird mit Hilfe der Transaktion SAAB eingestellt: ABAP Delta

Das Protokoll kann in der Transaktion SAAB abgerufen werden:

Das Protokoll kann in der Transaktion SAAB abgerufen werden: Hinweis: Bei einer mehrfachen Ausführung des Programms

Hinweis: Bei einer mehrfachen Ausführung des Programms überschreibt im Normalfall das letzte Protokoll immer das vorangehende Protokoll. Mit Hilfe des Zusatzes SUBKEY können Sie Schlüssel für die Protokollzeilen bilden.

können Sie Schlüssel für die Protokollzeilen bilden. Der Zusatz SUBKEY wirkt nur, wenn die Anweisung ASSERT

Der Zusatz SUBKEY wirkt nur, wenn die Anweisung ASSERT Einträge in ein Protokoll schreibt. Bei der Angabe von SUBKEY wird der Inhalt von sub als Unterschlüssel im Protokoll abgelegt. Bereits vorhandene Protokolleinträge der gleichen ASSERT-Anweisung werden nur bei gleichem Inhalt des Unterschlüssels überschrieben. Für sub muss ein zeichenartiges Datenobjekt angegeben werden, von dem die ersten 200 Zeichen ausgewertet werden. Ohne die Angabe von SUBKEY ist der Unterschlüssel initial.

Soll an bestimmten Stellen im Progamm bei der Ausführung lediglich ein Protokoll geschrieben werden, kann die Anweisung LOG-POINT verwendet werden:

werden, kann die Anweisung LOG-POINT verwendet werden: Bei aktivierter Checkpoint-Gruppe wird ein Protokolleintrag

Bei aktivierter Checkpoint-Gruppe wird ein Protokolleintrag analog zur Protokollierung bei ASSERT geschrieben. Eine FIELDS-Angabe wie bei ASSERT ist möglich.

Im Prinzip deckt zwar die ASSERT-Anweisung die Möglichkeiten von LOG-POINT und BREAK-POINT ab, das Systemverhalten kann aber mit Hilfe der Transaktion SAAB für diese Anweisung unabhängig voneinander eingestellt werden.

Im Startbild der Transaktion SAAB besteht die Möglichkeit, eine Übersicht aller aktiven Elemente von Checkpoint-Gruppen anzuzeigen:

besteht die Möglichkeit, eine Übersicht aller aktiven Elemente von Checkpoint-Gruppen anzuzeigen: ABAP Delta - 13 -

1.4 Code-Inspector

Der „Code-Inspector“ soll Entwickler und Qualitätsbeauftragen die Analyse vom Programmen hinsichtlich Performance, Sicherheit, Einhaltung von Namenskonventionen etc. ermöglichen. Der Aufruf des Code-Inspectors ist aus dem Editor heraus oder mit Hilfe des Transaktionscodes SCI möglich.

heraus oder mit Hilfe des Transaktionscodes SCI möglich. Um eine Inspektion durchführen zu können, muss zunächst

Um eine Inspektion durchführen zu können, muss zunächst festgelegt werden, welche Prüfkriterien angelegt werden sollen. Diese Prüfkriterien werden zu einer „Prüfvariante“ zusammengefasst. Die Programm, Pakete, …, die geprüft werden sollen, werden mit Hilfe eine „Objektmenge“ festgelegt. Einer konkreten Inspektion werden dann eine Objektmenge und eine Prüfvariante zugeordnet:

dann eine Objektmenge und eine Prüfvariante zugeordnet: Alle genannten Grundelemente des Code-Inspector können

Alle genannten Grundelemente des Code-Inspector können Benutzerspezifisch oder auch benutzerübergreifend definiert werden.

Mit Hilfe der Prüfvariante wird festgelegt, welche Kriterien bei der Prüfung angewendet werden sollen:

welche Kriterien bei der Prüfung angewendet werden sollen: In der Objektmenge legen Sie fest, welche Objekte

In der Objektmenge legen Sie fest, welche Objekte einer Prüfung unterzogen werden sollen. Es können z.B. alle Repository-Objekte in einer Inspektion untersucht werden, die einem Paket zugeordnet sind.

untersucht werden, die einem Paket zugeordnet sind. Hinweis: SAP-Original-Objekte sind von einer Inspektion

Hinweis: SAP-Original-Objekte sind von einer Inspektion immer ausgenommen!!

Eine Inspektion wird immer für eine bestimmte Objektmenge und eine gewählte Prüfvariante durchgeführt:

Objektmenge und eine gewählte Prüfvariante durchgeführt: Achten Sie darauf, dass Inspektionen versioniert werden

Achten Sie darauf, dass Inspektionen versioniert werden können. Eine Version eine Inspektion kann nur ein einziges Mal ausgeführt werden. Der Version ist jeweils das Inspektionsprotokoll zugeordnet. Vor einer erneuten Inspektion muss also gegebenenfalls zunächst eine neue Version erzeugt werden.

Vor einer erneuten Inspektion muss also gegebenenfalls zunächst eine neue Version erzeugt werden. ABAP Delta -

Eine besondere Bedeutung kommt der Variante mit dem Namen DEFAULT zu. Die DEFAULT-Variante wird verwendet, wenn man den Code-Inspector direkt aus dem ABAP- Editor heraus startet. Die global gültige DEFAULT-Variante kann mit Hilfe eine benutzerspezifische Variante gleichen Namens übersteuert werden. Die DEFAULT- Varianten werden mit Hilfe der Transaktion SAAB gepflegt.

Namens übersteuert werden. Die DEFAULT- Varianten werden mit Hilfe der Transaktion SAAB gepflegt. ABAP Delta -

1.5 Single Transaction Analysis

1.5.1 Übersicht

Die Transaktion ST12 wurde entwickelt, um die Verwendung des ABAP-Trace zu fördern, die ABAP- und Performance-Traces (SQL Enqueue RFC, Transaktion ST05) zu integrieren und das Tracing und den Analyseprozess schneller und komfortabler zu gestalten. Der ABAP- Trace mit ST12 ist der zentrale Einstiegspunkt für die Performance-Analyse. Er sollte zum zielgesteuerten Auffinden von Hotspots, zur Analyse der zeitlichen Verteilung und zur Optimierung von ABAP/CPU-gebundenen Problemen verwendet werden. SQL-Trace sollte für DB-gebundene Probleme verwendet werden.

Die Transaktion ST12 ähnelt einer Kombination der Standard ABAP- und SQL-Trace- Transaktionen SE30 und ST05.

ST12 kombiniert ABAP- und Performance-Traces (SQL) in einer Transaktion, deren Funktionserweiterungen hauptsächlich im Bereich des ABAP-Trace liegen. ST12 erlaubt, bei einem gemeinschaftlichen ein-/ausschalten mit dem Performance-Trace, den ABAP-Trace für einen anderen Benutzer zu aktivieren. Damit kann ein SAP Servicetechniker eine von einem Nutzer im Unternehmen ausgeführte Dialogtransaktion verfolgen, ohne dafür Beispieldaten zu benötigen. ABAP- und Performance-Traces können auf einem anderen, oder sogar auf allen Servern, aktiviert werden, um zum Beispiel eingehende RFCs abzufangen.

Mit ST12 können Sie werthaltige Trace-Ergebnisse einfach vorhalten, und Sie zum Beispiel an das SAP-Backoffice weiterleiten. Die Ergebnisse des ABAP-Trace werden vollständig in der Datenbank erfasst. Für einen Performance-Trace behält die Transaktion ST12 den Zeitrahmen und den Server, und navigiert mit einem Klick direkt in die ST05 Trace-Anzeige auf dem richtigen Server. Ausgewählte Ergebnisse des Performance-Trace oder andere Untersuchungsergebnisse können als Anmerkungstexte in einer Trace-Analyse gespeichert werden.

.
.

Die ST12 ABAP Trace Summary weist schnell den Beitrag bekannter zeitaufwendiger Funktionalitäten auf. Sie ist auch in der Lage, den voraussichtlichen Zeitaufwand bestimmter Programme, insbesondere User-Exits und kundeneigener Codings, zu schätzen. Mit ST12 können die Programmhierarchien im aggregierten ABAP-Trace 'pro Aufruf' analysiert werden. Daher ist der nicht-aggregierte ABAP-Trace mit seinen großen Trace- Dateien nicht mehr erforderlich und wurde in der ST12 weggelassen.

1.5.2 Verfügbarkeit

Die Transaktion ST12 ist ab Basis-Release 4.6B verfügbar (nur in englischer Sprache). Sie wird über das Add-On ST-A/PI (Application-Servicetools für EarlyWatch/GoingLive, siehe Hinweis 69455) ausgeliefert. Die ST-A/PI Version muss 01F* oder höher sein.

Die Funktion, den ABAP-Trace für einen anderen Benutzer einzuschalten, benötigt

im Basis-Release 4.6*: Add-On ST-A/PI >= 01F*, Kernel 4.6D Patch Level >= 1805

im Basis-Release 6.x: Add-On ST-A/PI >= 01G*, Kernel 640, Patch Level >= 83

im Basis-Release 7.0 oder höher: Add-On ST-A/PI 01G

1.5.3

ST12 im Vergleich zu SE30 (Delta-Course)

1.5.3.1 Vereinfachungen bei den ABAP-Traceoptionen

Der nicht-aggregierte ABAP-Trace wird nicht in der ST12 angeboten. Ein Grund hierfür liegt darin, dass er für die meisten Geschäftsvorgänge zu groß wird, ein anderer, dass er aufgrund der neuen Funktionen zur Hierarchieanalyse in ST12 absolut überflüssig ist. Die Startoptionen sind sehr viel einfacher als in der SE30. Als voreingestellter Wert dient die Aggregation 'pro Aufrufposition' und ein Trace-Umfang wie in der DEFAULT-Variante in der SE30, d.h. Rückverfolgungs-Modularisierungseinheiten und Datenbankoperationen. Beachten Sie zum Thema Kennzeichen 'mit internen Tabellen' und 'spezifische Einheiten' das obige Kapitel. Die Beschränkung auf eine Modularisierungseinheit ist möglich. Einige selten benutzte Optionen sind als Dialogfenster verfügbar.

1.5.3.2 Möglichkeiten, den Trace zu starten

Es werden drei Szenarien angeboten:

Das 'Benutzerszenario ermöglicht es, den ABAP-Trace für die nächste Aktion unter einem bestimmten Benutzernamen und einem bestimmten Aufgabentyp (DIA BTC RFC UPD) auf jedem Applikationsserer oder systemweit zu aktivieren. In geringfügiger Abweichung zum SQL-Trace verfolgt dieses nicht alles unter dem Benutzernamen, der Trace wird jedoch für nur einen Benutzerkontext eingeschaltet, der den nächsten Roll-In durchführt und der den geeigneten Benutzer und Aufgabentyp hat. Der Trace dauert dann solange an, bis dieser Benutzerkontext/diese Transaktion abgeschlossen ist.

• Wählen Sie '< Alle Server >' im Serverfeld, um eine solche nächste Aktion systemweit

Wählen Sie '< Alle Server >' im Serverfeld, um eine solche nächste Aktion systemweit zu verfolgen. Die Traceanforderung wird daraufhin auf alle Server verteilt. Bei jedem Refresh prüft ST12, ob auf irgendeinem Server ein Trace angelaufen ist. Ist dies der Fall, dann wird '< Alle Server >' durch den expliziten Servernamen ersetzt und die Traceanforderungen auf den anderen Servern bereinigt. Dies ermöglicht beispielsweise, einen eingehenden RFC oder einen Batch-Job abzufangen, der auf einem beliebigen Server startet.

abzufangen, der auf einem beliebigen Server startet. Die Voraussetzung für das gesamte

Die Voraussetzung für das gesamte 'Benutzer'-Szenario ist ein Kernel-Patch. Beachten Sie dazu den obigen Absatz 'Verfügbarkeit'.

Das Szenario Tasks & HTTP ist ab SAP Basis-Release 6.10 verfügbar. Es erlaubt die Spezifizierung einer maximalen Anzahl von ABAP-Trace-Aktivierungen = ABAP-Trace- Dateien, und ist daher gut geeignet, viele eingehende RFCs oder BSPs zu verfolgen, da hierbei jedes Bildschirmelement einen eigenen Aufruf zum R/3-System durchführt.

einen eigenen Aufruf zum R/3-System durchführt. • Der 'Workprozess', ebenso wie der

Der 'Workprozess', ebenso wie der 'Parallelmodus' der SE30 werden dazu verwendet, Teile von Prozessen mit langen Laufzeiten zu verfolgen, insbesondere Batch-Jobs aus einer Liste ähnlich der Prozessübersicht in der Transaktion SM50.

ähnlich der Prozessübersicht in der Transaktion SM50. Im Folgebild ist der Workprozess zu wählen, für den

Im Folgebild ist der Workprozess zu wählen, für den der Trace erfolgen soll.

Workprozess zu wählen, für den der Trace erfolgen soll. • Im Szenario 'aktueller Modus' muss die

Im Szenario 'aktueller Modus' muss die zu analysierende Transaktion aus der ST12 gestartet werden, so dass Beispieldaten wie in der SE30 erforderlich sind.

Transaktion aus der ST12 gestartet werden, so dass Beispieldaten wie in der SE30 erforderlich sind. ABAP

1.5.3.3 Trace-Sammlung und Verwaltung von gesicherten Traces

ST12 'holt' den ABAP-Trace aus dem lokalen Dateiensystem und speichert ihn in der Datenbank als 'Traceanalyse' ab. Damit ist der Trace zentral und dauerhaft verfügbar, was bei der Weitergabe des Trace auf andere Stufen zur weiteren Analyse von erheblichem Vorteil ist. Im Szenario 'Benutzer' oder 'Workprozess' wird die asynchrone Trace-Sammlung durch das Drücken des Knopfes 'Trace beenden & sammeln' ausgelöst. Geeignete Suchfunktionen sind inbegriffen.

ausgelöst. Geeignete Suchfunktionen sind inbegriffen. 1.5.3.4. Auswertung Auswerten ABAP-Trace zeigt

1.5.3.4. Auswertung

Auswerten ABAP-Trace zeigt aggregierte Trefferliste.

Auswerten ABAP-Trace zeigt aggregierte Trefferliste. Neue Funktionen im Vergleich zu SE30: a) Umschalten zwischen

Neue Funktionen im Vergleich zu SE30:

a) Umschalten zwischen Aggregationsstufen

Die Eingangsanzeige zeigt den Trace 'pro Aufrufposition'.

zwischen Aggregationsstufen Die Eingangsanzeige zeigt den Trace 'pro Aufrufposition'. ABAP Delta - 22 -

Mit Hilfe der ersten zwei Knöpfe des Menüs kann man zu anderen Aggregationen umschalten. Die zweite Stufe lautet 'Voll'.

umschalten. Die zweite Stufe lautet 'Voll'. Die neue Aggregation 'pro Modularisierungseinheit'
umschalten. Die zweite Stufe lautet 'Voll'. Die neue Aggregation 'pro Modularisierungseinheit'
umschalten. Die zweite Stufe lautet 'Voll'. Die neue Aggregation 'pro Modularisierungseinheit'

Die neue Aggregation 'pro Modularisierungseinheit' ist gewissermaßen eine Mischung aus beiden. Auf einer höheren Stufe zeigt es nur eine Zeile für jede Modularisierungseinheit. Wenn Sie eine solche Zeile expandieren, werden die Anweisungen und Aufrufe innerhalb dieser Modularisierungseinheit in der Aggregation 'pro Aufrufposition' gezeigt. Anweisungen und Aufrufe außerhalb von Modularisierungseinheiten werden unterhalb der Dummyzeilen '<Programm> [außerhalb v. Mod.einheiten]' gruppiert. Die Nettozeiten von einfachen Anweisungen werden zu den Nettozeiten der Modu- larisierungseinheit auf der höheren Stufe hinzuaddiert. Diese Aggregation ist geeignet, um lokalisierte Probleme in einzelnen Modularisierungseinheiten ausfindig zu machen.

ist geeignet, um lokalisierte Probleme in einzelnen Modularisierungseinheiten ausfindig zu machen. ABAP Delta - 23 -

b) Top-down Aufrufbaum und Buttom-up Aufrufhierarchie

Verwenden Sie die Aggregation 'pro Aufrufposition' zur Analyse von Beziehungen zwischen Aufrufhierarchien:

-> Die 'Buttom-up Aufrufhierarchie' arbeitet wie eine mehrstufige Verwendungssuche. Die Hierarchie oberhalb eines Eintrags wird in Form eines Schwimmbahnen-Diagramms angezeigt. Das leere Karosymbol zeigt, wo ein Aufruf emittiert wird, das ausgefüllte nach unten/oben weisende Dreieck bezeichnet, wo der Aufruf ankommt. Bei den kleinen Pfeilen handelt es sich um reine Kosmetik, die die Richtung des Aufrufs anzeigt. Die genaue Aussage ist: "Aus Modularisierungseinheit leeres Karo> ist ein Aufruf an Modularisierungseinheit <ausgefülltes nach unten/oben weisendes Dreieck emittiert.".

nach unten/oben weisendes Dreieck emittiert.". -> Die 'Top-down time split hierarchy' zeigt

-> Die 'Top-down time split hierarchy' zeigt die 30 wichtigsten Aufrufe unterhalb eines Eintrags in einem Schwimmbahnen-Diagramm. Wichtig ist hierbei die aggregierte Bewegungszeit, die sie vom ursprünglichen Aufruf erhalten haben. Die untergeordneten Modularisierungseinheiten sind zu eindeutigen Sparten gruppiert. Es wird angezeigt, wie sie mit dem ursprünglichen Eintrag verbunden sind und an welcher Stelle die Bewegungszeit aufgesplittet wird (mehrere leere Karos in einer Zeile). Dies ist für die Zeitverteilung und die Analyse des Zeitverlusts sehr hilfreich.

in einer Zeile). Dies ist für die Zeitverteilung und die Analyse des Zeitverlusts sehr hilfreich. ABAP

-> Setzen Sie für den 'Top-down Aufrufbaum' den Cursor auf den Aufruf einer Modularisierungseinheit (Perform- oder Call Method/ /Function/Screen) und drücken Sie den Baumknopf. Die darunter liegende Hierarchie wird nun in einer neuen Spalte angezeigt. Alle Aufrufe dieser Modularisierungseinheit werden mit '0' bezeichnet, einschließlich derer, worauf Sie Ihren Cursor setzen. '1' bezeichnet die Anweisungen innerhalb dieser Modularisierungseinheit, '2' die Anweisungen in den Modularisierungseinheiten eine Stufe tiefer und dann iterativ down up auf 30 Stufen. Buchstaben werden dazu verwendet, niedrigere Stufen zu bezeichnen.

werden dazu verwendet, niedrigere Stufen zu bezeichnen. In beiden Fällen sind die Trace-Zeilen in der Hierarchie

In beiden Fällen sind die Trace-Zeilen in der Hierarchie farblich markiert. Der Knopf 'Nur Aufrufbaum/Aufruf Hierarchiefilter' stellt einen ALV-Listenfilter ein, so dass nur Traceeingänge in der Hierarchie angezeigt werden. Die Ausschaltknöpfe bewirken, dass die Hierarchiespalten verschwinden.

Anmerkungen:

Die Hierarchie berücksichtigt nur Aufrufe von Routinen, Methoden, Funktionen und Call- Screens von PBO PAI-Bausteinen.

Die zweite Einschränkung zeigt, dass unter technischen Gesichtspunkten nur die Hierarchiebeziehungen eine Stufe nach oben/unten bekannt sind. Ein Beispiel zur Verdeutlichung: Nehmen wir an, dass ein ABAP-Programm eine Formroutine A1 und A2 hat und beide eine Routine B mit einem anderen Eingabeparameter aufrufen. Wenn von A1 aufgerufen, ruft B eine Routine C1 auf. Wenn von A2 aufgerufen, ruft B eine Routine C2 auf. Wenn Sie nun den Cursor auf 'A1 durchführen' setzen, enthält der Top-down Aufrufbaum nicht nur B und C1 enthalten, sondern auch C2, die von B aufgerufen wurde, aber in Wirklichkeit nicht, wenn B von A1 aufgerufen wurde. Ähnlich verhält es sich, wenn Sie den Cursor auf 'C1 durchführen' setzen, d.h. eine Button-up Aufrufhierarchie enthält dann die Routinen B und A1 ebenso wie A2.

Ebenso kann es passieren, dass obwohl die Routine B von der Routine A1 aufgerufen wurde, B immer noch höher in der nach Bruttozeiten sortierten Liste erscheint, weil B ebenfalls von A2 aufgerufen wurde.

c) letzter Änderer & am

'Einblenden/ausblenden->Letzter Änderer' ruft die Benutzernamen Letzter Änderer' auf und ändert die Daten aus dem ABAP-Repository. Für einfache Anweisungen zeigt es die

Änderungsinfo des umfassenden Quelltext-Includes. Für Modularisierungseinheiten bezieht sich die Info auf das Ziel-Include, das die aufgerufene Modularisierungseinheit enthält. Das macht es einfach, einen beliebigen User-Exit oder eine Kundenmodifikation ausfindig zu

machen.

.
.

d) Kurztexte zur Funktionsanalyse

Die Funktion 'Kurztexte einblenden/ausblenden' aus dem Menü ruft Titel von Funktionen, Methoden, Funktionsgruppen, Reports, Klassen, Dynpros oder Tabellen aus dem ABAP-

Repository auf und zeigt diese an. Zusammen mit den technischen Namen der Routinen, Funktionen usw. liefern diese die Grundlage für eine funktionale Zeitverteilungsanalyse. Falls die englischen Titel nicht verfügbar sind, werden diese in Deutsch oder in anderen Sprachen

angezeigt.

englischen Titel nicht verfügbar sind, werden diese in Deutsch oder in anderen Sprachen angezeigt. ABAP Delta

1.5.3.5 'Kontext-Trace' über RFCs und Remote Traceerfassung

Der ABAP-Trace kann via RFC vererbt werden, so dass die Fernaktivitäten ebenso verfolgt werden. Voraussetzung hierfür ist, dass sowohl das Ursprungs- als auch das Remote- System ein Basis-Release ab 6.10. haben müssen. Der Parameter rstr/accept_remote_trace muss im Remote-System auf 'true' gesetzt werden. Ab Basis-Releases 6.10 und 6.20 muss dieser Parameter in der Profilpflegetransaktion RZ10 geändert und der Applikationsserver gestartet werden, damit die Änderungen aktiv werden. Ab Basis-Release 6.40 kann er unter Verwendung der Transaktion RZ11 dynamisch auf 'true' umgeschaltet werden. Beachten Sie, dass der Parameter nicht dauerhaft auf 'true' gesetzt werden, da dies zu einer nicht erwünschten Vererbung des Trace führen kann, z.B. durch bestimmte externe Schnittstellen. Insbesondere sollten Sie die ständige Änderung in der RZ10 auf 'false' zurückändern, nachdem der Trace abgeschlossen ist.

Starten Sie den Trace aus der ST12 mit dem aktivierten Kennzeichen 'Kontext-Trace'. Wenn die ursprüngliche Transaktion RFCs durchführt, schreiben diese RFCs eigene ABAP- Tracedateien in deren Server-Dateiensystem.

eigene ABAP- Tracedateien in deren Server-Dateiensystem. Starten Sie nun die Laufzeitanalyse in gewohnter Form. ABAP

Starten Sie nun die Laufzeitanalyse in gewohnter Form.

Nach Abschluss der Laufzeitmessung rücken Sie zur Sammlung dieser Trace-Dateien 'Externe Traces sammeln' in der ersten Zeile der ST12.

Traces sammeln' in der ersten Zeile der ST12. Geben Sie eine RFC-Destination in das Remote-System ein.

Geben Sie eine RFC-Destination in das Remote-System ein. Geben Sie eine Zeitspanne an oder löschen Sie die vorgegebene, um alle Dateien zu finden. Drücken Sie anschließend 'Start', um die Suche nach geeigneten Trace-Dateien auf allen Servern des Remote-Systems zu initiieren.

auf allen Servern des Remote-Systems zu initiieren. Wählen Sie die geeignete Datei aus und drücken Sie

Wählen Sie die geeignete Datei aus und drücken Sie 'sammeln'. Die Trace-Datei wird daraufhin ferngeholt und als neue Trace-Analyse gespeichert.

'sammeln'. Die Trace-Datei wird daraufhin ferngeholt und als neue Trace-Analyse gespeichert. ABAP Delta - 28 -

Sie können nun beide Traces (den auf der lokalen Maschine und den Remote ausgeführten) auswerten.

Sie können nun beide Traces (den auf der lokalen Maschine und den Remote ausgeführten) auswerten. ABAP
Sie können nun beide Traces (den auf der lokalen Maschine und den Remote ausgeführten) auswerten. ABAP

2. Paketkonzept

Das Paketkonzept löst das bisherige Konzept der „Entwicklungsklassen“ ab. Ein Paket übernimmt die Funktionen einer Entwicklungsklasse wie z.B. die Zuordnung zu einer Transportschicht, bietet jedoch einige zusätzliche Möglichkeiten:

bietet jedoch einige zusätzliche Möglichkeiten: So können z.B. Pakete auch andere Pakete enthalten und die

So können z.B. Pakete auch andere Pakete enthalten und die Sichtbarkeit von Objekten eines Paketes die Verwendung außerhalb des Paketes festgelegt werden.

Pakete können mit Hilfe der Transaktionen SE80, SE21 und SPACKAGE angelegt werden:

der Transaktionen SE80, SE21 und SPACKAGE angelegt werden: Es werden „Pakettypen“ unterschieden: „Hauptpakete“

Es werden „Pakettypen“ unterschieden:

„Hauptpakete“ dienen primär als Container für zusammengehörige Entwicklungsobjekte, die dasselbe Originalsystem, dieselbe Transportschicht und dieselbe Attributierung bezüglich der Kundenauslieferung haben. Entwicklungsobjekte können jedoch nicht direkt im Hauptpaket liegen, sondern in den jeweiligen Teilpaketen. Mehrere Hauptpakete können zur größeren Einheit, einem „Strukturpaket“ zusammengefasst werden.

Das Konzept der „Paketschnittstellen“ soll helfen, die Verwendung von Objekten eines Pakets durch Objekte anderer Pakete zu steuern. Im folgenden Bild wird eine Beispiel- anforderung beschrieben:

folgenden Bild wird eine Beispiel- anforderung beschrieben: Um die Paketprüfung zu ermöglichen, sind einige

Um die Paketprüfung zu ermöglichen, sind einige Einstellungen im System vorzunehmen. Zum einen muss zunächst die Paketprüfung global in der Tabelle PAKPARAM aktiviert werden. Zusätzlich muss pro Paket (!) entschieden werden, welcher Prüfung durchgeführt werden soll:

werden. Zusätzlich muss pro Paket (!) entschieden werden, welcher Prüfung durchgeführt werden soll: ABAP Delta -

Hinweis: Die Optionen für die Paketprüfung werden nur angeboten, wenn die Paketprüfung generell in der Tabelle PAKPARAM freigeschaltet wurde. Es sind folgende Einstellungen möglich:

Kennzeichen für Paketprüfung als Server

Wenn das Kennzeichen für Paketprüfung als Server gesetzt ist, müssen alle (außerhalb des betroffenen Pakets befindlichen) Verwender nach dem Paketkonzept leben. D.h. die Verwender-Pakete brauchen Verwendungserklärungen auf die Paketschnittstellen, die die verwendeten Entwicklungselemente enthalten. Anderenfalls ergeben sich Fehler bei der Erweiterten Programmprüfung (SLIN) bzw. beim Aktivieren von DDIC-Objekten.

Kennzeichen für Paketprüfung als Client

Wenn das Kennzeichen für Paketprüfung als Client gesetzt ist, muss innerhalb des Pakets das Paketkonzept befolgt werden. D.h für das betroffene Paket braucht man Verwendungserklärungen auf eine Menge von Paketschnittstellen, die die (von den im betroffenen Paket) verwendeten Entwicklungselemente enthalten. (Eine Ausnahme ergibt sich nur, wenn bzw. solange ein verwendetes Entwicklungselement in keiner Paketschnittstelle vorkommt.) Anderenfalls ergeben sich Fehler bei der Erweiterten Programmprüfung (SLIN) bzw. beim Aktivieren von DDIC-Objekten.

Zu jedem Paket können eine oder mehrere Paketschnittstellen definiert werden. Jeder Paketschnittstelle wiederum können Objekte zugeordnet werden. Die außerhalb des Paketes sichtbar sein sollen:

wiederum können Objekte zugeordnet werden. Die außerhalb des Paketes sichtbar sein sollen: ABAP Delta - 32

Sollen Objekte eines Pakets Objekte anderer Pakete verwenden, muss das Paket diejenigen Paketschnittstellen in der Verwendungserklärung aufführen, die die „fremden“ Objekte sichtbar machen.

aufführen, die die „fremden“ Objekte sichtbar machen. Beachten Sie, dass trotz eingeschalteter Paketprüfungen

Beachten Sie, dass trotz eingeschalteter Paketprüfungen keine Fehler gemeldet werden, wenn z.B. ein Programm eines Paketes Funktionsbausteines eines beliebigen anderen Paketes aufruft. Dies gilt für die normale Syntaxprüfung und erst recht zur Laufzeit.

Eine Paketprüfung wird zunächst einmal nur bei der „Erweiterten Syntaxprüfung“ durchgeführt. Beachten Sie hierbei, dass die Paketprüfung aktiviert sein muss. Ob bei Prüfungsfehlern Fehlermeldungen, Warnungen oder nur Informationen angezeigt werden, legen Sie unter „Fehlerschwere“ im Verwendungsnachweis fest. Beachten Sie aber, dass der Fehlertext unabhängig von der eingestellten Fehlerschwere immer gleichlautend

„Objekt …. Besitzt keine ausreichende Berechtigung zur Verwendung des Objekts …“

lautet.

Bei Data-Dictionary-Elementen erfolgt die Paketprüfung automatisch bei der Aktivierung: ABAP Delta - 34 -

Bei Data-Dictionary-Elementen erfolgt die Paketprüfung automatisch bei der Aktivierung:

Bei Data-Dictionary-Elementen erfolgt die Paketprüfung automatisch bei der Aktivierung: ABAP Delta - 34 -

3. Enhancements im ABAP-Dictionary

3.1. Zusätzliche Datenbankindizes (Extension-Index)

Wenn für eine von SAP ausgelieferte Tabelle ein zusätzlicher Datenbankindex angelegt werden soll, ist eine Reparatur (Modifikation) des SAP-Objekts erforderlich, selbst wenn der zusätzliche Index im Kundennamensraum liegt:

wenn der zusätzliche Index im Kundennamensraum liegt: Eine modifikationsfreie Anlage zusätzlicher Indizes ist ab

Eine modifikationsfreie Anlage zusätzlicher Indizes ist ab NetWeaver 7.0 mit Hilfe eines „Extension-Index“ möglich:

7.0 mit Hilfe eines „Extension-Index“ möglich: Der Name des Index muss natürlich im Kundennamensraum

Der Name des Index muss natürlich im Kundennamensraum liegen:

eines „Extension-Index“ möglich: Der Name des Index muss natürlich im Kundennamensraum liegen: ABAP Delta - 35

Der Index kann dann in gewohnter Weise definiert werden:

Der Index kann dann in gewohnter Weise definiert werden: Eine Zuordnung zu einem Paket und einem

Eine Zuordnung zu einem Paket und einem Transportauftrag ist wie üblich möglich.

Extension-Indizes sind in der Index-Übersicht markiert:

Transportauftrag ist wie üblich möglich. Extension-Indizes sind in der Index-Übersicht markiert: ABAP Delta - 36 -

3.2. Zusätzliche Festwerte für Domänen (Festwert-Append)

Festwerte zu SAP-Domänen können nun modifikationsfrei erweitert werden:

SAP-Domänen können nun modifikationsfrei erweitert werden: Mit Hilfe der Funktion eingeblendet werden: können die

Mit Hilfe der Funktion eingeblendet werden:

werden: Mit Hilfe der Funktion eingeblendet werden: können die bereits vorhandenen Domänenwerte ABAP Delta -

können die bereits vorhandenen Domänenwerte

werden: Mit Hilfe der Funktion eingeblendet werden: können die bereits vorhandenen Domänenwerte ABAP Delta - 37

Es besteht der übliche Anschluss an das Transportsystem. Die neu hinzugefügten Werte werden automatisch bei der Werthilfe (F4) angezeigt:

Werte werden automatisch bei der Werthilfe (F4) angezeigt: Zu einer Domäne können mehrere Festwert-Appends definiert

Zu einer Domäne können mehrere Festwert-Appends definiert werden:

Domäne können mehrere Festwert-Appends definiert werden: Beachten Sie die Empfehlungen der SAP-Dokumentation: ABAP

Beachten Sie die Empfehlungen der SAP-Dokumentation:

mehrere Festwert-Appends definiert werden: Beachten Sie die Empfehlungen der SAP-Dokumentation: ABAP Delta - 38 -

4. Coding-Anpassungen durch das Enhancement-Framework

4.1. Überblick

Die bisher von SAP angebotenen Erweiterungstechniken werden nach wie vor unterstützt, SAP-seitig aber nicht mehr weiter entwickelt (Ausnahme BAdI). Kennzeichnend war, dass jweiles eigenstängie Implementierungswerkzeuge genutzt wurden wie z.B. die Transaktionen SMOD und CMOD für Customer-Exits, die Transaktion FIBF für Business-Transaction- Events und die Transaktionen SE18 und SE19 für Business-AddIns.

und die Transaktionen SE18 und SE19 für Business-AddIns. Das Enhancement Framework fügt neue Techniken hinzu:

Das Enhancement Framework fügt neue Techniken hinzu:

Das Enhancement Framework fügt neue Techniken hinzu: Enhancement-Point gestatten prinzipiell das

Enhancement-Point gestatten prinzipiell das modifikationsfreie Einfügen von Source-Code, Enhancement-Sections das modifikationsfreie Ersetzen von Source-Code. Mit Hilfe von „Kernel BAdIs“ ist ein performanterer Aufruf von Business-AddIn’s möglich. Enhancement Spots dienen zur Bündelung logisch zusammengehöriger Point’s, Section’s und Kernel BAdI’s zu einer Verwaltungseinheit.

4.2. Enhancement Spots

Enhancement Spots übernehmen in etwa die Funktionalität von Erweiterungen (Transaktion SMOD) bzw. Erweiterungsprojekten (Transaktion CMOD) oder von „Produkte“ der Business Transaction Events (Transaktion FIBF).

der Business Transaction Events (Transaktion FIBF). Enhancement Spots können mit Hilfe der Transaktion SE80

Enhancement Spots können mit Hilfe der Transaktion SE80 (Erweiterungs-Infosystem) ermittelt und Implementierungen zu den Spots angelegt werden.

SE80 (Erweiterungs-Infosystem) ermittelt und Implementierungen zu den Spots angelegt werden. ABAP Delta - 40 -

4.3. Enhancement Points

Mit Hilfe von „Enhancement Points“ soll ein modifikationsfreies Einfügen von Quelltexten, Variablen und Parameterdeklarationen in SAP-Programmen, SAP-Funktionsbausteinen und SAP-Methoden ermöglicht werden.

Unterschieden werden:

Expliziter Enhancement Point

Von SAP vorbereitete Einfügemöglichkeit

Impliziter Enhancement Point

An bestimmten Stellen standardmäßig, vorhandene Erweiterungsmöglichkeit.

4.3.1 Impliziter Enhancement Point

also ohne Vorgabe durch SAP-Entwickler,

Ein impliziter Enhancement Point ist eine nicht von SAP vorgedachte Erweiterungsstelle, die aber dennoch nicht frei gewählt werden kann. Zulässige Stellen für implizite „Source-Code- PlugIns“ können im Editor eingeblendet werden.

Zulässige Stellen für implizite „Source-Code- PlugIns“ können im Editor eingeblendet werden. ABAP Delta - 41 -

Im folgenden Beispielprogramm soll die Sortierung der internen Tabelle geändert werden. In einem zweiten Schritt sollen zusätzliche Tabellenfelder ausgegeben werden.

REPORT zenh01.

TYPES :

BEGIN OF ty_spfli,

carrid

TYPE spfli-carrid,

connid

TYPE spfli-connid,

cityfrom TYPE spfli-cityfrom,

cityto

TYPE spfli-cityto,

END OF ty_spfli.

DATA :

gt_spfli TYPE TABLE OF ty_spfli.

PERFORM spfli_lesen. PERFORM spfli_ausgeben.

*&-----------------------------------------------------------*

*&

*&-----------------------------------------------------------*

Form spfli_lesen

FORM spfli_lesen.

SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE gt_spfli.

ENDFORM.

"spfli_lesen

*&-----------------------------------------------------------*

*&

*&-----------------------------------------------------------*

Form spfli_ausgeben

FORM spfli_ausgeben. DATA :

ls_spfli TYPE ty_spfli.

LOOP AT gt_spfli INTO ls_spfli. WRITE : / ls_spfli-carrid, ls_spfli-connid, ls_spfli-cityfrom, ls_spfli-cityto.

ENDLOOP.

ENDFORM.

"spfli_ausgeben

Das Programm wird zunächst im ABAP-Editor im Anzeigemodus geöffnet und dann der Erweiterungsmodus aktiviert:

wird zunächst im ABAP-Editor im Anzeigemodus geöffnet und dann der Erweiterungsmodus aktiviert: ABAP Delta - 42

Anschließend werden die impliziten Erweiterungsstellen eingeblendet.

werden die impliziten Erweiterungsstellen eingeblendet. Hinweis: Bitte die Reihenfolge „Erweiterungsmodus

Hinweis: Bitte die Reihenfolge „Erweiterungsmodus aktivieren“, dann „Erweiterungsstellen einblenden“ berücksichtigen!

Eine geeignete Erweiterungsstelle für die Umsortierung ist z.B. am Ende der Form-Routine „spfli_lesen“ zu finden. Um hier eine Erweiterung anzulegen, muss der Cursor auf die entsprechende Zeile gestellt werden und über das Kontextmenü eine Erweiterungsimplementierung angelegt werden:

eine Erweiterungsimplementierung angelegt werden: Da wir Coding einfügen möchten, muss im nächsten Bild die

Da wir Coding einfügen möchten, muss im nächsten Bild die entsprechende Option bestätigt werden. Der Erweiterungsimplementierung ist ein Name im Kundennamensraum zu geben:

ist ein Name im Kundennamensraum zu geben: Erweiterungsimplementierungen sind an das Transportsystem

Erweiterungsimplementierungen sind an das Transportsystem angeschlossen.

Nun kann das Coding ergänzt werden:

sind an das Transportsystem angeschlossen. Nun kann das Coding ergänzt werden: ABAP Delta - 43 -

Die Erweiterung wird automatisch durch die Anweisungsfolge „ENHANCEMENT… ENDENHANCEMENT“ geklammert und mit einer fortlaufenden Nummer sowie dem Namen der Erweiterungsimplementierung versehen.

Schließlich muss die Erweiterung aktiviert werden:

Schließlich muss die Erweiterung aktiviert werden: Es können bei Bedarf weitere Implementierungen angelegt

Es können bei Bedarf weitere Implementierungen angelegt werden.

bei Bedarf weitere Implementierungen angelegt werden. Beachten Sie aber, dass Sie nur bedingt (über den Namen

Beachten Sie aber, dass Sie nur bedingt (über den Namen der Erweiterungsimplemen- tierung?) Einfluss auf die Reihenfolge haben, in der die Erweiterungen ausgeführt werden.

Vorhandene Implementierungen können auch geändert, zurückgenommen oder ersetzt werden.

können auch geändert, zurückgenommen oder ersetzt werden. Bei der Ersetzung einer Implementierung ist nur am

Bei der Ersetzung einer Implementierung ist nur am angehängten Kommentar erkenntlich, welche Implementierung gültig ist!

Kommentar erkenntlich, welche Implementierung gültig ist! Neben der Ergänzung eines Sourcecodes z.B. am Anfang und am

Neben der Ergänzung eines Sourcecodes z.B. am Anfang und am Ende einer Form-Routine können auch lokal im Programm definierte Strukturen erweitert werden.

und am Ende einer Form-Routine können auch lokal im Programm definierte Strukturen erweitert werden. ABAP Delta

Bemerkenswert ist allerdings die Syntax, mit der die Erweiterung zu erfolgen hat:

die Syntax, mit der die Erweiterung zu erfolgen hat: Um die Ausgabe der Zusatzfelder zu ermöglichen,

Um die Ausgabe der Zusatzfelder zu ermöglichen, wird im vorliegenden Beispiel das Coding der Form-Routine „spfli_ausgeben“ im Prinzip vollständig ersetzt, weil innerhalb der LOOP- Schleife keine implizite Erweiterung möglich ist.

der LOOP- Schleife keine implizite Erweiterung möglich ist. Neben der impliziten Erweiterung von Quellcodes (an den

Neben der impliziten Erweiterung von Quellcodes (an den ausgewiesenen Stellen!) können prinzipiell auch für Funktionsbausteine zusätzliche, allerdings nur optionale Parameter vereinbart werden. Die zusätzliche Definition von EXCEPTIONS ist nicht möglich.

optionale Parameter vereinbart werden. Die zusätzliche Definition von EXCEPTIONS ist nicht möglich. ABAP Delta - 45

Es muss wieder eine Erweiterungsimplementierung angelegt werden:

wieder eine Erweiterungsimplementierung angelegt werden: Das erforderliche Zusatzcoding kann durch eine implizite
wieder eine Erweiterungsimplementierung angelegt werden: Das erforderliche Zusatzcoding kann durch eine implizite

Das erforderliche Zusatzcoding kann durch eine implizite Erweiterung am Anfang oder am

Ende des Bausteins erfolgen (oder aber in aufgerufen Form’s, eingebettenen Include’s,

).

aber in aufgerufen Form’s, eingebettenen Include’s, ). Beachten Sie aber, dass es wie immer Ausnahmen gibt:

Beachten Sie aber, dass es wie immer Ausnahmen gibt:

Aber Achtung, es gibt Ausnahmen !

Include’s, ). Beachten Sie aber, dass es wie immer Ausnahmen gibt: Aber Achtung, es gibt Ausnahmen
Include’s, ). Beachten Sie aber, dass es wie immer Ausnahmen gibt: Aber Achtung, es gibt Ausnahmen

Grundsätzlich ist es möglich, auch globale Klassen zu erweitern:

Zusätzliche optionale Methodenparameter vom Typ „Importing“, „Exporting“ oder „Changing“, aber keine „Returning“-Parameter oder zusätzliche Exceptions.

Zusätzliche

Attribute

oder

Methoden

(Public,

Private

oder

Protected)

Pre- und/oder Pos-Methoden zu einer SAP-Methode oder alternativ die Definition einer Overwrite-Methode.

Beispiel: Postmethode zu „GET_SPFLI_BY_CARRID“ zur Klasse CL_WD_FLIGHT_MODEL.

Mit Hilfe der Postmethode soll die im Returning-Parameter FLIGHTS übergebene interne Tabelle sortiert werden:

FLIGHTS übergebene interne Tabelle sortiert werden: Die Erweiterung beginnt mit der Funktion „Klasse

Die Erweiterung beginnt mit der Funktion „Klasse Erweitern“:

beginnt mit der Funktion „Klasse Erweitern“: Es muss nun entschieden werden, welche Methodenerweiterung

Es muss nun entschieden werden, welche Methodenerweiterung vorzunehmen ist:

„Klasse Erweitern“: Es muss nun entschieden werden, welche Methodenerweiterung vorzunehmen ist: ABAP Delta - 47 -

Die Post-Methode kann nun angelegt werden. Es wird automatisch ein Include mit einer lokalen Klasse angelegt, in deren Namensgebung der gewählte Implementierungsname einfließt. Das Public-Attribut CORE_OBJECT ist eine Referenz auf die Originalklasse und stellt damit alle öffentlichen Komponenten der Originalklasse zur Verfügung. Private- oider Protected-Komponenten sind in den Pre-, Post- oder Overwrite-Methoden nicht sichtbar!

in den Pre-, Post- oder Overwrite-Methoden nicht sichtbar! Das gewünschte Coding für die Sortierung kann nun

Das gewünschte Coding für die Sortierung kann nun in der lokalen Methode „IPO_ZIM_CL_WD_FLIGHT_MODEL~GET_SPFLI_BY_CARRID“ erfolgen. Es stehen die ursprünglichen Importparameter zur Verfügung, alle Export- und Returning-Parameter werden zu Changing-Parameter.

und Returning-Parameter werden zu Changing-Parameter. Die Post-Methode wird nun automatisch jedes Mal nach dem

Die Post-Methode wird nun automatisch jedes Mal nach dem Aufruf der ursprünglichen Methode GET_SPFLI_BY_CARRID“ durchlaufen.

4.3.2 Expliziter Enhancement-Point

Bei einem expliziten Enhancement-Point ist im Gegensatz zu den implizit möglichen Erweiterungen die Sourcecode-Zeile, in der die Erweiterung eingebaut werden kann, bereits SAP-seitig vordefiniert.

Die expliziten Enhancement-Points sind durch die Anweisung „ENHANCEMENT-POINT“ gekennzeichnet und immer einen Enhancement-Spot zugeordnet.

Beispiel-Coding:

*&-----------------------------------------------------------------* *& Report ZENH02 *& *&-----------------------------------------------------------------*

REPORT zenh02.

DATA :

gt_spfli TYPE TABLE OF spfli, gs_spfli TYPE spfli.

SELECT * FROM spfli INTO TABLE gt_spfli.

ENHANCEMENT-POINT sort SPOTS zenh02_spot.

LOOP AT gt_spfli INTO gs_spfli. WRITE : / gs_spfli-carrid, gs_spfli-connid, gs_spfli-cityfrom, gs_spfli-cityto. ENHANCEMENT-POINT write SPOTS zenh02_spot. ENDLOOP.

Prinzipiell werden explizite Enhancement-Points genauso implementiert wie implizite, d.h. es wird eine Erweiterungsimplementierung angelegt und das Coding ergänzt:

angelegt und das Coding ergänzt: Auch Erweiterungsimplementierungen zu expliziten

Auch Erweiterungsimplementierungen zu expliziten Enhancement-Points können mehrfach definiert, zurückgenommen, ersetzt oder geändert werden (siehe entsprechende Ausführungen zu impliziten Enhancement-Points).

4.3.3 Enhancement-Section

Eine Enhancement-Section ist ein vordefinierter Coding-Abschnitt, der durch ein anderes Coding modifikationsfrei ersetzt werden kann. Enhancement-Sections sind durch die Anweisungsfolge „ENHANCEMENT-SECTION….“ / „END-ENHANCEMENT-SECTION“ geklammert und immer einem Enhancement-Spot zugeordnet. Es gibt keine impliziten Enhancement-Sections!

Beispiel:

Im folgenden Coding-Abschnitt wurde die Ausgabeschleife innerhalb einer Enhancement- Section eingebettet:

*&-----------------------------------------------------------------* *& Report ZENH03 *& *&-----------------------------------------------------------------*

REPORT zenh03.

DATA :

gt_spfli TYPE TABLE OF spfli, gs_spfli TYPE spfli.

SELECT * FROM spfli INTO TABLE gt_spfli.

ENHANCEMENT-SECTION ausgabe SPOTS zenh03_spot. LOOP AT gt_spfli INTO gs_spfli. WRITE : / gs_spfli-carrid, gs_spfli-connid, gs_spfli-cityfrom, gs_spfli-cityto.

ENDLOOP.

END-ENHANCEMENT-SECTION.

Das gesamte Coding der Section kann mit Hilfe einer Erweiterungsimplementierung ersetzt werden:

. Das gesamte Coding der Section kann mit Hilfe einer Erweiterungsimplementierung ersetzt werden: ABAP Delta -

Achten Sie darauf, dass es keinen Sinn macht, für eine Enhancement-Section mehrere (aktive) Implementierungen anzulegen. Es werden nicht alle Implementierungen durchlaufen, sondern nur eine! Welche dies ist, lässt sich nur schwer (über den Namen der Implementierung?) festlegen.

Noch ein Hinweis:

Explizite Enhancement-Points und Sections, die das Erweitern oder das Ersetzen ausführbarer Anweisungen erlauben, nennt man auch dynamische Enhancements.

Explizite Enhancement-Points und Sections, die das Erweitern oder das Ersetzen von Deklarationen erlauben, nennt man auch statistische Enhancements.

4.3.4 Debugging

Werden Source-Codes mit aktiven Enhancements gedebugged, wird zunächst der Original- Source-Code angezeigt. Erst wenn die „ENHANCEMENT“-Anweisung durchlaufen wird, wird das aktive Coding angezeigt:

Erst wenn die „ENHANCEMENT“-Anweisung durchlaufen wird, wird das aktive Coding angezeigt: ABAP Delta - 51 -

4.3.5 Enhancements in SAP-Programmen

Betrachtet man ein Standard-SAP-Programm wie RV10A001, so sind dort scheinbar bereits eine große Anzahl von Implementierungen zu den Enhancement-Points angelegt und auch aktiviert worden.

den Enhancement-Points angelegt und auch aktiviert worden. Trotzdem werden nicht alle der Implementierungen zur

Trotzdem werden nicht alle der Implementierungen zur Laufzeit tatsächlich ausgeführt. Die Ursache liegt darin, dass Entwicklungsobjekte (wie z.B. Erweiterungsimplementierungen, Enhancement-Spots, …) einem sogenannten „Schalter“ zugeordnet werden können. Erst wenn dieser Schalter auf „on“ gesetzt wird, wird die Implementierung tatsächlich auch ausgeführt:

wird die Implementierung tatsächlich auch ausgeführt: Nähere Erläuterungen siehe Kapitel „Switch-Framework“.

Nähere Erläuterungen siehe Kapitel „Switch-Framework“.

5. Business AddIns (BAdI’s)

Die BAdI-Technologie ist die derzeitig wichtigste Erweiterungstechnik der SAP. Mit Hilfe von BAdI’s können nicht nur Erweiterungen an Quelltexten vorgenommen werden, sondern auch Menü-Ergänzungen und zusätzliche Dynpro-Felder definiert werden. Wichtig ist dabei aber zu beachten, dass bei der BAdI-Technik alle Erweiterungen bereits von SAP vorgeplant sein müssen, d.h. zum Beispiel, dass die Stellen im Sourcecode, an denen zusätzliches Coding eingefügt werden kann, vom SAP-Entwickler festgelegt worden sind.

Sourcecode-Erweiterungen

vorgenommen:

werden

nach

folgendem

Prinzip

(bei

klassichen

BAdI’s)

Der SAP-Entwickler definiert zunächst mit Hilfe der Transaktion SE18 eine Erweiterung (BAdI). Mit Hilfe eines Interfaces wird festgelegt, welche Methoden die Erweiterung anbieten soll. An den im Sourcecode vorgesehenen Stellen sorgt der Entwickler nun dafür, dass die vom Kunden-Entwickler vorgenommenen Implementierungen des Interfaces ermittelt und aufgerufen werden.

„Klassische BAdI’s“ und die neueren „Kernel-BAdI’s“ unterscheiden sich im Wesentlichen darin, wie zur Laufzeit die von Kunden-Entwickler vorgenommenen Implementierung ermittelt und aufgerufen werden. Zusätzlich ist zu beachten, dass Kernel-BAdI’s immer einem Enhancement-Spot zugewiesen sind.

5.1. Klassisches BAdI

An einem einfachen Beispiel soll gezeigt werden, wie ein klassisches Business AddIn vom SAP-Entwickler definiert und anschließend vom Kunden-Entwickler implementiert wird.

Ausgangspunkt soll das folgende Programm sein:

*&-----------------------------------------------------------* *& Report ZBADI01 *& *&-----------------------------------------------------------*

REPORT zbadi01.

DATA :

lt_spfli TYPE TABLE OF spfli, ls_spfli LIKE LINE OF lt_spfli.

START-OF-SELECTION. SELECT * FROM spfli INTO TABLE lt_spfli.

* Hier soll sortiert werden können

LOOP AT lt_spfli INTO ls_spfli. WRITE : / ls_spfli-carrid, ls_spfli-connid, ls_spfli-cityfrom, ls_spfli-cityto.

* Hier sollen weitere Felder ausgegeben werden können. ENDLOOP.

An den mit einem Kommentar versehenen Stellen möchte der SAP-Entwickler dem Kundenentwickler gestatten, modifikationsfrei die Daten der internen Tabellen lt_spfli zu sortieren bzw. zusätzliche Felder auszugeben.

Mit Hilfe der Transaktion SE18 wird zunächst ein „klassisches BAdI“ angelegt:

SE18 wird zunächst ein „klassisches BAdI“ angelegt: Im Interface werden zwei Methode SORTIEREN und AUSGABE
SE18 wird zunächst ein „klassisches BAdI“ angelegt: Im Interface werden zwei Methode SORTIEREN und AUSGABE

Im Interface werden zwei Methode SORTIEREN und AUSGABE definiert:

ein „klassisches BAdI“ angelegt: Im Interface werden zwei Methode SORTIEREN und AUSGABE definiert: ABAP Delta -
ein „klassisches BAdI“ angelegt: Im Interface werden zwei Methode SORTIEREN und AUSGABE definiert: ABAP Delta -

Bei der Definition des BAdI’s wird automatisch eine sogenannte Adapterklasse (generierte BAdI-Klasse) angelegt.

sogenannte Adapterklasse (generierte BAdI-Klasse) angelegt. Diese Klasse liefert eine Implementierung des Interfaces des

Diese Klasse liefert eine Implementierung des Interfaces des BAdI’s. Das Implementierungs- coding wird ebenfalls automatisch erzeugt:

Implementierungs- coding wird ebenfalls automatisch erzeugt: Prinzipiell nutzt der SAP-Entwickler in seinem Programm die

Prinzipiell nutzt der SAP-Entwickler in seinem Programm die Adapterklasse, um an den betreffenden Stellen die Kunden-Implementierungen des Interfaces zu bestimmen und aufzurufen.

Nach der Definition des BAdI’s kann der SAP-Entwickler nun die Aufrufe im eigentlichen Programm einbauen.

der Definition des BAdI’s kann der SAP-Entwickler nun die Aufrufe im eigentlichen Programm einbauen. ABAP Delta

Zunächst muss eine Referenzvariable auf das BAdI-Interface definiert werden. Mit Hilfe des sogenannten „Exit-Handlers“ wird eine Instanz der Adapterklasse angelegt. Dies kann zur Laufzeit sehr gut mit dem Debugger überprüft werden:

zur Laufzeit sehr gut mit dem Debugger überprüft werden: Schließlich muss an den betreffenden Stellen der

Schließlich muss an den betreffenden Stellen der Aufruf der Methoden erfolgen. Bedenken Sie, dass eigentlich der SAP-Entwickler nicht die Implementierungen des Kundenentwicklers kennt. Stattdessen ruft er stellvertretend die Methoden der Adapterklasse auf, die ihrerseits die Implementierungen des Kundenentwicklers bestimmen und aufrufen.

des Kundenentwicklers bestimmen und aufrufen. Damit ist die Arbeit des SAP-Entwicklers abgeschlossen.

Damit ist die Arbeit des SAP-Entwicklers abgeschlossen.

Hinweis:

Bei der Definition eines BAdI’s kann der SAP-Entwickler entscheiden, ob gleichzeitig mehrere aktive (also aufrufbare) Implementierungen möglich sein sollen. Zu beachten ist allerdings, dass man in diesem Fall keinen Einfluss darauf hat, in welcher Reihenfolge die Implementierungen ausgeführt werden.

Fall keinen Einfluss darauf hat, in welcher Reihenfolge die Implementierungen ausgeführt werden. ABAP Delta - 56

BAdI’s können auch „filterabhängig“ definiert werden. Dies bedeutet, man hätte in unserem Beispiel etwa die Möglichkeit, die Fluggesellschaft (CARRID) als Filterwert zu vereinbaren und könnte dann pro Fluggesellschaft eine eigenständige Implementierung vereinbaren. Man hat dadurch den Vorteil, dass man nicht in einer einzigen Implementierung durch komplexe Fallunterscheidungen das Coding für die verschiedenen Werte von CARRID unterscheiden zu müssen. Beispiel:

Werte von CARRID unterscheiden zu müssen. Beispiel: Jeder Interface-Methode wird automatisch der Parameter

Jeder Interface-Methode wird automatisch der Parameter FLT_VAL übergeben, der beim Aufruf der gewünschte Filterwert übergeben werden kann.

Aufruf der gewünschte Filterwert übergeben werden kann. Der Aufruf mit Übergabe eines Filterwerts kann dann so

Der Aufruf mit Übergabe eines Filterwerts kann dann so aussehen:

mit Übergabe eines Filterwerts kann dann so aussehen: Die entsprechende Methode der Adapterklasse sucht dann genau

Die entsprechende Methode der Adapterklasse sucht dann genau die Implementierung des Kundenentwicklers, die für den aktuell übergebenen Filterwert zugeordnet wurde heraus und ruft diese auf.

Mit Hilfe einer „Default-Implementierung“ kann der SAP-Entwickler Coding vorgeben für die Filterwerte, für die keine explizite Implementierung vorgesehen ist.

Nun zu den Arbeiten auf Seiten des Kunden-Entwicklers. Er kann mit Hilfe der Transaktion SE19 zu einem BAdI die Implementierungen anlegen:

Er kann mit Hilfe der Transaktion SE19 zu einem BAdI die Implementierungen anlegen: ABAP Delta -
Er kann mit Hilfe der Transaktion SE19 zu einem BAdI die Implementierungen anlegen: ABAP Delta -
Er kann mit Hilfe der Transaktion SE19 zu einem BAdI die Implementierungen anlegen: ABAP Delta -

Die Implementierung muss nun noch aktiviert werden:

Die Implementierung muss nun noch aktiviert werden: Beachten Sie, dass nur bei „mehrfach nutzbaren“ BAdI’s mehr

Beachten Sie, dass nur bei „mehrfach nutzbaren“ BAdI’s mehr als eine Implementierung zur gleichen Zeit aktiv sein darf.

Bei filterabhängigen BAdI’s ist bei der Implementierung jeweils anzugeben, für welche Filterwerte die Implementierung gelten soll:

für welche Filterwerte die Implementierung gelten soll: Es ist möglich, die gleiche Implementierung für mehrere

Es ist möglich, die gleiche Implementierung für mehrere Filterwerte zu nutzen. Den Methode wird jeweils im Parameter FLT_VAL der aktuelle Filterwert übergeben und kann gegebenenfalls in der Implementierung ausgewertet werden.

Die notwendigen Schritte auf Seiten des SAP-Entwicklers und des Kunden-Entwicklers werden an dem schon bekannten Beispiel demonstriert.

5.2 Kernel BAdI

Ziel bei der Entwicklung der „neuen BAdI’s“, der sogenannten Kernel-BAdI’s war in erster Linie, den Aufruf der BAdI-Implementierungen zu beschleunigen. Bei den Kernel-BAdI’s erfolgt der Methodenaufruf nicht mehr mit Hilfe einer Adapterklasse, sondern durch ein im SAP-Kernel verankertes BAdI-Handle. Der Aufruf ist um den Faktor 40 – 600 schneller!

*&-----------------------------------------------------------* *& Report ZBADI02 *& *&-----------------------------------------------------------*

REPORT zbadi02.

DATA :

lt_spfli TYPE TABLE OF spfli, ls_spfli LIKE LINE OF lt_spfli.

START-OF-SELECTION. SELECT * FROM spfli INTO TABLE lt_spfli.

* Hier soll sortiert werden können

LOOP AT lt_spfli INTO ls_spfli. WRITE : / ls_spfli-carrid, ls_spfli-connid, ls_spfli-cityfrom, ls_spfli-cityto.

* Hier sollen weitere Felder ausgegeben werden können. ENDLOOP.

Kernel-BAdI’s sind grundsätzlich immer einem Erweiterungs-Spot zugeordnet. Der SAP- Entwickler muss diesen Spot zunächst mit Hilfe der Transaktion SE18 anlegen:

Spot zunächst mit Hilfe der Transaktion SE18 anlegen: Unter Technologie steht derzeitig ausschließlich

Unter Technologie steht derzeitig ausschließlich „BAdI-Definition“ zur Verfügung.

Für den Erweiterungsspot können nun eine oder mehrere BAdI-Definitionen angelegt werden:

nun eine oder mehrere BAdI-Definitionen angelegt werden: Der Name des BAdI-Interface ist im Gegensatz zu klassischen

Der Name des BAdI-Interface ist im Gegensatz zu klassischen BAdI’s nicht fest vorgegeben, sondern wird vom Entwickler festgelegt:

fest vorgegeben, sondern wird vom Entwickler festgelegt: Das Interface wird nun exakt genau so definiert wie

Das Interface wird nun exakt genau so definiert wie bei klassischen BAdI’s:

Entwickler festgelegt: Das Interface wird nun exakt genau so definiert wie bei klassischen BAdI’s: ABAP Delta

Im Coding des zu erweiternden Programms ist nun eine Referenz-Variable auf das Kernel- BAdI (nicht auf das Interface!) zu definieren. Das BAdI-Handle (Ersatz für die Adapterklasse) wird mit Hilfe der Anweisung GET BADI erzeugt.

wird mit Hilfe der Anweisung GET BADI erzeugt. Achten Sie auf die Fehlerbehandlung für den „GET

Achten Sie auf die Fehlerbehandlung für den „GET BADI“ - Aufruf. GET BADI erzeugt einen Laufzeitfehler, wenn es keine aktive Implementierung zum BAdI gibt.

Der Aufruf der Implementierungen zu den Interface-Methoden erfolgt durch „CALL BADI“. Beachten Sie auch hier die Fehlerbehandlung.

BADI“. Beachten Sie auch hier die Fehlerbehandlung. Hinweis: Man kann einem Kernel-BAdI eine Klasse

Hinweis:

Man kann einem Kernel-BAdI eine Klasse (Fallback-Klasse) mit einer Default- Implementierung zuordnen. Diese Default-Implementierung wird verwendet, wenn es keine sonstige aktive Implementierung gibt.

Diese Default-Implementierung wird verwendet, wenn es keine sonstige aktive Implementierung gibt. ABAP Delta - 62 -

Nun zur Arbeit auf Kundenseite. Der Entwickler kann mit Hilfe der Transaktion SE19 eine Implementierung zum Kernel-BAdI anlegen. Anzugeben ist allerdings zunächst der Erweiterungsspot, dem das BAdI zugeordnet wurde:

der Erweiterungsspot, dem das BAdI zugeordnet wurde: Der Erweiterungsimplementierung muss ein Name zugeordnet

Der Erweiterungsimplementierung muss ein Name zugeordnet werden.

Erweiterungsimplementierung muss ein Name zugeordnet werden. Auch die Implementierung zum BAdI benötigt einen Namen: Der

Auch die Implementierung zum BAdI benötigt einen Namen:

Auch die Implementierung zum BAdI benötigt einen Namen: Der Name der implementierenden Klasse ist anzugeben. Sie

Der Name der implementierenden Klasse ist anzugeben. Sie wird, falls sie nicht schon existiert, automatisch angelegt:

Klasse ist anzugeben. Sie wird, falls sie nicht schon existiert, automatisch angelegt: ABAP Delta - 63

Nach Doppelklick auf den Methodennamen kann das Coding eingegeben werden:

auf den Methodennamen kann das Coding eingegeben werden: Die BAdI-Implementierung muss nun noch auf „aktiv“
auf den Methodennamen kann das Coding eingegeben werden: Die BAdI-Implementierung muss nun noch auf „aktiv“

Die BAdI-Implementierung muss nun noch auf „aktiv“ gesetzt werden:

muss nun noch auf „aktiv“ gesetzt werden: Achten Sie darauf, dass bei BAdI-Implementierung auch der

Achten Sie darauf, dass bei BAdI-Implementierung auch der Aktivierungszustand transportiert wird. Es ist nicht vorgesehen, erst im Zielsystem zu entscheiden, ob ein BAdI- Implementierung aktiv ist oder nicht.

6. Switch-Framework

Die Idee des Switch-Frameworks besteht darin, in einem SAP-System alle eventuell notwendigen (branchenspezifischen) Erweiterungen bereits fertig codiert auszuliefern, diese jedoch erst bei Bedarf zu aktivieren.

Zunächst werden Schalter definiert. Diesen können dann Repository-Objekte wie Pakete, Menü-Einträge, Dynpro-Felder, Append-Strukturen etc. zugeordnet werden. Schalter wiederum werden zu „Business Functions“ zusammengefasst, „Business Functions“ zu „Business Function Sets“. Wird ein „Business Function Set“ aktiviert, werden automatisch alle Erweiterungen wirksam, die Schalter des „Business Function Sets“ zugeordnet sind.

Schalter des „Business Function Sets“ zugeordnet sind. Die Zuordnung von Repository-Objekten zu Schaltern erfolgt

Die Zuordnung von Repository-Objekten zu Schaltern erfolgt zum Teil direkt aus dem betreffenden Entwicklungswerkzeug (Screen-Painter, Menü-Painter) heraus. Ist für ein Entwicklungsobjekt eine direkte Schalterzuordnung nicht möglich, erfolgt die Zuordnung über den Umweg „Paket“. Das betreffende Paket muss dann einem Schalter zugeordnet sein.

Zuordnung über den Umweg „Paket“. Das betreffende Paket muss dann einem Schalter zugeordnet sein. ABAP Delta

6.1 Schalter definieren

Schalter werden mit Hilfe der Transaktion SFW1 definiert. Beim Start der Transaktion erhalten Sie allerdings den Hinweis, dass die Transaktion nur für den SAP-internen Gebrauch freigegeben ist.

nur für den SAP-internen Gebrauch freigegeben ist. Über die Anlegen-Funktion kann ein neuer Schalter

Über die Anlegen-Funktion kann ein neuer Schalter hinzugefügt werden:

kann ein neuer Schalter hinzugefügt werden: Anschließend muss der Schalter aktiviert werden (das

Anschließend muss der Schalter aktiviert werden (das bedeutet noch nicht, dass sich jetzt schon Auswirkungen ergeben).

Über die Detail-Pflege können nun dem Schalter z.B. Pakete zugeordnet werden:

Auswirkungen ergeben). Über die Detail-Pflege können nun dem Schalter z.B. Pakete zugeordnet werden: ABAP Delta -

Nach der Aktivierung des Schalters ist die Schalterzuordnung in der Paketdefinition sichtbar (etwas Geduld bitte, die Aktivierung läuft im Hintergrund):

(etwas Geduld bitte, die Aktivierung läuft im Hintergrund): 6.2 Zuordnung von Repository-Objekten Dem Paket können nun

6.2 Zuordnung von Repository-Objekten

Dem Paket können nun beliebige Repository-Objekte zugewiesen werden. Im Beispiel soll zunächst zur Tabelle SFLIGHT eine Append-Struktur definiert werden.

zur Tabelle SFLIGHT eine Append-Struktur definiert werden. Die Append-Struktur wird dem Paket ZSFWDEMOPAKET zugeordnet.

Die Append-Struktur wird dem Paket ZSFWDEMOPAKET zugeordnet. Nach der Aktivierung der Append-Struktur bleibt der Status der Struktur bei „neu“, der über das Paket zugeordnete Schalter wird angezeigt:

bleibt der Status der Struktur bei „neu“, der über das Paket zugeordnete Schalter wird angezeigt: ABAP

Im Demo-Programm ZSFW_DEMO ist ein expliziter Enhancement-Point definiert.

*&-----------------------------------------------------------* *& Report ZSFW_DEMO *& *&-----------------------------------------------------------*

REPORT zsfw_demo.

DATA :

ls_sflight TYPE sflight.

START-OF-SELECTION. SELECT * FROM sflight INTO ls_sflight. WRITE : / ls_sflight-carrid, ls_sflight-connid, ls_sflight-fldate. ENHANCEMENT-POINT zusatzfelder SPOTS zsfw_sflight. ENDSELECT.

Für diesen Enhancement-Point wird eine Implementierung angelegt, die ebenfalls dem Paket ZSFWDEMOPAKET zugeordnet wird.

die ebenfalls dem Paket ZSFWDEMOPAKET zugeordnet wird. Bemerkenswert ist, dass im Coding bereits die Komponenten

Bemerkenswert ist, dass im Coding bereits die Komponenten der noch nicht aktiven Append- Struktur ansprechbar sind (Kein Wunder, es wird keine Syntaxprüfung durchgeführt!). Die Implementierung des Enhancement-Point wird als „active“ gekennzeichnet, obwohl sie noch nicht ausgeführt wird.

des Enhancement-Point wird als „active“ gekennzeichnet, obwohl sie noch nicht ausgeführt wird. ABAP Delta - 68

Führt man einen Doppelklick auf den Namen der Erweiterungsimplementierung aus, erkennt man unter den „Eigenschaften“, dass die Implementierung dem Schalter ZSFWDEMO zugeordnet ist und der Schalter noch auf „off“ steht.

zugeordnet ist und der Schalter noch auf „off“ steht. 6.3 Definition von Business Functions Mit Hilfe

6.3 Definition von Business Functions

Mit Hilfe der Transaktion SFW2 können sogenannte „Business Functions“ definiert werden.

sogenannte „Business Functions“ definiert werden. Diesen Business Functions können nun Schalter zugeordnet

Diesen Business Functions können nun Schalter zugeordnet werden:

Functions“ definiert werden. Diesen Business Functions können nun Schalter zugeordnet werden: ABAP Delta - 69 -

6.4 Definition Business Function Set

Mit Hilfe eines „Business Function Sets“ können „Business Functions“ gruppiert werden. Sie werden mit Hilfe der Transaktion SFW3 gepflegt.

werden. Sie werden mit Hilfe der Transaktion SFW3 gepflegt. Beachten Sie, dass die Aktivierung eines Business

Beachten Sie, dass die Aktivierung eines Business Function Sets mit Hilfe der Transaktion SFW3 noch nicht bedeutet, dass sich Auswirkungen auf die Laufzeitumgebung zeigen.

6.5. Aktivierung von Business Function Sets

Ein Business Function Set kann mit Hilfe der Transaktion SFW5 aktiviert werden.

Set kann mit Hilfe der Transaktion SFW5 aktiviert werden. Die Aktivierung des Add-Ons wird im Hintergrund

Die Aktivierung des Add-Ons wird im Hintergrund ausgeführt. Es werden dabei automatisch alle den abhängigen Schaltern zugeordneten Repository-Objekte aktiviert. Im aktuellen Fall bedeutet dies, dass jetzt die Append-Struktur zur Tabelle SFLIGHT sichtbar ist und auch die Erweiterungsimplementierung ausgeführt wird.

Anzeige des Programm ZSFW_DEMO: Hinweis: Beachten Sie unbedingt, dass die Aktivierung von Business Function Sets

Anzeige des Programm ZSFW_DEMO:

Anzeige des Programm ZSFW_DEMO: Hinweis: Beachten Sie unbedingt, dass die Aktivierung von Business Function Sets nicht

Hinweis:

Beachten Sie unbedingt, dass die Aktivierung von Business Function Sets nicht immer rückgängig gemacht werden kann, z.B. dann nicht, wenn Dictionary-Objekte aktiviert wurden.