Andreas Blumenthal, Horst Keller ABAP - Fortgeschrittene ...

8
Andreas Blumenthal, Horst Keller ABAP - Fortgeschrittene Techniken und Tools Galileo Press

Transcript of Andreas Blumenthal, Horst Keller ABAP - Fortgeschrittene ...

Page 1: Andreas Blumenthal, Horst Keller ABAP - Fortgeschrittene ...

Andreas Blumenthal, Horst Keller

ABAP - Fortgeschrittene Techniken und Tools

Galileo Press

Page 2: Andreas Blumenthal, Horst Keller ABAP - Fortgeschrittene ...

Inhalt

Vorwort 13

1 Fallen bei grundlegenden ABAP-Operationen vermeiden 17

1.1 Falle Nr. 1: Durchführung arithmetischer Operationen in ABAP im Gegensatz zu C, C++ und Java 18

1.2 Falle Nr. 2: Ambivalentes Verhalten von Festpunkt- und Gleitpunktarithmetik des ABAP-Typs p 20

1.3 Falle Nr. 3: Falsches Runden in Feldern des ABAP-Typs f 23

1.4 Falle Nr. 4: Fehler bei der Arbeit mit Zahlenliteralen 27

1.5 Falle Nr. 5: Überflüssige Konvertierungen bei der Verwendung von Zeichenliteralen mit Zahlenwerten 29

1.6 Falle Nr. 6: Irrtümliche Verwendung von Zahlenliteralen statt Zeichenliteralen 31

1.7 Falle Nr. 7: Falscher Gebrauch von In-place-Datendeklarationen für Initialisierungen 33

1.8 Falle Nr. 8: Deklaration von Daten im falschen Kontext 36

1.9 Falle Nr. 9: Verwendung flacher Strukturen mit numerischen Komponenten als Textfelder 39

1.10 Falle Nr. 10: Verwendung flacher Strukturen mit numerischen Komponenten in anonymen Containern 42

1.11 Fazit 46

2 Dynamische und generische Programmierung 47

2.1 Konzepte und Vorteile der dynamischen Programmierung 48

2.1.1 Eine klassische statische Prozedur 49 2.1.2 Eine sowohl statische als auch dynamische Prozedur 49 2.1.3 Eine dynamische Prozedur 50 2.1.4 Vor- und Nachteile der dynamischen Programmierung 50

2.2 Generische Typen 52

2.2.1 Datentypen und Objekttypen 53 2.2.2 Komplexe Datentypen und Referenztypen 54 2.2.3 Generische Typen im Überblick 55

Inhalt 5

Page 3: Andreas Blumenthal, Horst Keller ABAP - Fortgeschrittene ...

2.3 Dynamische Typen 57

2.3.1 Interne Tabellen 57

2.3.2 Strings 62

2.4 Feldsymbole 65

2.5 Referenzen 69

2.6 Dynamische Token-Angabe 76

2.7 Dynamischer Prozeduraufruf 80

2.8 Run Time Type Services 85

2.9 Programmgenerierung 93 2.9.1 Transiente Programmgenerierung 94 2.9.2 Persistente Programmgenerierung 96

3 Neue Ausnahme indlung in ABAP 99

3.1 Warum ein neues Ausnahmekonzept? 99

3.2 Hauptmerkmale des neuen Ausnahmekonzepts 101

3.3 Ausnahmen auslösen und behandeln 102

3.3.1 Ausnahmen auslösen 102 3.3.2 Ausnahmen abfangen und behandeln 103

3.4 Ausnahmen in Schnittstellen deklarieren 109

3.4.1 Syntax und Semantik der Deklaration 109 3.4.2 Nachteile einer erzwungenen Deklaration 111 3.4.3 Kategorien von Ausnahmen 114 3.4.4 Verletzung einer Prozedurschnittstelle 115 3.4.5 Ausnahmen in Ereignisbehandlern und statischen

Konstruktoren 116

3.5 Ausnahmen definieren 117

3.5.1 Konstruktoren für Ausnahmen 117 3.5.2 Ausnahmetexte 118 3.5.3 Attribute und Methoden von Ausnahmen 121

3.6 Zusammenspiel mit bestehenden Verfahren zur Fehlerbehandlung 122

3.6.1 Klassische Ausnahmen bei Methoden und Funktionsbausteinen 123

3.6.2 Migration von abfangbaren Laufzeitfehlern 123 3.6.3 Nachrichten der Anweisung MESSAGE 125 3.6.4 Einschränkungen 126

3.7 Allgemeine Anwendungsfälle 127

3.7.1 Returncodes vs. Ausnahmen 127 3.7.2 Assertions vs. Ausnahmen 128 3.7.3 Verkettung von Ausnahmen 129 3.7.4 Gemeinsame Verwendung klassenbasierter und

nicht-klassenbasierter Ausnahmen 130 3.7.5 Ausnahmen zu bereits verwendeten Methoden hinzufügen 131

3.8 Fazit 132

