Abap Best Practices - Sap Press

29

Click here to load reader

Transcript of Abap Best Practices - Sap Press

Page 1: Abap Best Practices - Sap Press

Sascha Krüger, Jörg Seelmann-Eggebert

ABAP® Best Practices

Page 2: Abap Best Practices - Sap Press

5Inhalt

Inhalt

Vorwort 11

1 Einleitung 13

1.1 An wen richtet sich dieses Buch? .................................................................. 13

1.2 Wie ist dieses Buch zu lesen? ........................................................................ 13

1.3 Wie kann ich mit diesem Buch praktisch arbeiten? ................................... 161.3.1 Systemvoraussetzungen .................................................................... 161.3.2 Beispielprogramme ............................................................................ 161.3.3 Übungsdaten ...................................................................................... 17

1.4 Syntaxkonventionen ........................................................................................ 19

2 Softwareentwicklung mit ABAP 21

2.1 Einleitung .......................................................................................................... 21

2.2 Objektorientiertes oder klassisches ABAP? ................................................ 222.2.1 Bessere Datenkapselung ................................................................... 232.2.2 Mehrfachinstanziierung .................................................................... 242.2.3 Bessere Wiederverwendbarkeit des Quelltextes ........................... 302.2.4 Separation von Schnittstelle und Implementierung ...................... 402.2.5 Unterstützung ereignisgesteuerter Programmierung .................... 452.2.6 Keine »schwarze Magie« durch den Verzicht auf implizite

Funktionalitäten ................................................................................. 472.2.7 Verbesserte Syntax- und Semantikregeln ....................................... 482.2.8 Einziger Weg zur Nutzung neuer ABAP-Technologien ................. 492.2.9 ABAP Objects – just do it! ................................................................ 50

2.3 (Nicht) Wiederverwendbare Komponenten ................................................ 532.3.1 Freigabestatus von Funktionsbausteinen und Klassen ................. 542.3.2 Handlungsempfehlung ...................................................................... 55

2.4 Entwicklungsrichtlinien in der ABAP-Welt .................................................. 592.4.1 Namenskonventionen ....................................................................... 602.4.2 Vermeidung von Literalen durch Verwendung

von Konstanten ................................................................................. 652.4.3 Dokumentation von funktionalen Einheiten ................................. 682.4.4 QS-Assessment .................................................................................. 69

2.5 Robuste Programme entwickeln ................................................................... 722.5.1 Defensive Programmierung .............................................................. 722.5.2 Ausnahmebehandlung ...................................................................... 73

Page 3: Abap Best Practices - Sap Press

Inhalt6

2.5.3 Klassenbasierte Ausnahmebehandlung ........................................... 812.5.4 Definition eigener Ausnahmen ........................................................ 852.5.5 Einbinden der traditionellen Ausnahmebehandlung in die

klassenbasierte Ausnahmebehandlung ........................................... 892.5.6 Historische Fehlerereignisse ............................................................. 92

3 Lösungskonzepte für die tägliche Programmierarbeit mit ABAP 95

3.1 Dynamische und generische Programmierung ............................................ 953.1.1 Dynamische Adressierung von Feldnamen .................................... 963.1.2 Dynamische Adressierung von Tabellennamen ............................. 983.1.3 Dynamische Angabe von Feldlisten und Klauseln bei SELECT .... 1013.1.4 Dynamische Erzeugung eines Datenobjekts beliebigen Typs ...... 1053.1.5 Dynamische Adressierung von Strukturkomponenten ................. 1083.1.6 Sichere Sortierung einer internen Tabelle dynamisch durch

den Benutzer erlauben ...................................................................... 1103.1.7 Dynamischer Aufruf von internen Unterroutinen ......................... 1143.1.8 Dynamischer Aufruf von externen Unterroutinen mit Zugriff

auf globale Felder des externen Programms .................................. 1173.1.9 Dynamischer Aufruf von Funktionsbausteinen mit dynamischer

Parameterübergabe ........................................................................... 1203.1.10 Dynamische Erzeugung von Klasseninstanzen und dynamischer

Methodenaufruf mit dynamischer Parameterübergabe ................ 1263.1.11 Polymorphie über Interfaces ............................................................ 134

3.2 Generierung von Programmen ....................................................................... 1403.2.1 Erzeugung transienter Programme .................................................. 1413.2.2 Erzeugung persistenter Programme ................................................ 1523.2.3 Performancevergleich ........................................................................ 156

3.3 Run-Time Type Identification ......................................................................... 1583.3.1 Arbeitsweise mit RTTI-Klassen ......................................................... 1593.3.2 Geschachtelte Strukturen generisch auslesen ................................ 1613.3.3 Export eines beliebigen Datenbanktabelleninhalts mit

Überschriftenzeile .............................................................................. 165

3.4 SQL-Performance und effiziente Datenbankkommunikation ................... 1693.4.1 Selektion der benötigten Felder ...................................................... 1713.4.2 Vermeiden von SELECT...CHECK-Anweisungen ........................... 1713.4.3 Aggregationsfunktionen .................................................................... 1723.4.4 Lesen mehrerer Datenbanktabellen ................................................ 1733.4.5 Update mehrerer Datensätze ........................................................... 1743.4.6 Kopieren von Datenbanktabellen in interne Tabellen .................. 1753.4.7 Abschalten der Änderungsprotokollierung für Tabellen ............... 177

3.5 Zeichenkettenverarbeitung ............................................................................. 1823.5.1 Strings versus C-Felder ...................................................................... 1843.5.2 Zerlegen eines Strings in gleich große Blöcke ................................ 1863.5.3 Einlesen einer Textdatei in eine interne Tabelle

mit Zeilentyp STRING ....................................................................... 1873.5.4 Einfügen von Zeichenketten ............................................................. 190

Page 4: Abap Best Practices - Sap Press

7Inhalt

3.6 Datumsfelder .................................................................................................... 1913.6.1 Berechnung der Differenz zwischen zwei Daten ........................... 1923.6.2 Letzter Tag eines Monats .................................................................. 1933.6.3 Anzahl der Schaltjahre zwischen zwei Jahren ................................ 1943.6.4 Bestimmung des nächsten Arbeitstages ......................................... 1953.6.5 Berechnung von Kalenderwochen und Wochentagen ................. 197

4 GUI- und Desktop-Entwicklung 201

4.1 GUI-Controls und das Control Framework .................................................. 2014.1.1 GUI-Controls ...................................................................................... 2024.1.2 Control Framework ........................................................................... 2034.1.3 Einbinden eines GUI-Controls ......................................................... 2044.1.4 Mehrere GUI-Controls einsetzen .................................................... 208

4.2 ALV-Grid-Control ............................................................................................. 2114.2.1 Daten aus mehreren Quellen (mit eingeschränkter

Spaltenselektion) darstellen ............................................................. 2114.2.2 Einfaches Drop-Down-Listenfeld im Grid darstellen .................... 2194.2.3 Drop-Down-Listenfeld nur für bestimmte Zellen

