This is a test message to test the length of the message box.
Login
Aufbau eines Reports
Erstellt von Software-Heroes

ABAP - Aufbau eines Reports

Wie geht es weiter nach dem virtuellen Ende des Forms? Wie solltest du den Report aufbauen, was ist zu beachten und was gibt es für nützliche Sachen. Mehr dazu in diesem Artikel.

Werbung

Im letzten Artikel haben wir die Möglichkeiten betrachtet, wie wir Klassen in den Report implementieren und somit von den  mittlerweile obsoleten Forms wegkommen. Heute wollen wir mit dir zusammen aufzeigen, was sich sonst noch so bei der Strukturierung ändern lässt, um sauberen und übersichtlichen Code zu generieren.

 

Die Klasse

Bei der Implementierung der Klasse wird man erst einmal vor der Frage stehen, wie soll die Klasse implementiert werden. Willst du sie lokal anlegen oder global? Soll sie statisch sein, mit einer Instanz oder im Singleton Prinzip arbeiten?

Jede dieser Implementierungen hat natürlich eigene Vor- und Nachteile, das sollte dir bewusst sein, bei der Auswahl der passenden Methode für die Implementierung.

  1. Solltest du dir Gedanken darüber machen, ob du die Klasse vielleicht noch einmal verwenden willst oder ob sie so statisch ist, dass sie nur zu diesem einen Fall passt, dann greife zu einer lokalen Klasse direkt im Programm.
  2. Möchtest du die Klasse wiederverwenden und sie leicht abgewandelt in anderen Reports einsetzen, dann verwende eine nicht finale globale Klasse.
  3. Bei einer lokalen Klasse kannst du je nach eigenem Geschmack entscheiden. Willst du eine Instanz, dann lege die Klasse als Instanz bei der Initialisierung bzw. beim Load-of-Program an.

 

Struktur

Bei der Anlage eines neuen Reports ist eine gute Struktur der erste Teil zum Ziel. Die Übersichtlichkeit und die Navigation im Report ist auch wichtig für deine Kollegen, die später einmal den Report übernehmen oder warten müssen.

Von daher solltest du dir ganz zu Anfang Gedanken darüber machen, wie du allgemein deine Reports strukturieren möchtest. Wir wollen dir daher einen Vorschlag dazu geben.

 
Einstieg

Direkt nach dem Einstieg solltest du direkte Navigationsmöglichkeiten anbieten. Das Ganze am Beispiel einer statischen/lokalen Klasse.


*----------------------------------------------------------------------*
*--- Includes
*----------------------------------------------------------------------*
INCLUDE:
  ztest_01_top,
  ztest_01_sel,
  ztest_01_c01.

*----------------------------------------------------------------------*
*--- ABAP Events
*----------------------------------------------------------------------*
INITIALIZATION.
  lcl_prog=>init_program( ).

AT SELECTION-SCREEN OUTPUT.
  lcl_prog=>pbo_1000( ).

AT SELECTION-SCREEN.
  lcl_prog=>ucomm( sscrfields-ucomm ).

END-OF-SELECTION.
  lcl_prog=>start( ).

In dem gezeigten Beispiel startet das Programm mit den Includes des Reports, also alles was so an Daten und weiteren Definitionen zum Report dazu gehört. Danach folgen die Report Ereignisse der einzelnen Verarbeitungsschritte. In jedes Include und jede Methode der Events kann man mit einer Vorwärtsnavigation abspringen und sich direkt den Code ansehen.

 

Includes

Die Includes sorgen für eine saubere Strukturierung des Programms und der einzelnen Bestandteile. 

  • Im TOP-Include (_TOP) wird der Programmkopf und die Nachrichtenklasse definiert. Weiterhin werden alle globale Variablen und Typen definiert. Im Normalfall wird allerdings nur der Verweis auf die Screenfields (sccrfields) benötigt, die den Usercommand weitergibt (siehe oberes Beispiel).
  • Im Selektionsinclude (_SEL) liegen alle Selektionsbilder die für den Report benötigt werden.
  • In den Klassenincludes (_Cxx) liegen jeweils Klassendefinition- und Implementierung einer Klasse, um die Ressourcen vom Rest des Programms zu trennen.
  • Weiterhin könnte es noch ein Form-Include (_Fxx) geben, dass aber eigentlich nur noch für Modul-Routinen von Dynpros verwendet wird.

 

