ABAP: PopUp mit ALV in Userexit oder ähnlichem
Ab und zu möchte man ein PopUp in einem Userexit einfügen um den Benutzer auf etwas hinzuweisen oder auch eine Auswahl treffen zu lassen. Wird dabei eine Tabelle benötigt, dann ist ein PopUp mit ALV nützlich. Das ist auch gar nicht mal so schwer zu realisieren.
Ein PopUp darf nur im Dialogmodus, also nicht im Batch- oder Updateprozess angezeigt werden, daher erst einmal prüfen ob der Benutzer sich im Dialogmodus befindet. Zusätzlich kann noch der Transaktionscode abgefragt werden, falls die Anzeige des PopUp mit ALV nur in bestimmten Transaktionen erwünscht ist.
DATA: lv_in_update LIKE sy-subrc. CALL FUNCTION 'TH_IN_UPDATE_TASK' IMPORTING in_update_task = lv_in_update. IF ( sy-tcode = 'VL01N' OR sy-tcode = 'VL02N' ) AND lv_in_update = 0 AND sy-batch = ''.
Datendeklarationen für ALV:
DATA: go_alv TYPE REF TO cl_salv_table, lt_cols TYPE REF TO cl_salv_columns_table, lr_functions TYPE REF TO cl_salv_functions_list.
Nachdem die Daten selektiert wurden kann ein ALV erstellt und angezeigt werden. Es gibt dort extra die Funktion ‘set_screen_popup’ um den ALV als Popup darzustellen. Die Parameter legen die Größe des PopUps fest. Die Spalten sollten optimiert werden, damit die Texte immer vollständig zu lesen sind. Das bringt jedoch den Nachteil, dass man die Breite des Fensters nicht immer ganz genau an den Inhalt anpassen kann.
TRY. cl_salv_table=>factory( IMPORTING r_salv_table = go_alv CHANGING t_table = lt_pos ). CATCH cx_salv_msg. ENDTRY. lr_functions = go_alv->get_functions( ). lr_functions->set_all( 'X' ). lt_cols = go_alv->get_columns( ). lt_cols->set_optimize( ). IF go_alv IS BOUND. go_alv->set_screen_popup( start_column = 1 end_column = 60 start_line = 1 end_line = 10 ). go_alv->display( ). ENDIF.