im Grid darstellen .............................................................................. 2264.2.4 Reaktion auf Hotspot-Clicks und Setzen eines Filters .................. 232

4.3 Frontend-Kommunikation .............................................................................. 2404.3.1 Datenaustausch mit dem Clipboard ................................................ 2424.3.2 Mit dem Dateisystem des Frontends arbeiten ............................... 2444.3.3 Export eines beliebigen Tabelleninhalts in eine durch

Trennzeichen separierte Liste .......................................................... 2504.3.4 Ausführen eines Programms auf dem Präsentationsserver .......... 2554.3.5 Arbeiten mit der Windows-Registry ............................................... 2584.3.6 Fortschrittsanzeige in der Statusleiste des SAP GUI ...................... 262

4.4 Dynpros und ABAP Objects ........................................................................... 264

5 Kommunikation mit der Außenwelt 275

5.1 Kommunikation mit dem Applikationsserver ............................................. 2755.1.1 Interne Tabelle auf dem Applikationsserver speichern

und einlesen ....................................................................................... 2765.1.2 Kommandos auf dem Applikationsserver ausführen .................... 2815.1.3 Externe Kommandos ausführen ...................................................... 284

5.2 RFC ..................................................................................................................... 2905.2.1 Erstellen eines externen RFC-Client-Programms ........................... 2915.2.2 Externer RFC-Client mit dynamischer Tabellendefinition ............ 3035.2.3 Erstellen eines externen RFC-Servers ............................................. 3095.2.4 Externer RFC-Server als integrierte Applikation ............................ 315

5.3 FTP-Kommunikation ........................................................................................ 3185.3.1 Kommunikation mit FTP-Servern .................................................... 319

Page 5: Abap Best Practices - Sap Press

Inhalt8

5.3.2 Ausführen von FTP-Kommandolisten zum Transfer von Dateien ........................................................................................ 324

5.3.3 FTP-Transfer von Dateien in interne Tabellen ............................... 330

5.4 Desktop-Integration ........................................................................................ 3345.4.1 COM-Klassen ..................................................................................... 3345.4.2 COM-Klasse aufrufen ........................................................................ 3365.4.3 Datenaustausch mit Word, Excel & Co. ......................................... 345

6 SAP GUI Scripting 375

6.1 Einleitung und Überblick ................................................................................ 3756.1.1 Technologischer Hintergrund ........................................................... 3766.1.2 Voraussetzungen für das GUI Scripting .......................................... 3806.1.3 Aufzeichnen und Abspielen eines Scripts ....................................... 3836.1.4 Konstanten für virtuelle Keys und Funktionstasten ...................... 390

6.2 Fortgeschrittene Scripting-Applikationen ................................................... 3916.2.1 Überblick ............................................................................................. 3916.2.2 Verbindung mit dem SAP GUI-Prozess herstellen ......................... 3926.2.3 Verbindung mit dem SAP-System herstellen ................................. 3956.2.4 Ermitteln einer bestimmten SAP-Session ....................................... 3976.2.5 Anmelden am SAP-System per Script ............................................. 3996.2.6 Abmelden vom SAP-System per Script ........................................... 4016.2.7 Einsatz der Scripting-Support-Routinen ......................................... 4036.2.8 Exportieren einer beliebigen Liste ................................................... 405

A Glossar 417

B Tabellen des Flugdatenmodells 425

C Konstanten für virtuelle Funktionstasten-Codes 429

D ABAP-Systemfelder 433

E Nützliche Eingaben im OK-Code-Feld 439

E.1 Direkter Aufruf von Transaktionen (Modusverwaltung) ........................... 439

E.2 Batchinput ......................................................................................................... 440

E.3 ABAP-Debugging ............................................................................................. 440

E.4 Pufferkommandos ............................................................................................ 440

Page 6: Abap Best Practices - Sap Press

9Inhalt

F Die Autoren 441

Index 443

Page 7: Abap Best Practices - Sap Press

11Vorwort

Vorwort

Gäbe es eine letzte Wahrheit, dann ließe sie sich nicht beweisen. So viel-deutig dieser Satz auch sein mag, eines ist sicher: Er gilt insbesondere für den Bereich der Softwareentwicklung. Welcher der richtige, der beste, der bessere Lösungsweg für ein gerade zu lösendes Entwurfs- oder Program-mierproblem ist, lässt sich nur selten mit Gewissheit beantworten. Und gerade bei Fragen rund um die Programmiersprache ABAP sind solche Antworten deshalb besonders schwer zu finden, weil für viele Probleme viele verschiedene Lösungswege angeboten werden, was zweifellos mit der langen Historie und der Evolution der Sprache zusammenhängt.

Zahlreiche Fragen von ABAP-Entwicklern, denen wir im Laufe der Zeit begegnet sind, Diskussionen in Internetforen und der eigene Drang zur Erprobung neuer Sprachkonzepte haben uns daher dazu inspiriert, dieses Buch zu schreiben - ein Buch, das man vielleicht am ehesten als »Koch-buch« bezeichnen könnte, in dem Sie Rezepte für die unterschiedlichsten Menüs finden. Menüs für viele Mahlzeiten, die Sie sehr gerne mögen, aber noch nie zubereitet haben, und für andere Mahlzeiten, die bereits zu Ihrem Kochrepertoire gehören, deren Variationen Ihnen jedoch neu sind. Es ist ein Buch, in dem Sie für verschiedene Problemstellungen, die immer wieder auftreten, typische und sauber entwickelte Lösungsansätze finden. Abhängig von Ihrem Erfahrungsstand werden Sie beim Durchblät-tern vermutlich auf eine ganze Reihe von Themen stoßen, die sofort Ihr Interesse wecken. Andere Überschriften bzw. Lösungen werden Sie viel-leicht vermissen.

In diesem Zusammenhang möchten wir Sie ermutigen, uns ein Feedback zukommen zu lassen, welche Lösungskonzepte Sie sich zusätzlich vorstel-len könnten oder wünschen würden. Sie sind auch herzlich dazu eingela-den, eigene Lösungskonzepte für bestimmte Probleme beizusteuern und in eventuelle Folgeauflagen dieses Buches einfließen zu lassen.

Wie immer im Leben gibt es auch beim Umfang eines Buches gewisse Beschränkungen. Während der Erstellung des Manuskripts standen wir ständig vor der Entscheidung, welche Lösungen bzw. Rezepte wir auf-nehmen sollten und welche nicht. Letztendlich basiert der Inhalt natür-lich auf einer subjektiven Auswahl, die wir aufgrund von Recherchen in Internetforen und intensiven Gesprächen mit ABAP-Entwicklern, Exper-ten und Anfängern getroffen haben. Dabei kam es uns nicht zuletzt auch darauf an, ein Gleichgewicht zwischen dem herzustellen, was die SAP empfiehlt, und dem, was in der Praxis tatsächlich gemacht wird. Sie wer-

