ABAP - Class Runner (Console Application)
Egal ob Applikationen in der Cloud oder ein leichtes Mittel um schnell ein paar Tests zu machen und eine Ausgabe zu erzeugen, eine Console Application wird dich dabei unterstützen.
Inhaltsverzeichnis
Um was geht es bei einer Consolen Applikation und wie kann sie dir beim Entwickeln helfen? Das wollen wir dir heute in dem Artikel etwas näher bringen und dir die Vorteile so einer Applikation zeigen.
Reports im ADT
Du kennst sicherlich auch das Problem, dass du mal schnell etwas probieren möchtest, um einen debugbaren Output zu bekommen. In SE80 würdest du dafür einen Report schreiben und diesen ausführen. Hier hast du sogar noch die Möglichkeit mit einem Selektionsbild noch die Eingaben zu steuern. Mit den ADTs ist dies leider nicht so einfach und stellt dich vor gewisse Herausforderungen.
So wird jedes Mal beim Ausführen eines Reports die SAP GUI geladen, auch wenn vielleicht nicht einmal ein Selektionsbild benötigt wird. Dies kostet Zeit und unnötige Ressourcen, da wir ja eigentlich nur an die Ausgabe wollen. Ebenfalls springt die GUI dann zum internen Debugger in ADT und muss wieder den Status wechseln, wenn wir auch noch die Applikation debuggen wollen.
Class Runner
Zu diesem Zweck führte die SAP den Class Runner ein, um direkt über eine Klasse die Verarbeitung zu starten und trotzdem noch einen Output zu generieren. Gelöst wird das Ganze über ein globales Interface, dass das System zur Verfügung stellt und wir in unsere Klassen implementieren können. Zu diesem Zweck legen wir eine neue globale Klasse an und können direkt über den ADT Wizard das Interface mit übergeben.
Nach der Implementierung müssen wir nur noch die Main-Methode des Interaces ausprägen und können direkt mit der Implementierung beginnen. Der Grundzustand der Klasse sieht dann wie folgt aus:
CLASS zcl_bs_demo_class_runner DEFINITION
PUBLIC
FINAL
CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_bs_demo_class_runner IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
" Implementation
ENDMETHOD.
ENDCLASS.
Wenn wir uns die Methode einmal im Detail anschauen (über F2), dann sehen wir, dass wir noch einen Importparameter zur Verfügung gestellt bekommen. Diese Objekt bietet uns eine Methode zum Schreiben in die Console.
Wenn du eine Consolen Applikation ausführen möchtest, kannst du diese über F9 oder das "Run" Menü machen. Hier hast du auch die Möglichkeit zu sehen, ob das aktuelle Release des Systems die neue Funktion unterstützt.
Beispiel
Dazu haben wir das Beispiel etwas weiter ausgebaut und einige Ausgaben in die Console ausgegeben. Zusätzlich kannst du das Objekt auch in weitere Methoden übergeben, wenn du die Ausgabe dort nutzen willst oder die Hauptmethode einmal zu groß wird.
CLASS zcl_bs_demo_class_runner DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun .
PROTECTED SECTION.
PRIVATE SECTION.
METHODS:
sub_methods_with_output
IMPORTING
io_out TYPE REF TO if_oo_adt_classrun_out.
ENDCLASS.
CLASS zcl_bs_demo_class_runner IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
DATA(ld_text) = `Output with a string`.
out->write( ld_text ).
DATA(ld_integer) = 12.
out->write( ld_integer ).
SELECT *
FROM zdemo_tr_table
INTO TABLE @DATA(lt_table).
out->write( lt_table ).
sub_methods_with_output( out ).
ENDMETHOD.
METHOD sub_methods_with_output.
io_out->write( 'Call from submethod' ).
ENDMETHOD.
ENDCLASS.
Als Ausgabe erhältst du die entsprechenden Texte in der Console (eine View in ADT).
Funktion
Wie funktioniert die Verarbeitung mit der Klasse nun genau? Hierbei schaut das System, ob die aktuelle Klasse auch das Interface IF_OO_ADT_CLASSRUN implementiert, ansonsten wird eine Fehlermeldung ausgegeben. Im nächsten Schritt wird eine Instanz der Klasse erzeugt und die Main Methode aufgerufen. Dann erfolgt die normale Ausführung der Klasse und die Anzeige der Console.
Hinweis: Wenn du einen Konstruktor verwenden möchtest, darf dieser keine Importparameter haben oder diese sollten optional sein, sonst kommt es zu einem Dump beim Ausführen der Klasse.
Reportausgabe
Reports können aktuell auch mit F9 ausgeführt werden und geben alle WRITE Ausgaben in die Console aus. Statt Write kannst du natürlich auch die Klasse CL_DEMO_OUTPUT verwenden, die die Funktion ebenfalls unterstützt. Solange der Report kein Selektionsbild hat, funktioniert diese Variante sehr gut.
Fazit
Mit dem Class Runner stellt die SAP ein starkes Tool zum Testen und Probieren zur Verfügung. Auf der anderen Seite benötigst du das Interface ebenso in der Cloud Umgebung, da es dort keine Reports gibt. Viel Spaß beim Bauen deiner ersten Consolen Applikation.