Custom Button für Application Toolbar

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

Custom Button für Application Toolbar

Beitrag von Draven (ForumUser / 0 / 0 / 0 ) »
Hallo ich bin ganz neu bei SAP und mache gerade ein duales Studium und kannte SAP vorher nicht und um mich in SAP reinzuarbeiten musste ich eine eigene Datenbank, eigene Domänen etc. erstellen, die dann einzelne Waren anzeigen. Hinzu kam die Funktion, die Nährwerte anzeigen zu lassen, sofern ein Doppelklick auf ein Feld gemacht wird. Nun soll ich die ALV Ausgabe erweitern, sodass ein custom button der Application Toolbar hinzugefügt wird, mit der ich eine von mir makierte Zeile in der ALV Ausgabe löschen kann.
Ich denke ich soll das ganze irgendwie mit MODIFY oder UPDATE lösen aber ich bin hier echt an meine Grenzen gestoßen und die ganzen Erklärvideos etc. haben mich leider nicht weitergebracht.

Der Code:

Code: Alles auswählen.

DATA: gt_zbackwaren           TYPE TABLE OF zbackwaren,                                     
          gt_znaehrwerte          TYPE TABLE OF znaehrwerte,                                    
          gt_zwork_area_backwaren TYPE zbackwaren,                                              
          gr_table                TYPE REF TO cl_salv_table,                                    
          gr_display              TYPE REF TO cl_salv_display_settings.                         

Set PF-STATUS 'ZDELETE_BUTTON'.

CLASS lcl_events DEFINITION.                                                                
                                                                                           
  PUBLIC SECTION.                                                                           
    CLASS-METHODS on_double_click                                                         
      FOR EVENT if_salv_events_actions_table~double_click                                   
                      OF cl_salv_events_table
      IMPORTING row                                                                      
                        column.
ENDCLASS.   
                                                                             
CLASS lcl_events IMPLEMENTATION.                                                           

  METHOD on_double_click.                                                                   

    DATA: ls_zbackwaren TYPE zbackwaren.                                                    
    DATA: ls_znaehrwerte TYPE znaehrwerte.                                                  
    DATA: ls_naehrwert TYPE znaehrwerte.                                                    
    READ TABLE gt_zbackwaren INTO ls_zbackwaren INDEX row.                                  


    SELECT *                                                                                
      FROM znaehrwerte                                                                     
      INTO TABLE @DATA(lt_znaehrwerte)                                                    
      WHERE naehrwert_id = @ls_zbackwaren-naehrwertid.                                      

    READ TABLE lt_znaehrwerte INTO ls_naehrwert INDEX 1.                                    

    IF ls_naehrwert-naehrwerte IS NOT INITIAL.                                              
      MESSAGE ls_naehrwert-naehrwerte TYPE 'E' DISPLAY LIKE 'S'.                            

    ELSE.                                                                                   
      MESSAGE  'We are sorry to inform you but the chosen Product has no data about the nutrients. Please check out the nutrients later when we might have updated our System' TYPE 'I'.
                                                                                            
    ENDIF.                                                                                 






  ENDMETHOD.                                                                               
ENDCLASS.                                                                                   

START-OF-SELECTION.                                                                       
  SELECT *                                                                                 
    INTO TABLE gt_zbackwaren                                                             
    FROM zbackwaren.                                                                       

  TRY.                                                                                      


      DATA: o_salv   TYPE REF TO cl_salv_table,
            o_events TYPE REF TO cl_salv_events_table.

      CALL METHOD cl_salv_table=>factory
        IMPORTING
          r_salv_table = o_salv
        CHANGING
          t_table      = gt_zbackwaren.



      o_salv->get_functions( )->set_all( abap_true ).
      o_salv->get_columns( )->set_optimize( abap_true ).
      o_salv->get_display_settings( )->set_list_header( 'salv table' ).
      o_salv->get_display_settings( )->set_striped_pattern( abap_true ).
      o_salv->get_selections( )->set_selection_mode( if_salv_c_selection_mode=>row_column ).