Page 8: Abap Best Practices - Sap Press

Vorwort12

den darüber hinaus in diesem Buch Lösungen für ABAP-Probleme finden, die gar nicht mit nativen ABAP-Mitteln gelöst werden sollten, weil es ein-fach nicht der beste Weg ist.

Natürlich möchten wir uns bei all den Interviewpartnern und Inputliefe-ranten ganz herzlich bedanken, die uns tatkräftig bei der Stoffsammlung und Durchsicht des Manuskripts unterstützt haben. Ohne sie wäre dieses Buch nie realisiert worden. Unser Dank gilt Thomas Davidson, Ralf Drum, Horst Keller, Jürgen Kompa, Doreen Koselowski, Ralph Schnarkowski, Daniela Schälchi, Paul Lewis Trip und ganz besonders Tobias Trapp. Darü-ber hinaus danken wir auch Tomas Wehren und seinem Team von SAP PRESS für die gute Zusammenarbeit. Besonderer Dank soll hier Florian Zimniak zukommen, der mit geradezu unglaublicher Gelassenheit (und effektivem Nachdruck) viele unserer terminlichen Schwierigkeiten aus-gleichen konnte. Außerdem bedanken wir uns herzlich bei Stefan Proksch für die tatkräftige Unterstützung im Endspurt der Manuskriptabgabe.

Sascha Krüger dankt ganz besonders seiner Frau Katja, die noch mehr als sonst mit Zuspruch, Unterstützung, Kritik und ihrer wunderbaren Art, Menschen zu inspirieren, dafür gesorgt hat, dass dieses Projekt zu einem erfolgreichen Abschluss kommen konnte – und das mehr, als sich die meisten vorstellen können.

Jörg Seelmann-Eggebert dankt ganz besonders seinen beiden Kindern Anna und Jorge sowie seiner Frau Annette, die mit einem unglaublichen Verständnis und einer fortwährenden Unterstützung einen erheblichen Teil zur Fertigstellung des Manuskripts beigetragen haben – und das, obwohl die Zeit für das gemeinsame Familienleben ohnehin schon knapp bemessen war.

Solingen, im Januar 2005 Alfter, im Januar 2005 Sascha Krüger Jörg Seelmann-Eggebert

Page 9: Abap Best Practices - Sap Press

275Kommunikation mit der Außenwelt

5 Kommunikation mit der Außenwelt

Die Integration von SAP-System und anderen Anwendungen ist ein wesentlicher Bestandteil für die Abbildung durchgängi-ger, automatisierter Prozesse. In diesem Kapitel stellen wir eine Reihe von Fallbeispielen vor, deren zentrales Thema die Kommunikation eines SAP-Systems mit anderen Anwen-dungssystemen ist.

5.1 Kommunikation mit dem Applikationsserver

ABAP stellt Ihnen verschiedene Sprachelemente zur Verfügung, mit denen Dateien bearbeitet werden können. Da dem SAP-System eine wie in Abbildung 5.1 skizzierte Architektur zugrunde liegt, müssen hierbei – in Abhängigkeit davon, wo die zu bearbeitenden Dateien physisch abgelegt sind – zwei unterschiedliche Szenarien betrachtet werden.

Speichern von Dateien

� Arbeiten mit Dateien auf dem Präsentationsserver Um mit Dateien auf dem Präsentationsserver arbeiten zu können, wird dem Anwender ab dem Release 4.6 die Klasse CL_GUI_FRONTEND_SERVICES mit verschiedensten Methoden zur Verfügung gestellt. Für vorhergehende Releases können die (mittlerweile veralteten) Funkti-onsbausteine GUI_DOWNLOAD und GUI_UPLOAD genutzt werden.

� Arbeiten mit Dateien auf dem Applikationsserver In ABAP wird eine Vielzahl von Anweisungen bereitgestellt, mit denen Dateien auf dem Applikationsserver bearbeitet werden können. Die folgenden Abschnitte beschreiben, wie Sie Daten anstatt in der Daten-bank in Dateien speichern bzw. wieder daraus laden können.

Abbildung 5.1 R/3-Systemarchitektur

Page 10: Abap Best Practices - Sap Press

Kommunikation mit der Außenwelt276

Dieser Abschnitt beschäftigt sich mit der Verwaltung von Dateien auf dem Applikationsserver. Die nutzbaren Sprachelemente von ABAP finden Sie in Tabelle 5.1.

5.1.1 Interne Tabelle auf dem Applikationsserver speichern und einlesen

AufgabenstellungIn diesem Abschnitt wird eine interne Tabelle in einer Datei auf dem Applikationsserver gespeichert und anschließend wieder eingelesen. Dabei werden sowohl die Ausgabe als auch die Eingabe in eigenen Rou-tinen realisiert, da es sich hierbei um modularisierbare und wiederver-wendbare Programmeinheiten handelt.

Vorgehensweise� Geben Sie das Programm wie in Listing 5.1 dargestellt ein und führen

Sie es aus.

� Voraussetzung für eine korrekte Funktionsweise ist ein Applikations-server, der mit dem Betriebssystem Windows arbeitet. Nutzen Sie ein anderes Betriebssystem (beispielsweise UNIX) für den Applikationsser-ver, so müssen Sie die Zeile

s_filename TYPE STRING VALUE 'C:\beispiel001.txt'.

Befehl Bedeutung

OPEN DATASET Öffnen einer Datei zum Lesen bzw. zum Schreiben von Daten. Es können sowohl Textdateien als auch Binärdateien behandelt werden.

CLOSE DATASET Schließen einer Datei

TRANSFER Schreiben eines Datenobjektes in eine Datei

READ DATASET Lesen eines Datenobjektes aus einer Datei

GET DATASET Abfragen von Eigenschaften wie Dateiattribute bzw. Cursor-position einer bereits geöffneten Datei

SET DATASET Ändern von Eigenschaften wie Dateiattribute bzw. Cursorposi-tion einer bereits geöffneten Datei

DELETE DATASET Löschen einer Datei auf dem Applikationsserver

Tabelle 5.1 Sprachelemente von ABAP für die Verwaltung von Daten auf dem Applikationsserver

Page 11: Abap Best Practices - Sap Press

277Kommunikation mit dem Applikationsserver

derart anpassen, dass ein für das genutzte Betriebssystem gültiger Dateiname eingetragen ist.

In jedem Fall gilt es sicherzustellen, dass es sich bei dem angegebenen Dateinamen um eine zugreifbare und beschreibbare Datei handelt.

Codebeispiel

