• Tabellenausdrücke (Table Expressions)
• Tabellenfunktionen (LINES, LINE_INDEX, LINE_EXISTS)
• Ausdrücke und Funktionen (FIND, CHAR_OFF, COUNT, CONDENSE, ESCAPE, SUBSTRING u.w.)
• Inline-Deklarationen (DATA, FIELD-SYMBOLS)
• Konstruktorausdrücke (NEW, VALUE)
• Iterationsausdrücke (FOR, REDUCE)
• Filteroperator FILTER
• Meshes
• Zuweisungen (CORRESPONDING, CONV)
In den letzten zehn Jahren ist unglaublich viel Bewegung im ABAP-Umfeld. Neue Techniken, wie CDS-Views, UI5, RAP, CAP oder Cloud habe ich noch nicht einmal erwähnt …
Die Herausforderungen für SAP-Entwicklerinnen und -Entwickler sind dementsprechend groß und es stellt sich die Frage, wie man all diese Sprachelemente lernen soll.
In diesem Blogbeitrag möchte ich Ihnen zeigen, wie Voraussetzungen für Entwickelnde im eigenen SAP-System geschaffen werden, sodass sich diese nach und nach und im eigenen Tempo weiterbilden können.
1. Eigene Schulungsplatform aufbauen
Das Lernen von neuen Sprachelementen erweist sich mitunter als recht schwierig, da erstens Zeit und zweitens konkrete Anwendungsfälle fehlen. Zusätzlich müssen Entwickelnde erkennen, wann sich welches Sprachelement sinnvoll einsetzen lässt.
Eine Idee ist, dass Sie kleine Schulungsaufgaben vorgeben und diese von Entwickelnden lösen lassen. Damit Sie diese nicht kontrollieren müssen, bietet es sich an, die Ergebnisse der Aufgaben automatisiert durch Unit-Tests prüfen zu lassen. Auf diese Weise bekommen die Lernenden schnell und direkt eine Rückmeldung zu ihren Bemühungen.
Meine Idee ist die Folgende:
• Sie erstellen ein Interface mit Übungsaufgaben. Die Aufgabenstellung können Sie mit Hilfe von ABAPdoc erstellen.
• Sie erstellen eine globale Testklasse, in der Sie die Ergebnisse der Übungsmethoden mit Hilfe von Unit-Tests überprüfen.
• Die Lernenden erstellen eine Klasse (mit dem eigenen Namenskürzel), in der sie das Interface mit den Übungsaufgaben implementieren und die Aufgaben mit entsprechendem Coding lösen.
• In der Klasse wird eine Testklasse erstellt, die von der globalen Testklasse erbt. Auf diese Weise werden die Unit-Tests für die Klasse ausgeführt.
Die Aufgaben können nach und nach erweitert und verfeinert werden. Für verschiedene Bereiche können Sie unterschiedliche Klassen mit entsprechenden Aufgaben definieren.
1.1 Interface mit Übungsaufgaben erstellen
1.2 Klasse mit Musterlösungen erstellen
Sie müssen eine Klasse erstellen, die das Interface mit den Übungsmethoden implementiert. Diese benötigen Sie, um sicherzugehen, dass die globale Master-Testklasse korrekt funktioniert.
1.3 Test-Master erstellen
Erstellen Sie eine globale Testklasse, die Methoden mit entsprechend sinnvollen Unit-Tests enthält.
Definition der Klasse.
Die Definition der Test-Masterklasse enthält Testmethoden. Diese müssen in der PROTECTED SECTION untergebracht werden, um die Methoden an die lokale Testklasse der Übungsklasse zu vererben. In der Methode SETUP wird eine Instanz der zu testenden Klasse erzeugt. Hierfür wird die bereits erstellte Klasse mit den Musteraufgaben benötigt. Die Instanzvariable CUT (kurz für „Code Under Test“) enthält die Referenz auf die Musteraufgabenklasse.
1.3.1 Implementierung der Klasse
In der Implementierung der Test-Masterklasse werden die Werte, die die Musterlösung erzeugt, geprüft. Dies geschieht in der Regel mit Hilfe der Methode CL_ABAP_UNIT=>ASSERT_EQUALS.
Je komplizierter die Aufgaben sind, desto umfangreicher müssen die Unit-Tests sein, um die Richtigkeit der Ergebnisse sicherzustellen.
1.4 Unit-Tests „scharf schalten“
Normalerweise werden Unit-Tests in dem dafür vorgesehenen Bereich der Klasse „Test classes“ mit lokalen Testklassen erstellt. Wir gehen jetzt leicht anders vor und erstellen nur den Bereich der Testklasse, der nicht von der Master-Testklasse abgedeckt wird:
• Definition der lokalen Testklasse mit Vererbung von der Master-Testklasse
• Definition der Instanzvariablen CUT mit der aktuellen Klasse mit den Musterlösungen
• Initialisierung der Instanzvariablen CUT
1.5 Was müssen Übende tun?
Jeder, der sich an den Übungen beteiligen möchte, geht so vor, wie in „Interface mit Übungsaufgaben erstellen“ und „Unit-Tests scharf schalten“ beschrieben. Der Name der Klasse sollte einerseits den Übungsbereich“ (in diesem Beispiel VALUE) enthalten, als auch das eigene Namenskürzel. Auf diese Weise haben alle Teilnehmenden einen eigenen Übungsbereich.
Zusätzlich haben alle ihre eigene Musterlösung, auf die sie bei Bedarf zurückgreifen können.
Mit etwas mehr Aufwand könnten die Übungsklassen automatisch mit Hilfe des Funktionsbausteins SEO_CLASS_CREATE_COMPLETE angelegt werden. Die Übenden müssten dann nur die zu kopierende Klasse auswählen und ihr Namenskürzel angeben. Den Rest könnte das Programm erledigen.
2. Sourcecode
Der Sourcecode für einige Beispiele kann auf der Inwerken-Github-Seite mit Hilfe von abapGit installiert werden.
Fragen? Einfach schreiben an sapentwicklung@inwerken.de .