ALV Button abfangen

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
9 Beiträge • Seite 1 von 1
9 Beiträge Seite 1 von 1

ALV Button abfangen

Beitrag von Mr. ABAP (ForumUser / 97 / 0 / 0 ) »
Kann mir jemand sagen, ob es die Möglichkeit gibt, dass wenn ich einen (Standard)-Button im ALV drücke zuvor noch eigene prüfungen durchlaufen kann?

Ich drücke z.b. in einem eingabebereiten alv den Button Zeile entfernen und möchte aber zuvor noch prüfen, ob dies überhaupt möglich sein darf...

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


Beitrag von Flo (Specialist / 161 / 0 / 0 ) »
Bin mir nichtmehr ganz sicher aber glaube es gab das Event Before_user_command im alv_grid für diesen zweck.
Aus der SAP-Bibliothek:
Ändern von Standardfunktionen

Einsatzmöglichkeiten

Die Standardfunktionen sind auf keinen speziellen Anwendungsfall zugeschnitten. Spezielles Wissen über die angezeigten Daten können also nicht berücksichtigt werden. Im Einzelfall ist es möglich, daß eine Standardfunktion - wie das Sortieren nach einer bestimmten Spalte - in einer Anwendung effizienter programmiert werden kann.

Ablauf

Definieren Sie eine Ereignisbehandlermethode zum Ereignis before_user_command. Dieses Ereignis wird ausgelöst, wenn der Benutzer eine Funktion ausgewählt hat. Das ALV Control übergibt also die Kontrolle an die Anwendung bevor die Funktion ausgeführt wird. Über den Parameter I_UCOMM des Ereignisses können Sie den Funktionscode auf die Funktion, die Sie ändern möchten, eingrenzen.
Implementieren Sie Ihren eigenen Algorithmus für die Funktion innerhalb der Ereignisbehandlermethode. Sie können dabei Methoden des ALV Control aufrufen.
Setzen Sie abschließend den Funktionscode zurück, damit die Standardfunktion nicht mehr ausgeführt wird:
CALL METHOD <Instanz des ALV Control> ->set_user_command
exporting I_UCOMM = SPACE.



Wenn Sie bestimmte Funktionen der Toolbar überhaupt nicht brauchen, können Sie diese auch für die gesamte Lebensdauer des Control ausblenden. Übergeben Sie dazu mit Hilfe des Parameters IT_TOOLBAR_EXCLUDING der Methode set_table_for_first_display eine Tabelle mit den auszublendenden Funktionskodes.

Beitrag von Mr. ABAP (ForumUser / 97 / 0 / 0 ) »
Hallo Flo,

danke für deine Antwort/Hilfe.
Jedoch bringt mir diese Methode nichts bei den Ändern-Funktionen des ALV´s. Sie springt nur an, wenn die Standard-Buttons, wie Sortieren, Suchen etc... ausgeführt werden, jedoch nicht bei Zeile anhängen, Zeile löschen etc.

Jedoch hab ich jetzt eine ganz gute und logische Lösung gefunden.

Und zwar prüfe ich in der Methode data_changed über die Tabelle mt_eleted_rows, ob die Zeile gelöscht werden darf oder nicht. Darf sie nicht gelöscht werden, so hänge ich den Eintrag erneut per append an meine interne Tabelle an und bring eine Fehlermeldung. In der Methode 'data_changed_finish' schmeiss ich dann einen Refresh_Table_Display, deren Exporting-Parameter is_stable auf jeden Fall gefüllt sein muss. Dann funzts. Ist zwar keine sehr saubere Lösung, aber es funktioniert und so lange SAP keine weiteren Infos bzgl. der Editierbarkeit veröffentlich, kann ich mit dieser Möglichkeit ganz gut leben.

Schade eigentlich nur, dass in den anderen Beiträgen, die sich in diesem Forum auf dieses Thema beziehen, nicht abgeschlossen werden, bzw. keine letztendliche erfolgs- oder nichterfolgsantwort geschrieben wird.

Trotzdem nochmal danke dir
Gruss MR. ABAP

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

nur so eine idee als ansatz:

lege einen eigenen status für dein alv an (kopie des originals). dort änderst du den functionscode für zeile anfügen ab (zb FC = pZeile =>> u_pZeile)

da dies nun ein eigendefinierter FC ist kannst du diesen prüfen.

beim prüfen: zuerst eigene prüfung - und wenn diese OK dann den FC wieder auf den originalcode umstellen.


hab sowas mal beim REUSE ALV gemacht

hier wurden die FC um _U erweitert.
wenn die prüfung OK ist, wird beim FC das _U weggeschnitten. Damit enspricht der FC wieder dem original. nach verlassen meiner FORM wird die originalroutine ausgeführt.

Code: Alles auswählen.

FORM user_command USING r_ucomm     LIKE sy-ucomm
                        rs_selfield TYPE slis_selfield.

DATA:answer(1) TYPE c.

  CASE r_ucomm.
    WHEN '&F03_U' OR '&F12_U' OR '&F15_U'.
*     Abfrage beim verlassen des ALV
*     Lese oder Schreibzugriff
      IF g_f_islogged = 'X' OR g_f_data_changed = ''.
        r_ucomm = r_ucomm(4).
      ELSE.
        CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
          EXPORTING
            defaultoption     = 'J'
            textline1         = 'Möchten Sie die Liste verlassen?'(p01)
            textline2  = 'Nicht gespeicherte Daten gehen verloren!'(p02)
            titel             = 'Liste verlassen'(p03)
            cancel_display    = ''
          IMPORTING
            answer            = answer.

        IF answer = 'J'.
          r_ucomm = r_ucomm(4).
        ENDIF.
      ENDIF.
mfg
Richard

Beitrag von Mr. ABAP (ForumUser / 97 / 0 / 0 ) »
So langsam wirds interessant.
lege einen eigenen status für dein alv an (kopie des originals).
Was verstehst du unter kopie des originals. Meinst du einen eigenen Button mit dem gleichen Icon der Toolbar hinzufügen und den Standard-Entfernen-Button daktivieren, dann beim Klick auf meinen neuen Button als erstes eigene Prüfung starten und dann den Standard-Entfernen-Button anschmeissen, oder?

Versteh ich das so richtig?

Vielen Dank für Info!

Beitrag von Flo (Specialist / 161 / 0 / 0 ) »
Wir haben bei uns im editierbaren ALV die Standardknöpfe für Zeile löschen und anfügen deaktiviert und eigene Knöpfe eingebaut ( auch nicht besonders schön ). Das Problem was wir noch haben ist: Man kann nicht verhindern dass Zeilen mit der ENTFERNEN Taste gelöscht werden. Oder kennt da jmd ne Möglichkeit wie man das abfangen kann?

Beitrag von Mr. ABAP (ForumUser / 97 / 0 / 0 ) »
Auf die schnelle hätte ich dir folgenden Tipp:

Entferne doch einfach die Zeilenmarkierspalte, dass er die spalte nicht mehr markieren kann, so kann er auch keine Zeile mehr löschen.

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

wie gesagt, hab's nur beim REUSE gamacht:

dort geht's so:
neuer Status
Zusätze - Vorlage abgleichen
programm = SAPLKKBL
status = STANDARD_FULLSCREEN

und damit hat man einen Status, der genau dem des REUSE-ALV entspricht.
dann beim Aufruf

Code: Alles auswählen.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
   EXPORTING
      i_callback_pf_status_set          = 'SET_PF_STATUS'
.
.
.
FORM set_pf_status USING rt_extab TYPE slis_t_extab.

  SET PF-STATUS '0001'.

ENDFORM.                                                 " SET_PF_STATUS
wie man's beim OO-ALV realsiert weiß ich nicht.

mfg
Richard

Beitrag von Mr. ABAP (ForumUser / 97 / 0 / 0 ) »
Ja gut, kann mir eher nicht vorstellen, dass dies auch beim OO-ALV möglich ist, da es ja sein kann, dass ich mehrere ALV´s und zugleich Toolbars auf einem Dynpro hab und PF-Status eher ungeeignet.
Wobei deine Idee bzw. dein Prinzip interessant ist. Vielleicht kann ich das trotzdem bei mir realisieren. Versuche ich mal bei Gelegenheit, aber im Moment funzts ganz gut...

Danke und Gruss

Seite 1 von 1

Vergleichbare Themen

4
Antw.
4373
Views
ALV-GRID delete button event abfangen
von fba9901 » 20.10.2014 17:54 • Verfasst in ABAP® Core
1
Antw.
284
Views
statt Button F8 Button Close setzen
von HH_ABAP » 18.05.2023 21:16 • Verfasst in ABAP® für Anfänger
5
Antw.
4503
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
17
Antw.
5341
Views
Abfangen von /h
von zzcpak » 29.06.2005 16:09 • Verfasst in Basis
2
Antw.
2157
Views
Abfangen von Fehler
von debianfan » 06.11.2017 13:33 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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.

Unbeantwortete Forenbeiträge

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