*&------------------------------------------------* *& Report Z_FILE_01 * *&------------------------------------------------* REPORT Z_FILE_01. TYPES: BEGIN OF t_line, col_1 TYPE I, col_2(10) TYPE C, END OF t_line, t_tab TYPE TABLE OF t_line. DATA: n_cnt TYPE I VALUE 0, s_cnt(5) TYPE C, str_line TYPE t_line, tab_records TYPE t_tab, s_filename TYPE STRING VALUE 'C:\beispiel001.txt'. FIELD-SYMBOLS <fs> TYPE t_line. START-OF-SELECTION. * interne Tabelle fuellen DO 10 TIMES. n_cnt = n_cnt + 1. str_line-col_1 = n_cnt. s_cnt = n_cnt. CONCATENATE 'Zeile ' s_cnt INTO str_line-col_2. APPEND str_line TO tab_records. ENDDO.

Page 12: Abap Best Practices - Sap Press

Kommunikation mit der Außenwelt278

* Schreiben der Tabelle in eine Datei PERFORM table_to_file USING tab_records s_filename. * Lesen der Datei in eine Tabelle PERFORM file_to_table USING tab_records s_filename. * Ausgabe der Tabelle LOOP AT tab_records ASSIGNING <fs>. WRITE: / <fs>-col_1, <fs>-col_2. ENDLOOP. *&--------------------------------* *& FORMS *&--------------------------------* FORM table_to_file USING tab_records TYPE t_tab s_filename TYPE STRING. FIELD-SYMBOLS <fs> TYPE ANY. * Datei oeffnen OPEN DATASET s_filename FOR OUTPUT IN BINARY MODE. * Tabelle in die Datei schreiben LOOP AT tab_records ASSIGNING <fs>. TRANSFER <fs> TO s_filename. ENDLOOP. * Datei schliessen CLOSE DATASET s_filename. ENDFORM.

Page 13: Abap Best Practices - Sap Press

279Kommunikation mit dem Applikationsserver

FORM file_to_table USING tab_records TYPE t_tab s_filename TYPE STRING. DATA: str_rec LIKE LINE OF tab_records. CLEAR tab_records. OPEN DATASET s_filename FOR INPUT IN BINARY MODE. DO. READ DATASET s_filename INTO str_rec. IF SY-SUBRC <> 0. EXIT. ENDIF. APPEND str_rec TO tab_records. ENDDO. CLOSE DATASET s_filename. ENDFORM.

Listing 5.1 Dateien auf dem Applikationsserver

Erläuterung zur LösungDas in Listing 5.1 abgebildete Programm enthält vier durch entspre-chende Kommentierung abgetrennte Programmteile:

� Initialisierung einer internen Tabelle

� Ausgabe der internen Tabelle über die Routine table_to_file in eine Datei

� Einlesen der geschriebenen Datei in eine interne Tabelle, wobei die Routine file_to_table genutzt wird

� Ausgabe der internen Tabelle

In Anbetracht dessen, dass die wesentlichen Schritte die Ein- bzw. Aus-gabe von Daten in bzw. aus Dateien ist, werden wir nur die Routinen file_to_table und table_to_file detailliert beschreiben.

Öffnen einer DateiDie Ausgabeanweisungen sind im Unterprogramm table_to_filezusammengefasst. Als Parameter werden dabei nur die zu speichernde interne Tabelle und ein auf dem Applikationsserver gültiger Dateiname übergeben. Im ersten Schritt wird die Datei über die Anweisung

Page 14: Abap Best Practices - Sap Press

Kommunikation mit der Außenwelt280

OPEN DATASET s_filename FOR OUTPUT IN BINARY MODE.

geöffnet. In unserer Lösung haben wir uns für eine Binärdatei entschie-den, da keine Notwendigkeit der Weiterverarbeitung besteht. Möchten Sie aber beispielsweise die physische Datei auf dem Applikationsserver weiter bearbeiten, können Sie mit der Option TEXT MODE eine unter dem Betriebssystem des Applikationsservers lesbare Datei generieren lassen.

Im Anschluss traversieren wir die übergebene interne Tabelle und schrei-ben jede Zeile mit

TRANSFER <fs> TO s_filename.

in die Datei. Adressiert wird die Ausgabedatei über den Dateinamen, wobei bei dieser Angabe ein textuell identischer Name übergeben wer-den muss. Würde beim Schreiben der Datensätze die Ausgabedatei bei-spielsweise mit

'C:\<Unterverzeichnis>\..\beispiel001.txt'

angesprochen werden, wäre eine Exception die Folge.

Flache Strukturen1 können dabei mit einer TRANSFER-Anweisung ausge-geben werden, eine komponentenweise Übertragung in die Datei ist nicht notwendig. Über das Sprachelement

CLOSE DATASET

wird die Ausgabedatei anschließend wieder geschlossen.

Lesen aus einer Datei

Das zweite Unterprogramm file_to_table liest den Inhalt einer Datei und schreibt diesen in eine interne Tabelle. Auch hier werden als Parame-ter der Name der Datei sowie eine interne Tabelle für die Aufnahme der Daten genutzt. Da wir die über das Unterprogramm table_to_filegespeicherte Datei erneut einlesen möchten, müssen wir die Datei auch wieder als Binärdatei (Parameter IN BINARY MODE) öffnen2.

Das Einlesen der einzelnen Zeilen der internen Tabelle erfolgt mittels der Anweisung

1 Allerdings ist es nicht möglich, auch interne Tabellen mit nur einer TRANSFER-Anweisung auszugeben. Daher müssen wir den Weg über die zeilenweise Ausgabe beschreiten.

2 Es werden keine Typinformationen der geschriebenen Datensätze gespeichert. Vor diesem Hintergrund ist es natürlich möglich, Dateien in einem anderen Format ein-zulesen als sie geschrieben wurden. So können z. B. Datensätze als Zeichenketten (Typ C oder STRING) herausgeschrieben und anschließend in Hexadezimal-Darstel-lung (Typ X) wieder eingelesen werden.

Page 15: Abap Best Practices - Sap Press

281Kommunikation mit dem Applikationsserver

READ DATASET s_filename INTO str_rec.

Wir übergeben dabei ein Datenobjekt, das die gleiche Struktur besitzt wie bei der Ausgabe. Über die Auswertung des Ergebniswertes sy-subrc– der Rückgabewert 4 signalisiert das Ende der Datei – kann dann festge-stellt werden, wann der Inhalt der Datei vollständig ausgelesen wurde.

Erweiterung zur LösungDie Schwachstelle der in Listing 5.1 vorgestellten Lösung liegt in der Abhängigkeit vom jeweils genutzten Betriebssystem für den Applikations-server. Mitunter kann es erforderlich sein, plattformunabhängige und damit portable Lösungen zu entwickeln. Hierfür wird Ihnen von SAP das Konzept der logischen Datei- und Pfadnamen an die Hand gegeben. Im ABAP-Programm wird dabei mit einem logischen, plattformunabhängi-gen Dateinamen gearbeitet.

Logische Dateinamen

