Tuesday, July 22, 2008

Adding custom context menu in classical list

By Joyjit Ghosh,
Kolkata
, India
.

Code:

*&---------------------------------------------------------------------*
*& Report Z_CONTEXT_MENU_DEMO
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*

REPORT z_context_menu_demo.

* Table declaration
DATA: i_vbak TYPE STANDARD TABLE OF vbak INITIAL SIZE 0,
i_vbap TYPE STANDARD TABLE OF vbap INITIAL SIZE 0.

* Workarea declaration
DATA: w_vbak TYPE vbak,
w_vbap TYPE vbap.

START-OF-SELECTION.

* Set custom status
SET PF-STATUS 'BASIC'.

* Fetch header data
SELECT * FROM vbak

INTO TABLE i_vbak

UP TO 50 ROWS.

IF sy-subrc = 0.

* Fetch line item data

SELECT * FROM vbap

INTO TABLE i_vbap

FOR ALL ENTRIES IN i_vbap

WHERE vbeln = i_vbap-vbeln.

CHECK sy-subrc = 0.

* Display basic list

LOOP AT i_vbak INTO w_vbak.

FORMAT COLOR COL_HEADING.

WRITE : /10 w_vbak-vbeln,

20 w_vbak-erdat,

35 w_vbak-erzet,

55 w_vbak-ernam.

HIDE: w_vbak-vbeln.

ENDLOOP.

ENDIF.

AT USER-COMMAND.

* Handle user command
CASE sy-ucomm.

WHEN 'DETAIL'.

CHECK NOT w_vbak IS INITIAL.

* Display detail list

LOOP AT i_vbap INTO w_vbap WHERE vbeln =

w_vbak-vbeln.

FORMAT COLOR COL_HEADING.

WRITE : /10 w_vbap-vbeln,

25 w_vbap-posnr,

35 w_vbap-matnr,

55 w_vbap-matwa.

ENDLOOP.

WINDOW STARTING AT 20 20

ENDING AT 120 110.

ENDCASE.

*&---------------------------------------------------------------------*
*& Form on_ctmenu_request
*&---------------------------------------------------------------------*
* Creation of custom context menu- It is called dynamically
* by ABAP runtime
*----------------------------------------------------------------------*
* -->L_MENU Handle for context menu
*----------------------------------------------------------------------*

FORM on_ctmenu_request USING l_menu TYPE REF TO cl_ctmenu.


DATA lin TYPE i.

GET CURSOR LINE lin.

IF lin > 2 AND sy-lsind = 0.

* Add menu
CALL METHOD l_menu->add_function
EXPORTING
fcode = 'DETAIL'
text = text-001.

ENDIF.

* Add menu
CALL METHOD l_menu->add_function

EXPORTING

fcode = 'BACK'

text = text-002.

ENDFORM. "on_ctmenu_request

How SAP calls the routine ON_CTMENU_REQUEST:

Whenever user presses right mouse button or shift + F10 key combinations sap triggers system event and calls the method DISPATCH_SYSTEM_EVENTS of class CL_GUI_CFW. Within it, it calls the method DISPATCH of class LCL_DYNPRO_PROXY (defined within the class pool of CL_GUI_CFW).




From this method (DISPATCH) it calls the routine ON_CTMENU_REQUEST which is defined in our program.




Output:

Basic list:

Detail list:


No comments: