Button in ALV hinzufügen

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
12 Beiträge • Seite 1 von 1
12 Beiträge Seite 1 von 1

Button in ALV hinzufügen

Beitrag von Gast ( / / 0 / 3 ) »
Hey,

ich bin gerade dabei mich in das Thema ALV einzuarbeiten. Ich habe bereits ein ALV erstellt und möchte jetzt einen Button hinzufügen der irgendein Ereignis auslöst.
Ich habe das Forum schon durchsucht aber ich weiss nicht genau wo ich welchen Quelltext einsetzen soll.
Kann mir irgendjemand helfen?
Ich bin kurz vor dem Verzweifeln :cry:

Hiermal mein Quelltext:

REPORT zzz_test.

DATA: grid_klasse TYPE REF TO cl_gui_alv_grid,
container_klasse TYPE REF TO cl_gui_custom_container,
it_getraenke TYPE TABLE OF zgetraenke.

SELECT * FROM zgetraenke INTO TABLE it_getraenke.

CALL SCREEN 100.
*_________________PAI_____________________
MODULE user_command_0100 INPUT.
IF sy-ucomm ='BACK'.
LEAVE PROGRAM.

ENDIF.

ENDMODULE. " USER_COMMAND_0100 INPUT
*_________________PBO_____________________
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STANDARD'.
* SET TITLEBAR 'xxx'.
IF container_klasse IS INITIAL.

CREATE OBJECT container_klasse
EXPORTING container_name = 'CCCONTAINER'.

CREATE OBJECT grid_klasse
EXPORTING i_parent = container_klasse.

CALL METHOD
grid_klasse->set_table_for_first_display
EXPORTING
i_structure_name = 'zgetraenke'
CHANGING
it_outtab = it_getraenke.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von Andreas G (Specialist / 175 / 0 / 0 ) »
Einfach im PF-Status (in deinem Fall im Status STANDARD) in der "Drucktastenleiste" einen Button mit einem Funktionscode und einem Icon hinterlegen. Diesen Funktionscode kannst du dann im PAI abfragen (user_command).

mfg Andi
Hauptsoch: HAUPTSOCH!

Beitrag von Gast ( / / 0 / 3 ) »
Ich meine in der Drucktastenleiste des ALV.
Ich lasse mir eine Liste über Getränke uasgeben und möchte einen zusätzlichen Buttom haben der z.B. etwas ausrechnet.

Beitrag von RiffRaff (Specialist / 379 / 0 / 1 ) »
hallo,

schau dir mal den demo-report BCALV_GRID_05 an

mfg
richard

Beitrag von Andreas G (Specialist / 175 / 0 / 0 ) »
Anonymous hat geschrieben:Ich meine in der Drucktastenleiste des ALV.
Ich lasse ...
Hallo? Was habe ich gerade geschrieben?? :roll: Oder meinst du etwa die Toolbar des ALV??[/quote]
Hauptsoch: HAUPTSOCH!

Beitrag von Gast ( / / 0 / 3 ) »
Ja genau die Toolbar des ALV. Heute ist irgendwie nicht so mein Tag :(

Beitrag von Andreas G (Specialist / 175 / 0 / 0 ) »
So machst du dir einen eigenen Button (normalerweise im TOP-Include)

Code: Alles auswählen.

CLASS lcl_event DEFINITION.
  PUBLIC SECTION.
    METHODS:
    handle_toolbar
        FOR EVENT toolbar OF cl_gui_alv_grid
            IMPORTING e_object e_interactive,

    handle_user_command
        FOR EVENT user_command OF cl_gui_alv_grid
            IMPORTING e_ucomm.
ENDCLASS.


CLASS lcl_event implementation.
  method handle_toolbar.
    data: ls_toolbar TYPE stb_button.

    clear ls_toolbar.
    move 0 to ls_toolbar-butn_type.
    move 'DELETE' to ls_toolbar-function.
    move ICON_DELETE to ls_toolbar-icon.
    Move 'Datei löschen'(t03) to ls_toolbar-quickinfo.
    move space to ls_toolbar-disabled.
    append ls_toolbar to e_object->mt_toolbar.
    clear ls_toolbar.
  endmethod.
ENDCLASS.

Code: Alles auswählen.

CALL METHOD z_grid_r->set_toolbar_interactive.
Zuerst musst du eine Klasse definieren und dann implementieren.
Genaueres kann ich dir leider auch nicht sagen, da ich selber noch nie so einen Button benötigt habe, ich hoffe der CODE ist eine kleine Anregung für dich.

mfg Andi
Hauptsoch: HAUPTSOCH!

Beitrag von Gast ( / / 0 / 3 ) »
Danke ersteinmal für die Antworten aber wo muss ich denn genau die Methode

CALL METHOD z_grid_r->set_toolbar_interactive.

aufrufen?

Es kommt die Meldung Z_GRID_R unbekannt.

Das Beispiel BCALV_GRID_05 wurde in der Hilfe www.sap.com vorgeschlagen aber ich finde es viel zu umfangreich und ich kapier da fast gar nichts.

Einfache ALVs kann ich erstellen aber ich möchte jetzt etwas Dynamik reinbringen.

Beitrag von Andreas G (Specialist / 175 / 0 / 0 ) »
z_grid_r ist in deinem fall grid_klasse
Zuerst machst du deine ALV - Ausgabe mit set_table_for_first-display, dann setzt du die "Handler" um dein Event zu "aktivieren".

Code: Alles auswählen.

CALL METHOD grid_klasse->set_table_for_first_display
     EXPORTING
*    I_BYPASSING_BUFFER            =
*    i_buffer_active               = 'X'
*    I_CONSISTENCY_CHECK           =
*    I_STRUCTURE_NAME              =
       is_variant                    = g_variant
       i_save                        = 'A'
       i_default                     = 'X'
       is_layout                     = wa_layout
*    IS_PRINT                      =
*    IT_SPECIAL_GROUPS             =
*    IT_TOOLBAR_EXCLUDING          =
*    IT_HYPERLINK                  =
*    IT_ALV_GRAPHICS               =
    CHANGING
      it_outtab                     = it_alv
      it_fieldcatalog               = it_fieldcatalog.
*      IT_FILTER                     = it_filter.   "Filterkriterien

  SET HANDLER lcl_event->handle_toolbar FOR grid_klasse.
  SET HANDLER lcl_event->handle_user_command FOR grid_klasse.

  CALL METHOD grid_klasse->set_toolbar_interactive.
das lcl_event nach SET HANDLER ist das im vorherigen Beitrag definierte Event.
Hauptsoch: HAUPTSOCH!

Beitrag von Gast ( / / 0 / 3 ) »
Och nööö!!!

Jetzt ist das feld LCL_EVENT unbekannt. Das ist blöd. Ich dreh gleich durch.

Code: Alles auswählen.

REPORT  zzz_test                                                   .

DATA: grid_klasse TYPE REF TO cl_gui_alv_grid,
      container_klasse TYPE REF TO cl_gui_custom_container,
      it_getraenke TYPE TABLE OF zgetraenke.

DATA: x_save,                          "for Parameter I_SAVE
      g_repid LIKE sy-repid,
      gs_layout TYPE disvariant.      "for parameter IS_VARIANT
      
INCLUDE <icon>.

CLASS lcl_event DEFINITION. 
  PUBLIC SECTION. 
    METHODS: 
    handle_toolbar 
        FOR EVENT toolbar OF cl_gui_alv_grid 
            IMPORTING e_object e_interactive, 
    handle_user_command 
        FOR EVENT user_command OF cl_gui_alv_grid 
            IMPORTING e_ucomm. 
ENDCLASS. 

CLASS lcl_event implementation. 
  method handle_toolbar. 
    data: ls_toolbar TYPE stb_button. 

    clear ls_toolbar. 
    move 0 to ls_toolbar-butn_type. 
    move 'DELETE' to ls_toolbar-function. 
    move ICON_DELETE to ls_toolbar-icon. 
    Move 'Datei löschen'(t03) to ls_toolbar-quickinfo. 
    move space to ls_toolbar-disabled. 
    append ls_toolbar to e_object->mt_toolbar. 
    clear ls_toolbar. 
  endmethod. 
ENDCLASS. 


start-of-selection.
x_SAVE = 'u'.
g_repid = sy-repid.
gs_layout-report = g_repid.

SELECT * FROM zgetraenke INTO TABLE it_getraenke.
DATA: ls_toolbar  TYPE stb_button.

CALL SCREEN 100.
*_________________PAI_____________________
MODULE user_command_0100 INPUT.
  IF sy-ucomm ='BACK'.
    LEAVE PROGRAM.
  ENDIF.
ENDMODULE.                 " USER_COMMAND_0100  INPUT
*_________________PBO_____________________
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STANDARD'.
*  SET TITLEBAR 'xxx'.
  IF container_klasse IS INITIAL.
    CREATE OBJECT container_klasse
      EXPORTING container_name = 'CCCONTAINER'.
    CREATE OBJECT grid_klasse
      EXPORTING i_parent = container_klasse.

    CALL METHOD grid_klasse->set_table_for_first_display
      EXPORTING
        i_structure_name = 'zgetraenke'
        is_variant       = gs_layout
        i_save           = x_save

      CHANGING
        it_outtab        = it_getraenke.
        
       SET HANDLER lcl_event->handle_toolbar FOR grid_klasse. 
  SET HANDLER lcl_event->handle_user_command FOR grid_klasse. 
  CALL METHOD grid_klasse->set_toolbar_interactive. 


  ENDIF.
ENDMODULE.                 " STATUS_0100  OUTPUT

Beitrag von Andreas G (Specialist / 175 / 0 / 0 ) »
So, hier noch mal ein paar Änderungen und Anregungen. Wenn das nicht hilft, weis ich auch nicht mehr weiter:

Code: Alles auswählen.

* Nachdem du das Event lcl_event definiert hast
DATA: z_event_r TYPE REF TO lcl_event.
dann musst du noch die Methode handle_user_command implementieren (in CLASS lcl_event IMPLEMENTATION) :

Code: Alles auswählen.

CLASS lcl_event IMPLEMENTATION
...
...
METHOD handle_user_command.
    DATA: z_row TYPE i.
    DATA: z_textline2(40) TYPE c.
    DATA: z_answer(1) TYPE c.
    DATA: z_fline TYPE i.

    CASE e_ucomm.
      WHEN 'DELETE'. "Datensatz löschen
        PERFORM datensatz_loeschen.
    ENDCASE.
  ENDMETHOD.
ENDCLASS.
und die 3 Zeilen ganz unten (SET HANDLER ...) ersetzt du so:

Code: Alles auswählen.

CREATE OBJECT z_event_r.
  SET HANDLER z_event_r->handle_toolbar FOR grid_klasse.
  SET HANDLER z_event_r->handle_user_command FOR gird_klasse.
  CALL METHOD grid_klasse->set_toolbar_interactive. 
hoff das funkt.
Hauptsoch: HAUPTSOCH!

Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,

nur mal ein kleiner Tip:

in der Reuse-Library gibt es ein Beispiel mit ALV-Drucktastenleiste.

Das habe ich kopiert und verwendet. Es funktioniert wunderbar.

Gruß
babap

Seite 1 von 1

Vergleichbare Themen

5
Antw.
2838
Views
für den texteditor nen button hinzufügen ?
von Chris L. » 13.10.2004 13:45 • Verfasst in ABAP Objects®
5
Antw.
3688
Views
Toolbar button hinzufügen
von Paradoxon5 » 17.12.2015 13:37 • Verfasst in ABAP® Core
3
Antw.
1444
Views
GUI-Status Button Funktion hinzufügen
von M4cM4rco » 10.05.2020 08:15 • Verfasst in ABAP® für Anfänger
9
Antw.
10159
Views
SALV Button menu hinzufügen?
von ralf.wenzel » 23.02.2014 12:54 • Verfasst in ABAP Objects®
5
Antw.
4119
Views
Per Button klick ein symbol in den Button einfügen
von alex1986 » 03.08.2011 15:57 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.