Um nun diesen logischen Dateinamen zur Laufzeit auf den betriebssyste-mabhängigen, physischen Dateipfad abbilden zu können, wird Ihnen der Funktionsbaustein FILE_GET_NAME zur Verfügung gestellt. Dieser liefert zu einem logischen Dateinamen den korrespondierenden physischen Dateinamen. Die ermittelte vollständige Dateibezeichnung setzt sich aus dem gültigen3 physischen Dateipfad und dem physischem Dateinamenzusammen, wobei Platzhalter, die erst zur Laufzeit aufgelöst werden, ein-gesetzt werden können. Eine ausführliche Beschreibung können Sie der Funktionsbaustein-Dokumentation von FILE_GET_NAME entnehmen.

Die vollständige Konfiguration und Pflege von plattformunabhängigen Dateinamen können Sie mandantenübergreifend mit der Transaktion FILE durchführen.

5.1.2 Kommandos auf dem Applikationsserver ausführen

AufgabenstellungArbeiten mit dem Applikations-server

In dieser Aufgabe soll der Inhalt eines Verzeichnisses auf dem Applikati-onsserver ausgelesen und in einer internen Tabelle abgelegt werden. Als Zwischenschritt soll das Ergebnis in einer Datei auf dem Applikationsser-ver gespeichert werden.

3 Die Gültigkeit bezieht sich auf das zur Laufzeit aktuelle Betriebssystem des Applika-tionsservers.

Page 16: Abap Best Practices - Sap Press

Kommunikation mit der Außenwelt282

Vorgehensweise� Geben Sie das in Listing 5.2 dargestellte Programm ein und führen Sie

es anschließend aus.

� Der abgebildete Programmcode basiert auf der Annahme, dass es sich beim Betriebssystem des Applikationsservers um ein Windows-System handelt. Wenn Sie eine Plattform auf Unix-Basis für Ihren Applikati-onsserver nutzen, müssen Sie die Zeile

'c:\winnt\system32\cmd.exe /c dir /w c:\*.*'

durch das entsprechende Kommando (typischerweise /bin/ls) anpas-sen. Außerdem müssen Sie den verwendeten Dateinamen betriebssys-temabhängig gestalten. Hierzu muss die Programmzeile

s_filename TYPE STRING VALUE 'C:\BEISPIEL03.txt'

derart angepasst werden, dass eine gültige und zugreifbare Datei refe-renziert wird.

� Der vorgestellte Lösungsansatz in Listing 5.2 funktioniert nur bei Applikationsservern, die mit dem Betriebssystem Windows bzw. Unix arbeiten.

Codebeispiel

*&-------------------------------------------------* *& Report Z_FILE_02 * *&-------------------------------------------------* REPORT Z_FILE_02. DATA: str_line TYPE STRING, tab_lines TYPE TABLE OF STRING, s_filename TYPE STRING VALUE 'C:\BEISPIEL03.txt'. START-OF-SELECTION. * Kommando auf dem Applikationsserver ausfuehren OPEN DATASET s_filename FOR OUTPUT FILTER 'c:\winnt\system32\cmd.exe /c dir /w c:\*.*'

Page 17: Abap Best Practices - Sap Press

283Kommunikation mit dem Applikationsserver

IN TEXT MODE ENCODING DEFAULT. * Datei schliessen CLOSE DATASET s_filename. * physische Datei oeffnen OPEN DATASET s_filename FOR INPUT IN TEXT MODE ENCODING DEFAULT. * Inhalt lesen und speichern DO. READ DATASET s_filename INTO str_line. IF SY-SUBRC <> 0. EXIT. ENDIF. APPEND str_line TO tab_lines. WRITE / str_line. ENDDO.

Listing 5.2 Verzeichnis auf einem Windows-basierten Applikationsserver auslesen

Erläuterung zur LösungUnsere in Listing 5.2 vorgestellte Lösung arbeitet in zwei Phasen:

� In dem ersten Schritt speichern wir den Inhalt des gewünschten Ver-zeichnisses in einer Datei auf dem Applikationsserver.

� Anschließend wird im folgenden Programmblock diese Datei eingele-sen und in eine interne Tabelle kopiert.

Ausführen von Betriebssystem-kommandos

Für das Ermitteln des Inhalts eines Verzeichnisses auf dem Applikations-server nutzen wir das Sprachelement OPEN DATASET mit dem Zusatz FIL-TER. Diese Option erlaubt es, ein Betriebssystem-Kommando an den Applikationsserver zu übertragen und dieses dann dort auszuführen. In Abhängigkeit davon, ob die angesprochene Datei mit dem Zusatz FOR INPUT bzw. FOR OUTPUT geöffnet wird, wird entweder der Inhalt der Datei als Eingabe für das Kommando genutzt bzw. die Ausgabe des Komman-dos in die Datei geschrieben. Hintergrund für diese Funktionsweise ist eine Redirektion der Eingabe (stdin) bzw. der Ausgabe (stdout). Die fol-

Page 18: Abap Best Practices - Sap Press

Kommunikation mit der Außenwelt284

gende Übersicht verdeutlicht dieses Verhalten an Hand des Kommandos sort.exe (bzw. das Kommando sort bei Unix-Betriebssystemen).

� OPEN DATASET sortbsp.txt FOR INPUT FILTER 'sort.exe'...

Das entsprechende Betriebssystemkommando, das letztendlich ausge-führt wird, ist

sort.exe < sortbsp.txt

Das heißt, es wird die Datei gelesen und ihr Inhalt sortiert.

� OPEN DATASET sortbsp.txt FOR OUTPUT FILTER 'sort.exe'...

Bei diesem Aufruf4 lautet das korrespondierende Betriebssystemkom-mando

sort.exe > sortbsp.txt

In diesem Fall wird das Ergebnis des sort-Befehls in die Datei sortbsp.txt geschrieben.

Enthält der voll qualifizierte Pfad des Kommandos Leerzeichen, dann muss der Befehl in doppelte Anführungsstriche gesetzt werden, zum Bei-spiel wie folgt:

... FILTER '"C:\Program Files\...\excel.exe"'

Die Einschränkung dieses Lösungsweges liegt im Betriebssystem begrün-det. Zum einen müssen Sie über Kenntnisse hinsichtlich des verwendeten Betriebssystems Ihres Applikationsservers verfügen5, um ein korrektes Betriebssystemkommando angeben zu können. Des Weiteren arbeitet die FILTER-Option nur auf den Betriebssystemen Windows und Unix.

5.1.3 Externe Kommandos ausführen

AufgabenstellungKommandos auf

dem Applikations-server ausführen

Die im vorangehenden Abschnitt beschriebene Lösung erlaubt es Ihnen, Kommandos auf dem Applikationsserver auszuführen und dabei eine Redirektion der Eingabe bzw. Ausgabe in eine Datei vorzunehmen. Aller-dings ist dieses Vorgehen auf Windows- und Unix-basierte Betriebs-systeme beschränkt.

In der an dieser Stelle beschriebenen Aufgabenstellung soll von der kon-kreten Betriebssystemplattform abstrahiert werden und eine allgemeine

4 Dieser Aufruf dient nur der Verdeutlichung und macht in dieser Form wenig Sinn, da die Eingabe über die Konsole erfolgen müsste.

