Filter-Handler in ALV-Grid? Thema ist als GELÖST markiert

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

Filter-Handler in ALV-Grid?

Beitrag von abapnewbie (ForumUser / 13 / 7 / 0 ) » 30.07.2020 11:34
Hallo Community,

ich arbeite momentan an einer Aufgabe, durch die ich den Bedarf habe ein Event auszulösen, wenn der User einen Filter gesetzt hat.

Das ALV-Objekt ist mit der Klasse CL_GUI_ALV_GRID typisiert.

Da ich kein passendes Event gefunden habe, handle ich das ganze aus Not über den Refresh-Event, da nachdem ein Filter gesetzt wurde der entsprechende Handler aufgerufen wird. Ich finde diese Lösung allerdings etwas unsauber, da ich an anderen stellen die Tabelle auffrischen möchte und deshalb auf viele Sachen gleichzeitig achten muss.

Gibt es nicht eine saubere Möglichkeit die ich ggf. übersehen habe, sodass ich jedes mal, wenn der User über den Standard-Filter-Button in der ALV einen Filter setzt meine entsprechende Methode aufrufen kann?


Re: Filter-Handler in ALV-Grid?

Beitrag von Tron (Top Expert / 1167 / 22 / 263 ) » 30.07.2020 12:46
Moin,
Clicken auf den Filter-Button, kann man über die Events
BEFORE_USER_COMMAND und AFTER_USER_COMMAND
abfangen.

Code: Alles auswählen.

*---------------------------------------------------------------------*
*       CLASS lcl_event_handler DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_event_handler DEFINITION .
  PUBLIC SECTION .
    METHODS:
*--To add new functional buttons to the ALV toolbar
      handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
        IMPORTING e_object e_interactive ,

*--To implement user commands
      handle_user_command
                    FOR EVENT user_command OF cl_gui_alv_grid
        IMPORTING e_ucomm ,



*--To be triggered before user commands
      handle_before_user_command
                    FOR EVENT before_user_command OF cl_gui_alv_grid
        IMPORTING e_ucomm ,

*--To be triggered after user commands
      handle_after_user_command
                    FOR EVENT after_user_command OF cl_gui_alv_grid
        IMPORTING e_ucomm e_saved e_not_processed ,

*--Double-click control
      handle_double_click
                    FOR EVENT double_click OF cl_gui_alv_grid
        IMPORTING e_row e_column es_row_no.

  PRIVATE SECTION.
ENDCLASS.                    "lcl_event_handler DEFINITION


*---------------------------------------------------------------------*
*       CLASS lcl_event_handler IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_event_handler IMPLEMENTATION .

*--Handle Toolbar
  METHOD handle_toolbar.
    PERFORM handle_toolbar USING e_object e_interactive .
  ENDMETHOD .                    "handle_toolbar

*--Handle User Command
  METHOD handle_user_command .
    PERFORM handle_user_command USING e_ucomm .
  ENDMETHOD.                    "handle_user_command

*--Handle Before User Command JG
  METHOD handle_before_user_command .
    PERFORM handle_before_user_command USING e_ucomm .
  ENDMETHOD .                    "handle_before_user_command

*--Handle After User Command JG
  METHOD handle_after_user_command .
    PERFORM handle_after_user_command USING e_ucomm e_saved e_not_processed .
  ENDMETHOD .                    "handle_before_user_command

*--Double-click control
  METHOD handle_double_click .
    PERFORM handle_double_click USING e_row e_column es_row_no .
  ENDMETHOD .                    "handle_double_click


ENDCLASS.                    "lcl_event_handler IMPLEMENTATION

DATA gr_event_handler TYPE REF TO lcl_event_handler .


:
:
*--Registering handler methods to handle ALV Grid events JG

    SET HANDLER gr_event_handler->handle_double_click FOR grid1 .
    SET HANDLER gr_event_handler->handle_toolbar FOR grid1.
    SET HANDLER gr_event_handler->handle_user_command FOR grid1.
    SET HANDLER gr_event_handler->handle_before_user_command FOR grid1 .
    SET HANDLER gr_event_handler->handle_after_user_command FOR grid1 .

Code: Alles auswählen.

*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->I_UCOMM    text
*---------------------------------------------------------------------*
FORM handle_before_user_command USING i_ucomm TYPE syucomm .
  CASE i_ucomm .
    WHEN '&MB_FILTER' OR '&DELETE_FILTER' OR '&FILTER'.
  ENDCASE .
ENDFORM .                    "handle_before_user_command

FORM handle_after_user_command USING e_ucomm e_saved e_not_processed .
break-point.
ENDFORM.
gruß Jens

Folgende Benutzer bedankten sich beim Autor Tron für den Beitrag (Insgesamt 2):
Icke0801abapnewbie

<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Filter-Handler in ALV-Grid?

Beitrag von abapnewbie (ForumUser / 13 / 7 / 0 ) » 31.07.2020 10:40
Tron hat geschrieben:
30.07.2020 12:46
Moin,
Clicken auf den Filter-Button, kann man über die Events
BEFORE_USER_COMMAND und AFTER_USER_COMMAND
abfangen.

Code: Alles auswählen.

*---------------------------------------------------------------------*
*       CLASS lcl_event_handler DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_event_handler DEFINITION .
  PUBLIC SECTION .
    METHODS:
*--To add new functional buttons to the ALV toolbar
      handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
        IMPORTING e_object e_interactive ,

*--To implement user commands
      handle_user_command
                    FOR EVENT user_command OF cl_gui_alv_grid
        IMPORTING e_ucomm ,



*--To be triggered before user commands
      handle_before_user_command
                    FOR EVENT before_user_command OF cl_gui_alv_grid
        IMPORTING e_ucomm ,

*--To be triggered after user commands
      handle_after_user_command
                    FOR EVENT after_user_command OF cl_gui_alv_grid
        IMPORTING e_ucomm e_saved e_not_processed ,

*--Double-click control
      handle_double_click
                    FOR EVENT double_click OF cl_gui_alv_grid
        IMPORTING e_row e_column es_row_no.

  PRIVATE SECTION.
ENDCLASS.                    "lcl_event_handler DEFINITION


*---------------------------------------------------------------------*
*       CLASS lcl_event_handler IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_event_handler IMPLEMENTATION .

*--Handle Toolbar
  METHOD handle_toolbar.
    PERFORM handle_toolbar USING e_object e_interactive .
  ENDMETHOD .                    "handle_toolbar

*--Handle User Command
  METHOD handle_user_command .
    PERFORM handle_user_command USING e_ucomm .
  ENDMETHOD.                    "handle_user_command

*--Handle Before User Command JG
  METHOD handle_before_user_command .
    PERFORM handle_before_user_command USING e_ucomm .
  ENDMETHOD .                    "handle_before_user_command

*--Handle After User Command JG
  METHOD handle_after_user_command .
    PERFORM handle_after_user_command USING e_ucomm e_saved e_not_processed .
  ENDMETHOD .                    "handle_before_user_command

*--Double-click control
  METHOD handle_double_click .
    PERFORM handle_double_click USING e_row e_column es_row_no .
  ENDMETHOD .                    "handle_double_click


ENDCLASS.                    "lcl_event_handler IMPLEMENTATION

DATA gr_event_handler TYPE REF TO lcl_event_handler .


:
:
*--Registering handler methods to handle ALV Grid events JG

    SET HANDLER gr_event_handler->handle_double_click FOR grid1 .
    SET HANDLER gr_event_handler->handle_toolbar FOR grid1.
    SET HANDLER gr_event_handler->handle_user_command FOR grid1.
    SET HANDLER gr_event_handler->handle_before_user_command FOR grid1 .
    SET HANDLER gr_event_handler->handle_after_user_command FOR grid1 .

Code: Alles auswählen.

*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->I_UCOMM    text
*---------------------------------------------------------------------*
FORM handle_before_user_command USING i_ucomm TYPE syucomm .
  CASE i_ucomm .
    WHEN '&MB_FILTER' OR '&DELETE_FILTER' OR '&FILTER'.
  ENDCASE .
ENDFORM .                    "handle_before_user_command

FORM handle_after_user_command USING e_ucomm e_saved e_not_processed .
break-point.
ENDFORM.
gruß Jens
Vielen Dank für den Tipp! Jetzt konnte ich durchs Abfangen der FCODES &FILTER und &MB_FILTER mein Ziel erreichen und die Filter-Logik vom refresh-Event trennen!

Seite 1 von 1

Über diesen Beitrag



Unterstütze die Community und teile den Beitrag für mehr Leser und besseren Inhalt:

Aktuelle Forenbeiträge

SELECT funktioniert nicht
vor 16 Stunden von black_adept gelöst 15 / 232
Instanzerzeugung von abgeleiteten Typen
vor 2 Tagen von nickname8 gelöst 5 / 99

Vergleichbare Themen

Problem mit Filter auf Gleichheit im ALV Grid
von denno » 22.02.2005 11:11
Event Handler mit OLE
von snoodels » 10.12.2005 11:27
Handler- und ALV-Problem
von newbie007 » 10.12.2011 10:54
Exception Handler + Fehlerpopup
von sidneyweiher » 26.01.2015 10:43
ABAP RFC Remote Handler
von Shaguar » 31.08.2012 13:06