ich möchte gerne einige Buttons auf dem Listenbildschirm einrichten um unterschiedliche Sortierungen möglich zu machen.
Leider kann ich den Listviewer nicht verwenden, da ich dort keine Möglichkeit habe - per Klick auf ein Feld - in eine Transaktion zu springen.
Könnte mir jemand ein Codebeispiel zu so etwas geben. Ich habe so etwas nämlich noch nie gemacht.
es wundert mich, dass dir noch niemand geantwortet hat.
Zuerst zum Listviewer:
Also mit REUSE_ALV_LIST_DISPLAY oder REUSE_ALV_GRID_DISPLAY sollte das auf jeden Fall funktionieren. Hier ein Coding-Extrakt, der die wesentlichen Punkte zeigt:
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = 'myprogram' "!!!!!
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = 'ALV_UCOMM' "!!!!!
I_STRUCTURE_NAME = ' '
IS_LAYOUT = ILAYOUT
IT_FIELDCAT = ITFDCAT
IT_EVENTS = ITEVENTS
...
...
...
Entscheidend sind hier die Parameter:
I_CALLBACK_PROGRAM = das Programm, das von ALV bei bestimmten Ereignissen aufgrufen werden soll - also dein Programm.
I_CALLBACK_USER_COMMAND = die Routine, die von ALV aufgerufen werden soll um interaktive Funktionen auszuführen. Diese Routine musst du in dein Programm aufnehmen. Übrigens könnte man den Namen der Routine auch über den Parameter IT_EVENTS mitgeben (bitte Doku lesen).
Diese Routine könnte dann z.B. ungefähr so aussehen:
FORM ALV_UCOMM USING VALUE(UCOMM) LIKE SY-UCOMM
SELFIELD TYPE SLIS_SELFIELD.
if ucomm = 'PICK'.
if selfield-fieldname = 'MATNR'.
set parameter ID 'MAT' = selfield-value.
call transaction 'MM03' and skip first screen.
endif.
endif.
ENDFORM.
Im Layout solltest du noch mitteilen, wie der Doppelklick-Ucomm bei dir heissen soll:
move 'PICK' to ilayout-f2code.
Wenn du dein Feld im Feldtkatalog noch das Attribut "Hotspot" verpasst, dann geht's sogar mit einfachem Klick anstatt Doppelklick.
Nun zum Pushbutton in einer Liste:
Dazu musst du dir mit dem Menü-Painter (SE41 oder aus der SE80 heraus) zu deinem Programm eine eigene Oberfläche definieren mit einem eigenen Status anlegen. Hier kannst du dann Menüs, Pushbuttons usw. pflegen. In deinem Programm musst du dann vor Abschluss der Listausgabe den mit SE41 definierten Status setzen: SET PF-STATUS 'xyz'. Ausserdem musst du in deinem Programm z.B. in dem Ereignis AT USER-COMMAND auf die Funktionen des Anwenders reagieren.
Beide Beschreibungen sind sehr kompakt. Du solltest auf jeden Fall die Doku dazu lesen oder Beispielprogramme testen.
Wenn es sich um eine tabellarische Liste handelt, würde ich dir auf jeden Fall den ALV empfehlen, weil du hier sehr viele Funktionen geschenkt bekommst.