Showing posts with label Classical Report. Show all posts
Showing posts with label Classical Report. Show all posts

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: