ABAP & SAP SAP-platform
SAP-platform

Lijsten, ALV & gebruikersinterfaces

Output tonen aan de gebruiker: klassieke lijsten met WRITE, de drie generaties ALV (REUSE-functiemodule, CL_GUI_ALV_GRID, CL_SALV_TABLE), dynpro's in vogelvlucht en het Fiori/UI5-landschap.

Op deze pagina

01Klassieke lijsten met WRITE

De oudste vorm van output: regels rechtstreeks naar het scherm schrijven. In nieuwbouw zie je dit nauwelijks nog, maar in bestaande reports kom je het constant tegen — en voor snelle testoutput is het nog altijd het snelste gereedschap.

WRITE: / 'Materiaal:', lv_matnr,
       / 'Omschrijving:', lv_maktx.

WRITE: /5 lv_veld,            " begin op kolom 5
       20 lv_ander COLOR 3.   " op kolom 20, met kleur

ULINE.                         " horizontale lijn
SKIP 2.                        " twee lege regels
NEW-PAGE.                      " nieuwe pagina
Waarom je dit niet meer bouwt — een WRITE-lijst heeft geen sortering, filtering of Excel-export voor de gebruiker. Alles wat je met WRITE-lijsten deed, doet een ALV beter en met minder code.

02ALV — de drie generaties

ALV (ABAP List Viewer) is dé standaardmanier om tabeldata te tonen: de gebruiker krijgt gratis sorteren, filteren, subtotalen, layout-varianten opslaan en exporteren naar Excel. Er bestaan drie generaties die je alle drie in bestaande code tegenkomt.

GeneratieTechniekHerkenbaar aanStatus
1. FunctiemodulesREUSE_ALV_GRID_DISPLAY, REUSE_ALV_LIST_DISPLAYHandmatig opgebouwde fieldcatalog-tabel (slis_t_fieldcat_alv)Verouderd, maar overal aanwezig
2. Control-classCL_GUI_ALV_GRIDEen custom container op een dynpro, veel event-handlingNog gangbaar voor bewerkbare grids
3. SALVCL_SALV_TABLEfactory( )-aanroep, nauwelijks configuratiecodeAanbevolen voor weergave (alleen-lezen)

Generatie 1 — REUSE_ALV_GRID_DISPLAY

Het klassieke patroon: je bouwt zelf een fieldcatalog (kolomdefinities: veldnaam, kolomkop, breedte, som-vlag) en geeft die samen met je datatabel aan de functiemodule:

DATA: lt_fieldcat TYPE slis_t_fieldcat_alv,
      ls_layout   TYPE slis_layout_alv.

" fieldcatalog automatisch afleiden van een DDIC-structuur:
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
  EXPORTING i_structure_name = 'MARA'
  CHANGING  ct_fieldcat      = lt_fieldcat.

ls_layout-zebra             = 'X'.
ls_layout-colwidth_optimize = 'X'.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
    is_layout   = ls_layout
    it_fieldcat = lt_fieldcat
  TABLES
    t_outtab    = lt_data.

Generatie 3 — CL_SALV_TABLE (aanbevolen)

De moderne, object-georiënteerde aanpak (zie classes). De fieldcatalog wordt volledig automatisch afgeleid van het tabeltype:

DATA lo_alv TYPE REF TO cl_salv_table.

TRY.
    cl_salv_table=>factory(
      IMPORTING r_salv_table = lo_alv
      CHANGING  t_table      = lt_data ).

    " standaard-toolbar (sorteren, filteren, export) aanzetten:
    lo_alv->get_functions( )->set_all( abap_true ).

    " kolomkop aanpassen:
    lo_alv->get_columns( )->get_column( 'MATNR' )->set_short_text( 'Materiaal' ).

    " zebra-strepen en geoptimaliseerde kolombreedte:
    lo_alv->get_display_settings( )->set_striped_pattern( abap_true ).
    lo_alv->get_columns( )->set_optimize( abap_true ).

    lo_alv->display( ).
  CATCH cx_salv_msg cx_salv_not_found INTO DATA(lx_err).
    MESSAGE lx_err TYPE 'E'.
ENDTRY.

Generatie 2 — CL_GUI_ALV_GRID in het kort

Deze variant tekent de grid in een container op een klassiek scherm. Je herkent hem aan CREATE OBJECT lo_container ... EXPORTING container_name = 'CC_ALV' gevolgd door lo_grid->set_table_for_first_display( ). Hij ondersteunt bewerkbare cellen, drag & drop en geneste grids — tegen de prijs van beduidend meer code en een verplicht eigen dynpro.