5 Es besteht die Möglichkeit, über das Systemfeld sy-opsys dynamisch, nämlich zur Laufzeit des ABAP-Programms, das genutzte Betriebssystem zu bestimmen.

Page 19: Abap Best Practices - Sap Press

285Kommunikation mit dem Applikationsserver

Lösung zum Ausführen von Betriebssystembefehlen auf dem Applikati-onsserver entwickelt werden.

Vorgehensweise� Um betriebssystemunabhängige Kommandos benutzen zu können,

bedienen wir uns des Konzepts der externen Betriebssystemkomman-dos. Diese können über Transaktion SM69 verwaltet werden.

Um das in Listing 5.3 verwendete Betriebssystemkommando einzu-richten, führen Sie die nachfolgend beschriebenen Schritte durch:

� Gehen Sie in das Menü Anzeigen externer Betriebssystemkom-mandos (Transaktion SM69).

� Dort wählen Sie über das Menü Bearbeiten den Menüpunkt Anle-gen bzw. F6. Gegebenenfalls muss zuvor in den Änderungsmodus (Menü Kommandoliste • Anzeige <-> Ändern bzw. F5) umgeschal-tet werden.

� Bei der jetzt erscheinenden Bildschirmmaske füllen Sie die Felder wie Abbildung 5.2 gezeigt aus und speichern Ihren Eintrag. Das Feld Parameter für Betriebssystem-Kommando bezieht sich in diesem Zusammenhang auf das Betriebssystemkommando selbst. Mitunter kann es nämlich erforderlich sein, als Kommando die zu nutzende Shell (zum Beispiel cmd bei Windows bzw. sh oder Derivate im Unix-Umfeld) und über die Parameter den erforderlichen Shell-Befehl anzugeben. Die Steuerung der Parameter für den Betriebs-systembefehl werden wir später dynamisch über das Programm vor-nehmen.

Sie können übrigens, um Ihre Konfiguration zu verifizieren, externe Betriebssystemkommandos auch testen. Nutzen Sie hierzu Transaktion SM49 und wählen Sie dort die gewünschte Konfiguration aus. In der erscheinenden Dialogmaske müssen Sie die zusätzlichen Parameter – in unserem Beispiel den Namen des Rechners, den Sie über das ping-Kommando ansprechen möchten – eingeben und erhalten als Ergebnis die Ausgaben des Kommandos.

� Damit das Betriebssystemkommando auch ausgeführt werden kann, wird das Programm sapxpg bzw. sapxpg.exe6 benötigt.

6 Dieses wird beispielsweise in der MiniWAS-Version nicht mitgeliefert und muss daher nachinstalliert werden. Es kann als Servicedatei vom SAP Service Marketplace heruntergeladen und über sapcar.exe in das MiniWAS-Verzeichnis eingespielt wer-den. Sapcar.exe ist das Kompressions- bzw. Dekompressionsprogramm der SAP, das ähnlich wie zip, tar usw. funktioniert.

Page 20: Abap Best Practices - Sap Press

Kommunikation mit der Außenwelt286

� Die Programmzeile

s_parameters LIKE sxpgcolist-parameters VALUE 'knb008'

muss so angepasst werden, dass ein existenter und erreichbarer Name referenziert wird.

� Geben Sie das in Listing 5.3 abgebildete Programm ein und führen Sie es anschließend aus.

Abbildung 5.2 Dialogmaske zum Anlegen eines externen Betriebssystemkommandos

Codebeispiel

*&-------------------------------------------------* *& Report Z_FILE_03 * *&-------------------------------------------------* REPORT Z_FILE_03. DATA: s_command LIKE sxpgcolist-name VALUE 'ZWINPING', s_parameters LIKE sxpgcolist-parameters VALUE 'knb008', c_status LIKE extcmdexex-status, n_exitcode LIKE extcmdexex-exitcode, tab_btcxpm LIKE TABLE OF btcxpm. FIELD-SYMBOLS <fs> LIKE btcxpm.

Page 21: Abap Best Practices - Sap Press

287Kommunikation mit dem Applikationsserver

START-OF-SELECTION. REFRESH tab_btcxpm. CLEAR tab_btcxpm. * Ausfuehren des Programms ZWINPING CALL FUNCTION 'SXPG_CALL_SYSTEM' EXPORTING COMMANDNAME = s_command ADDITIONAL_PARAMETERS = s_parameters IMPORTING STATUS = c_status EXITCODE = n_exitcode TABLES EXEC_PROTOCOL = tab_btcxpm EXCEPTIONS NO_PERMISSION = 1 COMMAND_NOT_FOUND = 2 PARAMETERS_TOO_LONG = 3 SECURITY_RISK = 4 WRONG_CHECK_CALL_INTERFACE = 5 PROGRAM_START_ERROR = 6 PROGRAM_TERMINATION_ERROR = 7 X_ERROR = 8 PARAMETER_EXPECTED = 9 TOO_MANY_PARAMETERS = 10 ILLEGAL_COMMAND = 11 OTHERS = 12. * Ausgabe des Ergebnisses IF sy-subrc <> 0. WRITE: / 'Fehler bei der Ausfuehrung', sy-subrc. ELSE. WRITE: / 'Befehl ist erfolgreich ausgefuehrt.', 'Ergebnis ist:'. WRITE: / 'Status: ', c_status, ' Exitcode: ', n_exitcode. LOOP AT tab_btcxpm ASSIGNING <fs>. WRITE: / <fs>-MESSAGE.

Page 22: Abap Best Practices - Sap Press

Kommunikation mit der Außenwelt288

ENDLOOP. ENDIF.

Listing 5.3 Ausführen eines Kommandos auf dem Applikationsserver über den Funkti-onsbaustein SXPG_CALL_SYSTEM

Erläuterung zur LösungExterne

Kommandos ausführen

Zentraler Codeabschnitt des in Listing 5.3 dargestellten ABAP-Programms ist der Aufruf CALL FUNCTION 'SXPG_CALL_SYSTEM'. Der Funktionsbau-stein kapselt alle erforderlichen Schritte zum Ausführen eines Betriebssys-tem-Kommandos. Als Eingabeparameter werden die folgenden Parame-ter erwartet:

� COMMANDNAME Dieser Parameter enthält Namen des externen Betriebssystemkom-mandos, so wie zuvor in Transaktion SM69 konfiguriert.

� ADDITIONAL_PARAMETERS Über diesen Parameter werden die erforderlichen Argumente des Betriebssystem-Kommandos übergeben. Es handelt sich hierbei um eine einzige Zeichenkette, die alle Argumente entsprechend der jewei-ligen Syntax durch Leerzeichen getrennt umfasst.

Da der Funktionsbaustein SXPG_CALL_SYSTEM remotefähig ist, können externe Betriebssystemkommandos auf jedem Rechner, auf dem ein SAP-System läuft, gestartet werden – sofern entsprechende Berechtigungen erteilt wurden.

