Variante bei Programmstart automatisch laden

Einige Programme lassen sich leichter bedienen, wenn für einen Benutzer automatisch eine bestimmte Variante geladen wird. Dies kann zum Beispiel anhand einer Namenskonvention geschehen (UV_SCHMIDT: Uservariante für den Benutzer SCHMIDT) oder anhand eines Parameters im Benutzerstammsatz.

Im folgenden Beispielprogramm wird beim Programmstart die benutzerspezifische Variante gezogen.

Wir benutzen dazu den Funktionsbaustein RS_COVERPAGE_SELECTIONS.

In der Tabelle T_INFO stehen die Selektionsparameter ausgabebereit aufbereitet. Laut Dokumentation macht der Baustein auch nichts anderes. Tatsächlich lädt er aber die Daten aus der Variante in das aktuelle Selektionsbild.

REPORT zzvariante.

DATA:
 l_report   TYPE raldb_repo,
 l_variante TYPE raldb_vari,
 BEGIN OF t_info OCCURS 0,
   typ(1),
   null(1),
   line(120),
 END OF t_info.

PARAMETERS:
  p1(10),
  p2(20).

INITIALIZATION.
  l_report   = sy-repid.
  CONCATENATE 'UV_' sy-uname INTO l_variante.

  CALL FUNCTION 'RS_COVERPAGE_SELECTIONS'
       EXPORTING
            report  = l_report
            variant = l_variante
       TABLES
            infotab = t_info
       EXCEPTIONS
            OTHERS  = 3.

Wiederverwendbarkeit

Wenn man nun die Hauptlogik in eine Klasse verfrachtet, dann kannst du die Funktionalität sehr einfach mit einem einfachen Methodenaufruf einbinden:

INITIALIZATION.
  zcl_report_tools=>load_user_variant( ).

Klasse

CLASS zcl_report_tools DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS load_user_variant.
ENDCLASS.

CLASS zcl_report_tools IMPLEMENTATION.

  METHOD load_user_variant.

    TYPES: BEGIN OF _info,
             typ(1),
             null(1),
             line(120),
           END OF _info.
    DATA t_info TYPE STANDARD TABLE OF _info.

    CALL FUNCTION 'RS_COVERPAGE_SELECTIONS'
      EXPORTING
        report  = sy-repid
        variant = CONV raldb_vari( |U_{ sy-uname }| )
      TABLES
        infotab = t_info
      EXCEPTIONS
        OTHERS  = 3.
    IF sy-subrc = 0.
      MESSAGE 'Benutzervariante wurde geladen' TYPE 'S'.
    ENDIF.

  ENDMETHOD.
ENDCLASS.
Enno Wulff