ALV-Grid-Erweiterung “Langtext”
Heute war Tag der Ablenkung. Nachdem ich in der CL_GUI_ALV_GRID-Klasse etwas herum experimentiert hatte, bin ich nun auch noch über eine Ableitung dieser Klasse mit der Erweiterung Automatische Langtextermittlung gestoßen: Die Klasse heißt CL_ALV_GRID_XT, das zugehörige Demoprogramm lautet R_ALV_GRID_XT.
Um zu verstehen, was SAP in diesem Fall mit Langtext meint, habe ich eine abgespeckte Demoversion geschrieben. In diesem Programm wird die Tabelle TVKO, die die Definition der Verkaufsorganisationen enthält. Mit der automatischen Langtextermittlung können Felder definiert werden, die entweder einen beschreibenden Text in einer zugehörigen Customizingtabelle haben, oder bei dem die Werte als Festwerte in der Domäne hinterlegt sind.
Der Parameter KEEP = X bewirkt, dass das Schlüsselfeld angezeigt wird. Bei KEEP = space wird das Feld automatisch ausgeblendet und es wird nur das Feld mit dem Langtext angezeigt.
[notice type = ‘info’]Zusätzlich gibt es die Option Ausgabe optimieren. Wird diese Option aktiviert, dann werden bei der Ausgabe alle komplett leeren Spalten ausgeblendet. Ein nettes Feature![/notice]
Beschreibung
Das Demoprogramm liest die Tabelle TVKO. Die Beschreibung der Verkaufsorganisationen stehen in der Texttabelle TVKOT. Um diese in einem ALV anzuzeigen müsste man entweder einen View bemühen oder die Texte aus der Tabelle manuell nachlesen. Diese Arbeit nimmt uns die Option Automatische Langtextermittlung ab. Um nicht extra eine neue Tabelle bzw. einen Feldkatalog aufbauen zu müssen, verwende ich vorhandene Felder, in die die Langtexte geschrieben werden. Der Name der VKORG kommt in das Feld TXNAM_KOP, der zugehörige Festwert zum Feld BSTYP ins Feld TXNAM_SDB.
Coding
REPORT. PARAMETER p_optim TYPE xfeld DEFAULT 'X'. PARAMETER p_ltxt TYPE xfeld DEFAULT 'X'. PARAMETER p_keep TYPE xfeld DEFAULT 'X'. DATA gt_autotext TYPE alv_auto_text_t. DATA gt_data TYPE STANDARD TABLE OF tvko. DATA gr_alv TYPE REF TO cl_alv_grid_xt. DATA gr_container TYPE REF TO cl_gui_custom_container. START-OF-SELECTION. PERFORM start_of_selection. *---------------------------------------------------------------------* * Form start_of_selection *---------------------------------------------------------------------* * Start program execution *---------------------------------------------------------------------* FORM start_of_selection. PERFORM get_data. IF p_ltxt IS NOT INITIAL. PERFORM prep_auto_text. ENDIF. CALL SCREEN 100. ENDFORM. "start_of_selection *&---------------------------------------------------------------------* *& Form prep_auto_text *&---------------------------------------------------------------------* FORM prep_auto_text. DATA ls_autotext LIKE LINE OF gt_autotext. ls_autotext-keep_fieldname_visible = p_keep. ls_autotext-fieldname = 'VKORG'. ls_autotext-fieldname_longtext = 'TXNAM_KOP'. INSERT ls_autotext INTO TABLE gt_autotext. ls_autotext-keep_fieldname_visible = p_keep. ls_autotext-fieldname = 'BSTYP'. ls_autotext-fieldname_longtext = 'TXNAM_SDB'. INSERT ls_autotext INTO TABLE gt_autotext. ENDFORM. "prep_auto_text *---------------------------------------------------------------------* * Form get_data *---------------------------------------------------------------------* * Select application data (here SFLIGHT) *---------------------------------------------------------------------* FORM get_data. FIELD-SYMBOLS <data> LIKE LINE OF gt_data. *== read all sales organizations SELECT * FROM tvko INTO TABLE gt_data. *== clear fields that shall contain the long text LOOP AT gt_data ASSIGNING . CLEAR <data>-txnam_kop. CLEAR <data>-txnam_sdb. ENDLOOP. ENDFORM. "get_data *----------------------------------------------------------------------* * Module d0100_init OUTPUT *----------------------------------------------------------------------* * Initialize ALV Grid screen *----------------------------------------------------------------------* MODULE d0100_init OUTPUT. SET: PF-STATUS '100', TITLEBAR '100'. CHECK gr_container IS INITIAL. *== Create ALV container CREATE OBJECT gr_container EXPORTING container_name = 'ALV_GRID'. *== Create ALV grid CREATE OBJECT gr_alv EXPORTING i_parent = gr_container i_optimize_output = p_optim it_auto_text_det = gt_autotext. * Display ALV data CALL METHOD gr_alv->set_table_for_first_display EXPORTING i_save = 'A' i_structure_name = 'TVKO' CHANGING it_outtab = gt_data EXCEPTIONS invalid_parameter_combination = 1 program_error = 2 too_many_lines = 3 OTHERS = 4. ENDMODULE. " d0100_init OUTPUT *----------------------------------------------------------------------* * Module d0100_exit INPUT *----------------------------------------------------------------------* MODULE d0100_exit INPUT. CALL METHOD: gr_alv->free, gr_container->free. LEAVE TO SCREEN 0. ENDMODULE. " d0100_exit INPUT
Dynpro
Das Dynpro 100 muss angelegt werden und der GUI-Status “100” ebenfalls. Das PAI-Modul anzupassen, so dass es funktioniert, sollte ein Kinderspiel sein.
[notice type=’info’]Der SAP-Demoreport bietet noch eine Funktionalität mit BAdI BADI_ALV_GRID_XT (Transaktion SE18). Diese werde ich mir evtl. demnächst noch einmal anschauen und berichten. Die Dokumentation verspricht einiges: “Es ist Ihnen mit Hilfe dieser Daten möglich, kundeneigene Felder im Grid zu füllen, den Feldkatalog zu ändern und sich auf Events des Grid
Controls zu registrieren, z.B. TOOLBAR oder USER_COMMAND.[/notice]
- Interview mit Björn Schulz (Software-Heroes.com) - 3. September 2024
- Daten aus ALV ermitteln - 3. September 2024
- So lange es den SAPGUI noch gibt… - 27. Juni 2024
Danke Enno,
genau das was ich gerade gesucht habe! Ins ALVGrid soll das 3 stellige Feld S_CARR_ID rein. Aber der Wert ‘LH ‘ soll im Grid als ‘Lufthansa’ ausgegeben werden! Damit brauche ich für den String ‘Lufthansa’ nicht ein eigenes Datenelement anlegen!
LG Michael (Januar 2016)