Wie kann man einen SAP-Report optimal strukturieren?

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:

Reportstruktur

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:

Top-Include

Die lokale Klassen wird klassisch definiert und implementiert:

Klassendefinition

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 :

Include für ProgrammausführungHier 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

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>