aber was hat das mit OO_ALV und REUSE_ALV zu tun?
Entschuldige für die Verwirrung die ich mit meinem ersten Post entstehen ließ.
Es gibt in SAP mehrere Wege einen ALV zu erzeugen.
Der ALV ist in der Klasse CL_GUI_ALV_GRID implementiert. Diese kann man natürlich dierekt benutzten. Das ganze ist sehr flexible, was aber auch mehr Coding braucht als deine 3 bzw. 4 Zeilen benötigt. Diesen ALV habe ich als OO-ALV bezeichnet, da er Objekt Orientiert ist.
Der FuBa REUSE_ALV_GRID_DISPLAY kappselt die Klasse CL_GUI_ALV_GRID. Er nimmt dir viel Coding ab, ermöglicht aber nicht alle Funktionen (z.B. Eingabefelder werden nicht sauber unterstützt). Auch sind die Übergabe-Strukturen/Tabellen nicht gleich mit dem OO-ALV.
Es gibt auch noch den FuBa REUSE_ALV_GRID_DISPLAY_LVC. Dieser ist ähnlich dem REUSE_ALV_GRID_DISPLAY nutzt aber die gleichen Struckturen/Tabellen wie der OO-ALV.
Zu dem Layoutproblem:
Eine ALV-Variante wird mit Bezug zum Programm, evtl. zum User und wenn gewünscht zu einem Handel gespeichert.
- Die Programm-ID ist ein muss. Diese muss dem ALV beim Aufruf mit übergeben werden. Dieses geschiet normalerweise über den Parameter IS_VARIANT, beim REUSE-ALV kann der Programmname aber auch über den Parameter I_CALLBACK_PROGRAM mitgeben werden, dann brauch der Parameter IS_VARIANT nicht versorgt werden.
- Die User-ID wird nur gebraucht, wenn Userbezogen gespeichert wird. Diese nimmt der ALV aus den System-Feldern und braucht nicht übergeben werden.
- Der Handle wird gebraucht wenn in einem Programm mehrere ALVs vorhanden sind zu denen einzeln ein Layout gespeichert werden soll. Der Handle wird mittels dem Parameter IS_VARIANT übergeben. Dazu wird eine Strukture des Types DISVARIANT verwendet. Jeder Handle identifiziert genau einen ALV im Programm.
Über den Parameter I_SAVE wird bestimmt wie die ALV-Variante gespeichert wird:
- SPACE: Kein Speichern von Layouts möglich.
- 'U': Der Benutzer kann nur benutzerspezifische Layouts speichern.
- 'X': Der Benutzer kann nur übergreifende Layouts speichern.
- 'A': Der Benutzer kann sowohl benutzerspezifische als auch übergreifende Layouts speichern.
Über den Parameter I_DEFAULT wird gesteuert, ob das anlegen von Default-Layouts möglich ist. Diese können sowohl als Benutzerdefaults wie auch als Standarddefaults gespeichert werden, dies ist natürlich abhängig vom Parameter I_SAVE
Dies mal etwas ausführlicher und hoffentlich verständlich.
Gruß Hendrik