Der Algorithmus, mit dessen Hilfe aus dem Namen des Betriebssystem-kommandos der reale, physische Befehl bestimmt wird, verfährt nach den folgenden Schritten:

� Wenn ein Betriebssystemkommando mit dem gleichen Betriebssys-temtyp wie im Systemfeld sy-opsys existiert, wird diese Definition für die Ausführung des Kommandos genutzt.

� Wird hierüber keine Definition gefunden, so wird die Recherche auf die Syntaxgruppe7 des Betriebssystemtyps wie im Systemfeld sy-opsys ausgedehnt.

� Bleibt auch diese Suche erfolglos, wird die Definition des Betriebssys-temkommandos gesucht, das den Betriebssystemtyp ANYOS8 trägt.

7 Über die Syntaxgruppe werden jeweils die Betriebssysteme gruppiert, die für Datei-namen, Befehle etc. die gleiche Syntax nutzen.

8 Definitionen mit dem Betriebssystemtyp ANYOS beschreiben Betriebssystemkom-mandos, die in allen von SAP unterstützten Betriebssystemen ausführbar sind.

Page 23: Abap Best Practices - Sap Press

289Kommunikation mit dem Applikationsserver

� Erst wenn alle vorherigen Schritte keine Definition finden, wird die Ausnahme COMMAND_NOT_FOUND ausgelöst.

Auswertung der Rückgabewerte

Ist die physische Befehlszeile ermittelt, wird der Befehl ausgeführt9. Des-sen Ergebnis wird über zwei Rückgabeparameter sowie eine Tabelle über-mittelt:

� STATUS Dieser Wert liefert den Erfolg der Ausführung des externen Betriebs-systemkommandos – das Ergebnis 'O' zeigt das erfolgreiche Starten und Ausführen des Befehls an, über das Ergebnis 'E' wird mitgeteilt, dass ein Fehlerfall aufgetreten ist.

� EXITCODE Hierbei handelt es sich um einen numerischen Wert, der den Return-code des jeweiligen Kommandos anzeigt.

� EXEC_PROTOCOL Diese interne Tabelle gibt die Ausgaben der Kanäle stdout und stderrdes externen Betriebssystemkommandos an das aufrufende Programm zurück.

In Abbildung 5.3 finden Sie die Ausgabe unseres Betriebssystemkomman-dos ZWINPING. Um die verschiedenen Verhaltensweisen auszutesten, set-zen Sie einfach in der Zeile

s_parameters LIKE sxpgcolist-parameters VALUE 'knb008'

den Wert auf einen Zielrechner, der nicht existent bzw. nicht erreichbar ist.

Erweiterung zur LösungIm Zusammenhang der oben vorgestellten Lösung möchten wir Ihnen einen weiteren Funktionsbaustein namens SXPG_COMMAND_EXECUTE vorstellen, der für das Ausführen externer Betriebssystemkommandos herangezogen werden kann.

