By Joyjit Ghosh, IBM India
*&---------------------------------------------------------------* *& Report Z_CONTEXT_MENU_DEMO *& *&---------------------------------------------------------------* *& published at SAPTechnical.COM *& *&---------------------------------------------------------------*
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:<?XML:NAMESPACE PREFIX = O />
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: