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)

ABAP Deep Dive - Tabellenzugriff (intern)

Kategorie - ABAP

Schauen wir uns in diesem Artikel einmal den Tabellenzugriff auf interne Tabellen an und wie sie den READ TABLE ablösen.

03.02.2023

ABAP - FINAL

Kategorie - ABAP

In diesem Artikel schauen wir uns einmal das neue FINAL Sprachkonstrukt an, wie es funktioniert und was du damit anstellen kannst.

23.12.2022

ABAP Deep Dive - VALUE

Kategorie - ABAP

In diesem Artikel wollen wir uns noch einmal das Value Statement in allen Ausprägungen anschauen und wie du es in deiner täglichen Arbeit nutzen kannst.

11.11.2022

ABAP - Common Table Expression (CTE)

Kategorie - ABAP

In diesem Artikel wollen wir uns einmal den allgemeinen Tabellenausdruck WITH anschauen und wie du ihn im Alltag nutzen kannst.

28.10.2022

ABAP Deep Dive - CORRESPONDING

Kategorie - ABAP

In diesem Artikel einmal etwas mehr über das neue Corresponding Statement und wie man es im Detail einsetzen kann. Dabei schauen wir einmal auf die zusätzlichen Features.

16.09.2022