Ein „normaler“ Report kann beispielsweise mit einem klassischen, einfachen Top-Down-Ansatz realisiert werden und wächst dadurch rasch auf hunderte bis tausende Zeilen an, sobald komplexere Abläufe, Methoden oder Objektfunktionen in dem Report aufgerufen werden. Dies führt zwangsweise dazu, dass sehr viel gescrollt werden muss und Anpassungen mehr Implementierungsaufwand bedürfen.
Ein einfacher und eleganterer Ansatz wird im folgenden Artikel verfolgt und beschrieben.
Man kann den klassischen Report in einer eigenen lokalen Klasse einfach strukturieren und hierdurch die Übersicht behalten. In dieser lokalen Klasse werden die Logik des Reports, der Aufruf und mögliche erweiterte Methoden implementiert. Dies führt dazu, dass beim Aufruf des Reports lediglich diese lokale Klasse instanziiert oder eben nur entsprechende Methodenaufrufe durchgeführt werden müssen.
Der Report selbst besteht somit nur aus den folgenden drei „Include“-Objekten:
Die Methoden dienen wie die sprechenden Namen schon sagen:
- dem Funktionsaufruf CALL_FUNCTION,
- dem Programmstart RUN_PROGRAMM und
- der Ergebnisanzeige SHOW_RESULT.
Die global im Report genutzten Variablen und Strukturen wurden in ein entsprechendes TOP-Include ausgelagert. In dem Beispiel schaut das Top-Include recht mager aus:
Die lokale Klassen wird klassisch definiert und implementiert:
Die Funktion in diesem Report beschränkt sich lediglich auf das Setzen einer Char50-Variable, welcher in der Darstellungsmethode schlicht ausgegeben wird. Hier könnten beispielsweise im Funktionsaufruf die FUBAs oder anderen Methode gerufen werden. In der Ausgabe wäre die Integration entsprechender Listen oder ALV-GRIDs möglich.
Der Aufruf für die Programmausführung beschränkt sich, dank der Strukturierung einzig auf den „run_program“-Aufruf der lokalen Klasse und beispielsweise einer entsprechenden Fehlerbehandlung :
Hier zur Vollständigkeit der Quelltext der lokalen Klasse:
*&---------------------------------------------------------------------*
*& Include ZMEIN_REPORT_LCL
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
* Lokale Serviceklasse - Definition
*----------------------------------------------------------------------*
CLASS lcl_mein_report DEFINITION.
PUBLIC SECTION.
CLASS-METHODS run_program
EXCEPTIONS prog_err.
*
CLASS-METHODS call_function
RETURNING VALUE(rv_name) TYPE char50.
*
CLASS-METHODS show_result
IMPORTING iv_name TYPE char50.
*
ENDCLASS. "LCL_MEIN_REPORT
*----------------------------------------------------------------------*
* Lokale Service-Klasse - Implementierung
*----------------------------------------------------------------------*
CLASS lcl_mein_report IMPLEMENTATION.
METHOD run_program.
DATA: lv_name TYPE char50.
call_function(
RECEIVING
rv_name = lv_name
).
show_result( lv_name ).
ENDMETHOD. "run_program
METHOD call_function.
rv_name = 'Oskar Mazerath'.
ENDMETHOD. "call_function
METHOD show_result.
WRITE: / iv_name.
ENDMETHOD. "show_result
ENDCLASS. "lcl_mein_report