9 Zusätzlich erfolgt noch eine Berechtigungsprüfung sowie die Feststellung, ob uner-laubte bzw. »gefährliche« Sonderzeichen enthalten sind; z. B. sind es bei Windows-basierten Betriebssystemen die Zeichen |, &, <, >, ( und ) sowie bei Unix die Zei-chen |, &, ;, ^, \, <, > und `. Zu diesen Details verweisen wir an dieser Stelle auf die Dokumentation der Funktionsbausteine.

Page 24: Abap Best Practices - Sap Press

Kommunikation mit der Außenwelt290

Abbildung 5.3 Bildschirmausgabe des externen Kommandos ZWINPING

Auch mit diesem Funktionsbaustein wird der Benutzer einer Berechti-gungsprüfung für ein bestimmtes externes Betriebssystemkommando unterzogen und bei positiven Ergebnis wird dieses Kommando anschlie-ßend ausgeführt. Neben diversen Einstellmöglichkeiten bietet Ihnen die-ser Funktionsbaustein allerdings zusätzlich die Möglichkeit, das Ziel-system anzugeben. Damit entfällt die Einschränkung auf den Applikationsserver des zugrunde liegenden SAP-Systems.

5.2 RFC

RFC steht für Remote Function Call und bezeichnet letztendlich die Mög-lichkeit, eine Funktion aufrufen zu können, die unter einem anderen Sys-tem ausgeführt wird. Für die SAP-Welt bedeutet diese Fähigkeit, Funkti-onen von anderen SAP-Systemen und auch Nicht-SAP-Systemen nutzen zu können.

Entfernte Funktionen

aufrufen

Für beide Fälle werden von SAP über RFC entsprechende Schnittstellen geliefert. Während der erste Fall, nämlich die Einbindung von Funktionen anderer SAP-Systeme, derzeit durch das Sprachkonstrukt

CALL FUNCTION...DESTINATION

abgedeckt wird, werden für die Integration fremder Applikationen von SAP eine Vielzahl von Programmierschnittstellen zur Verfügung gestellt. Die zu integrierende Anwendung kann dabei entweder als Client (Anwendung, die SAP-Funktionen nutzt) oder als Server (Anwendung, die Funktionen für SAP bereitstellt) eingesetzt werden.

Page 25: Abap Best Practices - Sap Press

443Index

Index

AABAP 417ABAP Dictionary 417ABAP Objects 417ABAP Workbench 417ABAP-Editor 417ABAP-Laufzeitumgebung 417ActiveX 336Aggregationsfunktionen 172Aktualparameter 417ALV-Grid-Control 201, 211

Drop-Down-Listenfeld 219Event-Handler 235Filter setzen 232Hotspot 232mehrere Datenquellen 211

Änderungsprotokollierung 177Anweisungsblock 417Anwendungsprogramm 417Applikationsserver 281Applikationsserver 417Attribut 417Ausnahmen

eigene 85Historie 92klassenbasiert 78traditionell 74Überblick 73

BBAPI 417Beispielprogramme 16

CCast 417C-Funktion

RfcAccept 316RfcCall 300RfcCallReceive 300RfcClose 298RfcDispatch 316RfcGetName 318RfcGetStructureInfoFlat 307RfcInstallStructure 305RfcOpen 299

RfcReceive 300RfcSendData 315

CFW 417Class Builder 418Class-ID 335Class-Pool 418Client-Server-Architektur 418Clipboard 242Clipboardfunktionalitäten 240CLSID 334Cluster 418COM-Objekte 334

Aufruf von Methoden 343Erzeugen 343Freigeben 343Word 364

COM-TechnologieExcelintegration 355

Control Framework 49, 201, 203

DDatei- und Verzeichnisoperationen

240Dateinamen 281Datei-Upload/Download 240Datenbank 418Datenbank-Commit 418Datenbank-LUW 418Datenbank-Rollback 418Datenbankschnittstelle 418Datenbankserver 418Datenbanksystem 418Datenbanktabelle 418Datenelement 418Datenkapselung 23Datenobjekt 419Datenobjekts

dynamisch erzeugen 105Datentyp 419Datumsfelder 191

Arbeitstag 195Differenzberechnung 192Kalenderwoche 197Schaltjahre 194

DCL 418

Page 26: Abap Best Practices - Sap Press

Index444

DDL 418Destination 310

SAPFTP 322Dialogmodul 419DML 418Dokumentation 68Domäne 419Drop-Down-Listenfeld 219, 226

Handlemechanismus 224, 231Dynamik 96

Datenobjekt erzeugen 105Feldlisten 101Feldnamen 96Funktionsbausteinaufruf 120Klasseninstanzen erzeugen 126Klauseln 101Methodenaufruf 126Objekte erzeugen 126Performance 156Sortierung 110Strukturkomponenten 108Tabellennamen 98

Dynpro 264Dynpro 419

EElementarer Datentyp 419Entwicklungsrichtlinien 59Ereignisblock 419Ereignisse 45Excel

Objekt-Hierarchie 352Excelmakro 353

FFeld 419Feldkatalog 216

Automatischer Aufbau 216Halbautomatischer Aufbau 217Manueller Aufbau 217

Feldsymbol 419Flache Struktur 419Formalparameter 419Fortschrittsanzeige 262Fremdschlüssel 419FTP 318, 330FTP-Server 319, 324Function Builder 419

Funktionsbausteindynamischer Aufruf 120Freigabe 54globale Schnittstelle 271Parametertabelle 123Wiederverwendung 54

Funktionsbaustein 419Funktionsgruppe 419

Ggenh.exe 293, 301Globale Daten 419GUI Scripting

abmelden 401anmelden 399langsame Netzwerkverbindungen

381Objekthierarchie 376Objektmodell 376Session ermitteln 397Verbindung herstellen 395Voraussetzungen 380

GUI Scriptings 375GUI-Control 202

mehrfacher Einsatz 208GUI-Control 420GUIDs 334GUI-Status 420

HHash-Tabelle 420

IIID 335Include-Programm 420Indextabelle 420Instanz 420Integration

Textverarbeitung Word 363Interface 420Interfacepool 420Interfacereferenz 420Interfaces 40

klassisches ABAP 45Interne Tabelle 420

JJoin 420

Page 27: Abap Best Practices - Sap Press

445Index

KKapselung 420Klasse 420Klassenbibliothek 420Klassenreferenz 420Kommandos ausführen 284Komplexe Datentypen 420Konstante 421Kopfzeile 421Kurzdump 421

LLaufzeitfehler 421LIBID 335Liste 421Listenexport 250Literal 421Literale

Vermeidung 65Logische Datenbank 421Lokale Daten 421LUW 421LVC_T_FCAT 216

MMakro 375Makro 421Mandant 421Mandantenbehandlung 421Mehrfachinstanziierung 24Menu Painter 421Metadaten 421Methode 421Methoden

dynamisch Aufrufen 126Parametertabelle 130

Modularisierung 421Modulpool 421

NNamenskonventionen 60

Formroutinen 64Funktionsbausteine 64Methoden 64Variablen 61

Native SQL 421

OOberklasse 421Object Navigator 421Objekt 421Objekt-ID 378

absolute 380Position extrahieren 412relative 380

Objektreferenz 421OCX-Komponente 366OLE2_OBJECT 339Open SQL 422

PPAI 422Parameter 422Parameterschnittstelle 422PBO 422Polymorphie 134Polymorphie 422Präsentationsserver 422ProgID 335Programme

generieren 140persistente 152transiente 141

Programmierungdynamisch 95generisch 95

Prozedur 422

QQS-Assessment 69

RReferenzvariable 422regedit.exe 339Registry 258, 335

auslesen 258beschreiben 261

Registry-Editor 335regsvr32.exe 339Remote Function Call 290Report 422Repository 422Repository-Objekt 422

Page 28: Abap Best Practices - Sap Press

Index446

RFC API 291Bibliotheken 298Headerdateien 298

RFC_PARAMETER 295RfcDispatch 314RfcEnvironment 299RfcInstallStructure 301RfcListen 317RFC-Server 309, 313RTTI 158Running Object Table 393

SSAP GUI 422sapftp 319SAPFunctionsOCX 367, 372SAPLogonCtrl 367SAP-LUW 422SAPTabFactoryCtrl 367Schlüssel 422Screen Painter 423Screenhandling

kapseln 265Script

Abspielen 384Aufzeichnen 383

Scripting APIfindById 381, 387GuiApplication 376GuiComponent 387GuiConnection 377, 395GuiMainWindow 377GuiSession 377, 387, 398Navigieren 388Objekt-ID 378sendVKey 386, 390

Scripting-Applikationen 391Script-Recorder 383

alternativer 388Selektionsbild 423SQL-Performance 169Standard SQL 423Standarddialoge 240Standardtabelle 423String

einlesen 187zerlegen 186

String 423

Struktur 423Subquery 423sy-abcde 435sy-batch 434sy-binpt 434sy-calld 434sy-callr 437sy-colno 436sy-cpage 437sy-cprog 434sy-cucol 436sy-curow 436sy-datar 436sy-datlo 433sy-datum 433sy-dayst 433sy-dbcnt 435sy-dbname 434sy-dbsys 433sy-dyngr 434sy-dynnr 434sy-fdayw 433sy-fdpos 435sy-host 433sy-index 435sy-langu 433sy-ldbpg 434sy-lilli 437sy-linct 436sy-linno 436sy-linsz 436sy-lisel 437sy-listi 437sy-loopc 436sy-lsind 437sy-macol 437sy-mandt 433sy-marow 437sy-modno 433sy-msgid 437sy-msgno 437sy-msgty 437sy-msgv1...sy-msgv4 437sy-opsys 433sy-pagno 436sy-pfkey 436sy-prdsn 437sy-repid 434

Page 29: Abap Best Practices - Sap Press

447Index

sy-saprl 433sy-scols 436sy-slset 436sy-spono 437sy-srows 436sy-staco 437sy-staro 437sy-stepl 436sy-subrc 435sy-sysid 433sy-tabix 435sy-tcode 434sy-tfill 435sy-timlo 433sy-title 436sy-tleng 435sy-toccu 435sy-tvar0...sy-tvar9 436sy-tzone 434sy-ucomm 436sy-uline 435sy-uname 433sy-uzeit 434sy-vline 435sy-wtitl 436sy-zonlo 434

TTCP/IP-Modell 318Textelement 423Top-Include 423Transaktion 423Transaktionscode 423

UÜbungsdaten 17Unterklasse 423Unterprogramm 423

VVariable 423VBA-Makro 368Verarbeitungsblock 423Verarbeitungslogik 423Vererbung 423View 423virtuelle Keys 390

WWiederverwendbarkeit 30, 34Word

Objekthierarchie 357Word-Makros 365

ZZeichenketten

einfügen 190Zeichenkettenverarbeitung 182