03Dynpro's — klassieke schermen

Een dynpro (DYNamic PROgram) is een klassiek SAP GUI-scherm: het schermontwerp plus de flow-logica eromheen. Vrijwel elke standaardtransactie in ECC bestaat uit dynpro's. Zelf bouw je ze zelden nog, maar je moet de structuur herkennen om standaardcode en oudere custom transacties te kunnen volgen.

PBO en PAI — de twee helften

Elk dynpro heeft twee event-blokken in de bijbehorende module pool (programmatype SAPMZ..., zie programmatypen):

BlokVoluitWanneerTypisch gebruik
PBOProcess Before OutputVóórdat het scherm getoond wordtVelden vullen, knoppen aan/uit zetten, GUI-status (menubalk) zetten
PAIProcess After InputNadat de gebruiker Enter/een knop indruktInvoer valideren, reageren op de gekozen functie
" in de screen flow logic (schermeditor SE51):
PROCESS BEFORE OUTPUT.
  MODULE status_0100.

PROCESS AFTER INPUT.
  MODULE user_command_0100.

" in de module pool (ABAP):
MODULE user_command_0100 INPUT.
  CASE sy-ucomm.               " de door de gebruiker gekozen functiecode
    WHEN 'SAVE'.  PERFORM opslaan.
    WHEN 'BACK'.  LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.

Selectieschermen zijn ook dynpro's

Het selectiescherm van een report (PARAMETERS/SELECT-OPTIONS, zie selectieschermen) is technisch dynpro nummer 1000, dat ABAP automatisch voor je genereert. Vandaar dat je het met dezelfde events (AT SELECTION-SCREEN) kunt beïnvloeden.

04Fiori & SAPUI5 — de moderne interface

In S/4HANA is SAP Fiori de standaardinterface: webgebaseerde apps als tegels in de Fiori Launchpad. Als ABAP-ontwikkelaar bouw je meestal niet de frontend zelf, maar wél de services eronder.

Voor de ABAP'er betekent dit — de "schermlogica" verschuift naar annotaties en RAP-behavior definitions; klassieke dynpro-kennis blijft nodig voor onderhoud, maar nieuwbouw is CDS + OData + Fiori.

05Formulieren: SAPscript, Smart Forms & Adobe Forms

Voor afdrukbare documenten — orderbevestigingen, facturen, pakbonnen, etiketten — kent SAP drie generaties formuliertechnologie. Alle drie draaien ze nog volop in productie.

TechnologieOntwerp inAanroep vanuit ABAPKenmerken
SAPscriptSE71OPEN_FORM / WRITE_FORM / CLOSE_FORMOudste generatie; layout en logica sterk verweven; per client aanpasbaar
Smart FormsSMARTFORMSFormulier genereert een functiemodule; naam ophalen met SSF_FUNCTION_MODULE_NAME en die aanroepenGrafische editor, betere scheiding layout/data, tabellen en voorwaarden in het formulier zelf
Adobe Forms (SAP Interactive Forms by Adobe)SFPIdem: FP_FUNCTION_MODULE_NAME → gegenereerde functiemodulePDF-gebaseerd, interactieve (invulbare) formulieren mogelijk; vereist Adobe Document Services (ADS)
" typisch Smart Forms-patroon:
DATA lv_fmname TYPE rs38l_fnam.

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
  EXPORTING  formname           = 'ZSF_FACTUUR'
  IMPORTING  fm_name            = lv_fmname
  EXCEPTIONS no_form            = 1
             no_function_module = 2
             OTHERS             = 3.

CALL FUNCTION lv_fmname          " dynamische aanroep!
  EXPORTING is_kop    = ls_kop
  TABLES    it_regels = lt_regels
  EXCEPTIONS OTHERS   = 1.

Waarom die omweg via SSF_FUNCTION_MODULE_NAME? De gegenereerde functiemodulenaam (/1BCDWB/SF00000123) verschilt per systeem — DEV, QAS en PRD genereren elk hun eigen nummer. De opzoekfunctie maakt de aanroep transporteerbaar.

Uitvoerbepaling (output determination)

Welk formulier bij welke bedrijfsgebeurtenis wordt afgedrukt, regelt in ECC de berichtsturing (NAST/condition technique) en in S/4HANA aanvullend Output Management (BRF+). In maatwerk herken je dit aan verwerkingsroutines: FORM-routines (zie subroutines) in een Z-programma die per uitvoersoort in customizing zijn geregistreerd, met de vaste parameters ENT_RETCO en ENT_SCREEN.