Event Receiver für mehrere ALV-Instanzen

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).

Event Receiver für mehrere ALV-Instanzen

Postby Gianluca500 » Mon Jan 31, 2011 9:51 am

Hallo,

ich möchte für zwei verschiedene ALV-Objekte dieselbe Event-Receiver-Klasse verwenden.
Um innerhalb der Events dann zu wissen, aus welchem Objekt ich gerade komme, habe ich folgendes gebastelt:

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. *----------------------------------------------------------------------*
  2. *       CLASS lcl_event_receiver DEFINITION
  3. *----------------------------------------------------------------------*
  4. *
  5. *----------------------------------------------------------------------*
  6. CLASS lcl_event_receiver DEFINITION.
  7.   PUBLIC SECTION.
  8.     METHODS:
  9.       user_command_tab1
  10.         FOR EVENT user_command OF cl_gui_alv_grid
  11.           IMPORTING e_ucomm,
  12.       user_command_tab2
  13.         FOR EVENT user_command OF cl_gui_alv_grid
  14.           IMPORTING e_ucomm.
  15. ENDCLASS.                    "lcl_event_receiver DEFINITION
  16.  
  17. *----------------------------------------------------------------------*
  18. *       CLASS lcl_event_receiver IMPLEMENTATION
  19. *----------------------------------------------------------------------*
  20. *
  21. *----------------------------------------------------------------------*
  22. CLASS lcl_event_receiver IMPLEMENTATION.
  23.   METHOD user_command_tab1.
  24.     PERFORM event_user_command USING 'TAB1' e_ucomm.
  25.   ENDMETHOD.                    "user_command_tab1
  26.   METHOD user_command_tab2.
  27.     PERFORM event_user_command USING 'TAB2' e_ucomm.
  28.   ENDMETHOD.                    "user_command_tab2
  29. ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION
  30.  
  31. DATA: go_cuco  TYPE REF TO cl_gui_custom_container,
  32.       go_split TYPE REF TO cl_gui_easy_splitter_container,
  33.       go_grid1 TYPE REF TO cl_gui_alv_grid,
  34.       go_grid2 TYPE REF TO cl_gui_alv_grid,
  35.       go_event TYPE REF TO lcl_event_receiver.
  36.  
  37. CREATE OBJECT go_event.
  38. SET HANDLER go_event->user_command_tab1 FOR go_grid1.
  39. SET HANDLER go_event->user_command_tab2 FOR go_grid2.
  40.  
  41. *&---------------------------------------------------------------------*
  42. *&      Form  event_user_command
  43. *&---------------------------------------------------------------------*
  44. *       text
  45. *----------------------------------------------------------------------*
  46. FORM event_user_command USING uv_tab   TYPE string
  47.                               uv_ucomm TYPE syucomm.
  48.  
  49.   CASE uv_tab.
  50.     WHEN 'TAB1'.
  51.       CASE uv_ucomm.
  52. *       to do
  53.       ENDCASE.
  54.     WHEN 'TAB2'.
  55.       CASE uv_ucomm.
  56. *       to do
  57.       ENDCASE.
  58.  
  59. ENDFORM.                    "event_user_command
  60.  
GeSHi ©


Die Frage ist, geht das noch ein bisschen eleganter? Auf die Art und Weise muss ich jeden Event-Handler doppelt definieren und implementieren.
Gibt es vielleicht eine direkte Möglichkeit rauszubekommen, aus welcher Instanz das Event aufgerufen wurde?

Vielen Dank und Gruß

Benji
Gianluca500
..
..
 
Posts: 49
Joined: Tue May 18, 2010 11:15 am

Postby Britta1726 » Sun Mar 06, 2011 4:25 pm

Hallo,

bei der Definition der Methoden deiner Event-Receiver Klassen kann die Variable "SENDER" zusätzlich angegeben werden. Diese Variable wird implizit von der Laufzeitumgebung gefüllt.
Aus der SAP-Doku: Intanzereignisse enthalten immer den impliziten Parameter SENDER, der als Referenz auf die Klasse bzw. das Interface typisiert ist, in dem das Ereignis deklariert wird.

Das ganze macht natürlich nur Sinn, wenn du von unterschiedlichen "Sendern" kommst.
Ich konstruiere mir dafür üblicherweise je eine eigene Controller-Klasse (Stichwort MVC), welche das Grid verwaltet (mit Daten füllt etc).

Gruß Gregor
Britta1726
.
.
 
Posts: 3
Joined: Mon May 03, 2010 5:34 pm

Postby Gianluca500 » Mon Mar 07, 2011 7:45 am

Vielen Dank, die Sender-Variable hatte ich schon mal in irgendeinem Beispiel-Coding gefunden, mich dann aber gewundert wieso sie nicht in der Parameter-Liste der Methode auftaucht.

Für mein aktuelles Coding ist eine Controller-Klasse etwas überdimensioniert. Ich gebe im Grunde nur zwei Grids aus und möchte nun, je nach Grid, anders auf die Toolbar reagieren.
Aber ich werde das mal im Hinterkopf behalten. MVC ist mir zwar ein Begriff, aber bisher kam ich noch nicht auf die Idee das auf ABAP anzuwenden.

Vielen Dank nochmal!
Gianluca500
..
..
 
Posts: 49
Joined: Tue May 18, 2010 11:15 am


Return to ABAP Objects®

Who is online

Users browsing this forum: No registered users and 13 guests