* Spalte über Namen suchen
      DATA(o_col) = CAST cl_salv_column_list( o_salv->get_columns( )->get_column( 'NAEHRWERTID' ) ).
      o_col->set_visible( abap_false ).
      o_col = CAST cl_salv_column_list( o_salv->get_columns( )->get_column( 'MANDT' ) ).
      o_col->set_visible( abap_false ).
      o_events = o_salv->get_event( ).
      SET HANDLER lcl_events=>on_double_click FOR o_events.

      o_salv->display( ).


    CATCH cx_salv_msg.
    CATCH cx_salv_not_found.

  ENDTRY.
Durch diesen Code wird mir die Tabelle im Zebra-Pattern angezeigt und ich kann mit doppelklick die Nährwerte anzeigen aber ich komme nun nicht mehr weiter.
Wie man am Anfang sieht habe ich versucht mit Set PF-STATUS 'ZDELETE-BUTTON'. zu erstellen und ich hab auch einen Button mit dem namen angelegt aber ich glaube ich hab da einiges falsch gemacht. Da ich noch ein Anfänger bin könnte vielleicht jemand mir helfen und auch eine Erklärung vielleicht schreiben wie und warum man was machen muss?
Sorry an alle aber ja ich komm einfach nicht mehr weiter.

Liebe Grüße :)

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


Re: Custom Button für Application Toolbar

Beitrag von Lukas Sanders (ForumUser / 68 / 7 / 34 ) »
Hallo,

um mit Buttons im Status zu arbeiten, legt man in der Regel Dynpros an. Diese haben PBO-Module, welches vor der Anzeige des Dynpros durchlaufen werden, und PAI-Module, die nach einer Benutzereingabe (Enter-Taste, Drücken eines Buttons...) durchlaufen werden. In den PAI-Modulen bekommt man dann den sogenannten OK-Code (auch im Feld SY-UCOMM), welchen man einem Button bei der Definition des Status zuordnen kann.

Man würde dann im Regefall ein PAI-Modul anlegen, welches beim Klick auf den Button die gewählte Zeile ausliest und löscht.

Wenn man ohne Dynpros arbeiten möchte, kann man auch das Ereignis AT USER-COMMAND in den Report einfügen und dort auf den OK-Code reagieren:

Code: Alles auswählen.

REPORT ztest. 

" [...] 

START-OF-SELECTION.

  SET PF-STATUS 'ZTESTSTATUS'.

" [...] 

AT USER-COMMAND.

  CASE sy-ucomm.
    WHEN 'DELETE'.
      " [...] 
  ENDCASE.

Da Du ohnehin beim Doppelklick mit den SALV-Events arbeitest, wäre es vielleicht besser, den Button auch im SALV zu definieren und den Status ganz wegzulassen.

Der SALV hat eine Toolbar, der man eigene Buttons hinzufügen kann (Beispiel siehe hier). Die Verarbeitung würde dann ebenfalls in der Klasse LCL_EVENTS ablaufen.

Zum Löschen selber: Du kannst die Zeile in der internen Tabelle (DELETE) löschen, z.B. über den Index oder den Schlüssel. Das SALV-Objekt hat eine Methode zum Abrufen einer Liste der ausgewählten Zeilen:

Code: Alles auswählen.

    DATA: lt_selected_rows   TYPE salv_t_row.

    lt_selected_rows = go_salv->get_selections( )->get_selected_rows( ).
Danach muss einmal die Refresh-Methode des SALV aufgerufen werden, damit die Daten aktualisiert werden.

Code: Alles auswählen.

go_salv->refresh( refresh_mode = if_salv_c_refresh=>full ).

Re: Custom Button für Application Toolbar

Beitrag von Draven (ForumUser / 0 / 0 / 0 ) »
Hallo erstmal,
Vielen lieben Dank schonmal für die zahlreichen Hilfen.
In dem Beispiel was du verlinkt hast (https://codezentrale.de/abap-salv-table ... -abfangen/) komme ich leider nicht ganz mit.

Ich weiß z.B. nicht was ich in Zeile 30 DATA: it_tab TYPE ... schreiben muss, da das alles ganz neue Funktionen sind. Oder muss ich für mein Ziel lediglich die Zeilen 42-48 beachten um einen neuen eigenen Button hinzuzufügen?

[Nachtrag:]
Ich hab nun meinen Code erweitert. Ich habe nach start-of-selection in dem Try

Code: Alles auswählen.

 bei Data: it_selected_rows TYPE salv_t_row hinzugefügt 
Des Weiteren habe über den o_salv->get_functions( )->set_all( abap_true ).
die Codezeilen: 
it_selected_rows = o_salv->get_selections( )->get_selected_rows( ).
go_salv->refresh( refresh mode = if_salv_c_refresh=>full ).
hinzugefügt, aber die go_alv gibt es nicht steht dort. Also habe ich versucht 
Data: go_salv TYPE und TYPE REF TO zu machen aber da kam nichts sinnvolles bei mir rum und ich weiß leider nicht was genau ich da reinschreiben muss. 

Liebe Grüße 
Nochmal herzlichsten Dank für alles.
Zuletzt geändert von Draven am 08.09.2023 11:49, insgesamt 1-mal geändert.

Re: Custom Button für Application Toolbar

Beitrag von DeathAndPain (Top Expert / 1939 / 257 / 412 ) »
Lukas Sanders hat geschrieben:
08.09.2023 09:31
um mit Buttons im Status zu arbeiten, legt man in der Regel Dynpros an.
Kommt darauf an, wo sich der Button befinden soll. Ich hatte ihn so verstanden, dass er ihn der Buttonleiste des ALV hinzufügen möchte.

Re: Custom Button für Application Toolbar

Beitrag von Lukas Sanders (ForumUser / 68 / 7 / 34 ) »
Hallo,
Draven hat geschrieben:
08.09.2023 10:48
Ich weiß z.B. nicht was ich in Zeile 30 DATA: it_tab TYPE ... schreiben muss, da das alles ganz neue Funktionen sind. Oder muss ich für mein Ziel lediglich die Zeilen 42-48 beachten um einen neuen eigenen Button hinzuzufügen?
Mit DATA: it_tab... wird eine interne Tabelle deklariert, die ist in Deinem Programm schon vorhanden (gt_zbackwaren). Relevant sind nur die Methode on_toolbar_click in der Eventhandler-Klasse (ab Zeile 9 und ab Zeile 16) sowie Zeilen 44 bis 51. In Zeile 40 werden die übrigen Standard-Buttons (Exportieren, Sortieren...) ausgeblendet, man könnte diese aber auch einblenden, je nach Bedarf.
Draven hat geschrieben:
08.09.2023 10:48
[...] aber die go_alv gibt es nicht steht dort. Also habe ich versucht
Data: go_salv TYPE und TYPE REF TO zu machen aber da kam nichts sinnvolles bei mir rum und ich weiß leider nicht was genau ich da reinschreiben muss.
go_alv ist in diesem Beispiel die Referenz auf das SALV-Objekt, in Deinem Protramm o_salv.

Seite 1 von 1

Vergleichbare Themen

8
Antw.
3788
Views
Eigener Button in der Application Toolbar als Popup
von MichaelC » 11.03.2013 15:45 • Verfasst in ABAP Objects®
1
Antw.
1384
Views
6
Antw.
1975
Views
Custom Button für cl_salv_tree
von M4cM4rco » 06.05.2020 13:03 • Verfasst in ABAP® für Anfänger
5
Antw.
3749
Views
Button in ALV Toolbar
von Ines » 29.06.2007 14:11 • Verfasst in ABAP® für Anfänger
0
Antw.
1071
Views
ALV Toolbar INSERT Button
von SAP_ENTWICKLER » 06.12.2017 07:49 • Verfasst in ABAP® Core

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.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
Gestern von Bright4.5 1 / 519
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2150
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8745