Page 4: Andreas Blumenthal, Horst Keller ABAP - Fortgeschrittene ...

4 Dynamisches Open SQL 135

4.1 Allgemeines Konzept 136

4.1.1 Tabellennamen zur Laufzeit angeben 136

4.1.2 Dynamische interne Tabelle 139

4.2 Dynamische WHERE-Klausel 141

4.3 Neue Möglichkeiten mit dynamischem Open SQL 143

4.4 Dynamische SELECT-, GROUP BY- und HAVING-Klauseln 146 4.4.1 Die dynamischen SELECT- und GROUP BY-Klauseln 146

4.4.2 Die dynamische HAVING-Klausel 149

4.5 Ausnahmebehandlung 151

4.6 Änderungsoperationen 153 4.6.1 Verwendung von dynamischen Tabellennamen für

Datenbankaktualisierungen 153 4.6.2 Verwendung dynamischer WHERE- und SET-Klauseln für

Datenbankaktualisierungen 155

4.7 Komplexe dynamische FROM-Klauseln 157

4.8 Dynamische Datentypen für Arbeitsbereiche 162

4.9 Auswirkungen auf die Performance 166

4.10 Fazit 169

5 Persistente Objekte und Transaktionen mit Object Services 171

5.1 Was sind Object Services? 172

5.2 Funktionsweise des Persistenzdienstes 173

5.3 Objektrelationales Mapping zwischen Klassen und Tabellen 175

5.4 Eine persistente Klasse anlegen 176

5.5 Fortgeschrittene Überlegungen für objektrelationales Mapping 181

5.5.1 Verwaltung von Objektreferenzen 181 5.5.2 Behandlung von Vererbung 182

5.6 Mit persistenten Klassen arbeiten 184

5.6.1 Zugriff auf Klassenakteure 184 5.6.2 Lebenszyklus einer Instanz 185 5.6.3 Verwaltung des Lebenszyklus 186 5.6.4 Ein persistentes Objekt erzeugen 188 5.6.5 Ein persistentes Objekt laden 190 5.6.6 Ein persistentes Objekt löschen 192

5.7 Funktionsweise des Transaktionsdienstes 192

5.7.1 Transaktionsinteroperabilität 196

5.8 Tipps für die Arbeit mit Object Services 198

5.9 Fazit 199

Inhalt 7

Page 5: Andreas Blumenthal, Horst Keller ABAP - Fortgeschrittene ...

6 Praktische Einführung in die ABAP-Dateischnittstelle 201

6.1 Grundlegendes zur Ein-und Ausgabe von Dateien 201

6.1.1 Öffnen einer Datei 204 6.1.2 Schließen einer Datei 206 6.1.3 Lesen aus einer Datei 207 6.1.4 Schreiben in eine Datei 208

6.2 Fallen bei der Ein- und Ausgabe von Dateien 208

6.2.1 Probleme impliziter Mechanismen der ABAP-Laufzeit 209 6.2.2 Plattformabhängige Probleme 211 6.2.3 Probleme in Hinblick auf den Öffnungsmodus 211 6.2.4 Probleme bei gleichzeitigem Zugriff mehrerer Benutzer 212 6.2.5 Netzwerkprobleme 213

6.3 Die ABAP-Dateischnittstelle seit Release 6.10 214

6.3.1 Neue Anforderungen durch Unicode 215 6.3.2 Textformaterweiterungen 216 6.3.3 Erweiterte Prüfungen in UC-Programmen 217 6.3.4 Kompatibilitäts- und Umsetzungsprobleme 219

6.4 Weitere neue Merkmale 222

6.4.1 Unterstützung für große Dateien 222 6.4.2 Positionierung des Dateizeigers 222 6.4.3 Festlegen und Ändern von Eigenschaften geöffneter Dateien .... 224 6.4.4 Dateinamen mit Leerzeichen 225

6.5 Fazit 226

7 ABAP und XML - XSLT als Brücke 227

7.1 Hintergründe zu XML und XSLT 229

7.1.1 Warum hat XSLT diese XML-Syntax? 230 7.1.2 XML und XSLT im SAP-System 232

7.2 XML, ABAP und XSLT: Zwei Datenmodelle und eine Brücke 233

7.2.1 Ein XML-Format für ABAP-Datenstrukturen 233 7.2.2 Der Umgang mit externen XML-Formaten 237 7.2.3 Baumtransformation mit XSLT 238

7.3 XSLT im SAP Web Application Server 241

7.3.1 Implementierung von XSLT im SAP Web Application Server 241 7.3.2 Die Pflege von XSLT-Programmen in der ABAP Workbench 243 7.3.3 XSLT-Programme aus ABAP heraus aufrufen 247 7.3.4 ABAP aus XSLT aufrufen und andere SAP XSLT-Erweiterungen .. 249 7.3.5 Dokumentzentrische Anwendungen 252

7.4 Fazit 254

7.5 Beispielprogramme 255

Page 6: Andreas Blumenthal, Horst Keller ABAP - Fortgeschrittene ...