Selektionsbild

Bei der Übergabe der Daten vom Selektionsbild an die Klasse gibt es zwei grundlegende Konzepte:

  • Du verwendest die globalen Parameter und Select-Options direkt in der Klasse und greifst auf sie zu, als wären sie exterene Datenquellen.
  • Du übergibst die Parameter beim Start der Verarbeitung direkt an die Verarbeitungsroutine.

Der zweite Fall wäre eigentlich der Sauberste, dafür aber auch der aufwändigste, da du die einzelnen Select-Options auch im Eingang typisieren müsstest.

 

Datenhaltung

Die globalen Daten in einem Programm würden zum Großteil verschwinden, dies ist aber nicht immer möglich, da gewisse Werte global gehalten werden müssen. Dazu einige Beispiele:

  • Screenfields für die Weitergabe des Usercommands an die Methode zur Auswertung
  • Hilfsfelder für Select-Options des Selektionsbildes
  • Globale Tabellen für Dynpros zur Datenhaltung und zur Verarbeitung
  • Globale Typisierungen

 

Alle anderen Werte würden in die Klasse wandern, da hier auch die Verarbeitung stattfindet. Somit liegen zum Beispiel ...

  • Konstanten
  • Daten
  • Typisierungen

... alle in der Klasse.

Wie genau dann die einzelne Klasse implementiert wird, liegt an dir als Entwickler und sollte sorgsam durchdacht werden, ob dies deinem Konzept entspricht und ob dies auch leicht erweiterbar und wartbar ist.

 

Fazit

Dies sollte nur ein Beispiel für die Strukturierung eines Reports sein und stellt keine Verpflichtung für dich da. Vielleicht konnten wir dich mit dem Konzept etwas auf neue Ideen und Ansätze bringen, die du nun in deine tägliche Arbeit übernehmen kannst.


Enthaltene Themen:
Modernes ABAPReportsFORM
Kommentare (0)
Werbung

ABAP - Performance für den SELECT

Kategorie - ABAP

In diesem Artikel schauen wir uns noch ein paar Spezialfälle mit dem SELECT an und beleuchten die Performance dieser Konstrukte. Wir zeigen dir die aktuellen Alternativen dafür und geben kleinere Tipps beim Lesen.

02.04.2021

ABAP - Objekte prüfen (Instanzen)

Kategorie - ABAP

In diesem Artikel zeigen wir dir, wie du Instanzen analysieren und auf diese korrekt reagieren kannst, wenn du diese zum Beispiel bei einer Verarbeitung übergibst und individuell reagieren möchtest.

19.03.2021

ABAP - Schleifen

Kategorie - ABAP

Mit dem modernen ABAP wurden auch neue Schleifen und Möglichkeiten zur Einschränkung von Tabelleninhalten geschaffen. Diese neuen Befehle schauen wir uns in diesem Artikel näher an.

19.02.2021

ABAP - Vergleiche

Kategorie - ABAP

Heute betrachten wir uns das Thema Vergleiche und Vergleichsoperatoren im Hinblick auf die neuen Befehle und die aktuelle Verwendung. Was hat sich bisher alles geändert und was sollte man noch tun.

12.02.2021

ABAP - String Funktionen (Teil 3)

Kategorie - ABAP

In diesem Artikel geht es um weitere neue String Funktionen und einen Ersatz für CONDENSE. Hierbei möchten wir dir noch zeigen, wieso du die neuen Funktionen verwenden solltest.

22.01.2021

Wir verwenden Cookies für unsere Dienste und Funktionen. Mehr Informationen