8 ABAP und XML - Seriaiisierung mit dem asXML-Format 265

8.1 Überblick über die ABAP-XML-Serialisierung 266

8.1.1 Die Rolle des ABAP-Datentyps 267 8.1.2 Seriaiisierung aus ABAP aufrufen 268 8.1.3 Einführung in das asXML-Format 270 8.1.4 Seriaiisierung eines Strings 271

8.2 Darstellung von Datenwerten in asXML 272

8.2.1 ABAP-Bindungsnamen und XML-Elementnamen 272 8.2.2 Darstellung elementarer Datentypen 273 8.2.3 Darstellung von Strukturen 277 8.2.4 Darstellung interner Tabellen 278

8.3 Darstellung von Referenzen 279

8.3.1 Herausforderungen bei der Darstellung von Referenzen in asXML 280

8.3.2 Darstellung von Referenzvariablen 281 8.3.3 Darstellung anonymer Datenobjekte 283 8.3.4 Darstellung von Objekten 286

8.4 Darstellung von Werten serialisierbarer Objekte 287

8.4.1 Die Aufteilung von Objektwerten in Objektteile 288 8.4.2 Standarddarstellung eines Objektteils 290 8.4.3 Selbst definierte Darstellung eines Objektteils 293

8.5 Fazit 297

8.6 XML-Namensräume 298

9 Erstellung von BSP- und MVC-basierten Webanwendungen 301

9.1 Überblick 301

9.1.1 Web AS vs. Internet Transaction Server 301 9.1.2 Web AS und Java/J2EE 302

9.2 Einführung in Business Server Pages 304

9.2.1 Web Application Builder 305

9.3 Erstellung einer BSP-Anwendung 307

9.3.1 Anlegen einer neuen BSP-Anwendung 308 9.3.2 Seitenparameter hinzufügen 310 9.3.3 HTML-Tags einfügen 311 9.3.4 Daten und Code in der Seite einbetten 313 9.3.5 Eventhandler hinzufügen 314 9.3.6 Seite fertig stellen 315 9.3.7 Zusätzliche Formatierungen 316

9.4 Verarbeitung von Benutzereingaben 320

9.5 Testen und Debugging 325

Page 7: Andreas Blumenthal, Horst Keller ABAP - Fortgeschrittene ...

9.6 MIME Repository und WebDAV-Zugriff 327

9.6.1 Das MIME Repository 327 9.6.2 Zugriff über WebDAV 330

9.7 BSP-Extensions 331

9.7.1 Wie funktionieren BSP-Extensions? 332 9.7.2 Webanwendung mithilfe von ßSP-Extensions erstellen 334 9.7.3 Einzelheiten zu HTMLB-Extensions 337 9.7.4 Webanwendung mithilfe von BSP-Extensions erweitern 338

9.8 Model View Controller (MVC) 346

9.8.1 BSP-Unterstützungfürdas MVC-Modell 348 9.8.2 Hilfreiche Hinweise für die Verwendung des MVC-Modells 354

9.9 Fazit 355

10 Qualitätsüberprüfung mit dem Code Inspector 357

10.1 Dynamische und statische Tests zur Bestimmung der Programmqualität 358

10.2 Die Prüfumgebung des Code Inspectors 360

10.2.1 Inspektion 362 10.2.2 Prüfvariante 362 10.2.3 Objektmenge 363 10.2.4 Globale und lokale Elemente 364

10.3 Mit dem Code Inspector arbeiten 364

10.3.1 Den Code Inspector für ein Einzelobjekt aufrufen 365 10.3.2 Den Code Inspector für mehrere Objekte aufrufen 366 10.3.3 Top-Down-Methode 379

10.4 Standardprüfungen im Code Inspector 380

10.4.1 Syntaxprüfungen und Programmgenerierung 380 10.4.2 Sicherheitsprüfungen 382 10.4.3 Performance-Prüfungen 386 10.4.4 Suchfunktionen 395 10.4.5 Namenskonventionen (ab Release 6.40) 396 10.4.6 Anweisungsstatistik (ab Release 6.40) 396

10.5 Fazit 397

11 Verbesserte Testabdeckung mit dem Coverage Analyzer 399

11.1 Funktionsweise des Coverage Analyzers 399

11.1.1 Auswirkungen auf die gesamte Systemperformance 402 11.1.2 Nützliche Eigenschaften für das Testen in einer realen

Testumgebung 402

11.2 Inbetriebnahme des Coverage Analyzers 404

Page 8: Andreas Blumenthal, Horst Keller ABAP - Fortgeschrittene ...

11.3 Verwendung des Coverage Analyzers 404

11.3.1 Was ist ein guter Test? 405 11.3.2 Wie wird ein Programm verwendet? 411 11.3.3 Wie weit ist ein Projekt zur Umstellung auf Unicode? 414

11.4 Hilfreiche Hinweise 415

11.5 Fazit 416

Herausgeber und Autoren 417

Index 423

Inhalt 11