CL_CTMENU 이놈으로 만드는 것 같은데 단순하게 오브젝트 만들고 add_function을 하면 덤프가 떨어지는 군요...
혹시 요놈을 쓰는 예제 소스나 설명 좀 해주실 분 없으신가요 ㅠㅠ
아.. 참고로 이벤트에의한 컨텍스트 메뉴 호출은 구현 해 놓은 상태입니다.
Drag & Drop 을 해서 끌어 놓으면 컨텍스트 메뉴가 딱 뜨게 하고 싶거든요...
현재 node_context_menu_request 요 이벤트 발생 시 에는 cl_ctmenu를 참조하는 menu라는 파라메터를 주기 때문에
add_function을 콜해서 만들었습니다.
제 생각이지만 이벤트에서 던져주는 menu라는 오브젝트를 먼저 셋팅을 해야 할 것 같은데 어떻게 셋팅을 해야할지
모르겠습니다. 제발 도와 주십시요...이벤트로 밖에 못 쓰는건가요 ㅠ
아래 소스 참조해서 해결하세요
ALV에서 Contextmenu 생성하는 예제입니다.
=====================================================================
*&---------------------------------------------------------------------*
*& Report Z_ALV_CONTEXTMENU
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT Z_ALV_CONTEXTMENU NO STANDARD PAGE HEADING.
*******************************************************************
* Type pool declaration
*******************************************************************
TYPE-POOLS: slis.
******************************************************************
* Internal table declaration
******************************************************************
DATA: BEGIN OF gt_outtab OCCURS 0.
INCLUDE STRUCTURE sflight.
DATA: END OF gt_outtab.data: gt_events TYPE slis_t_event.
*****************************************************************
* Structure / Variable declaration
*****************************************************************
DATA: g_repid LIKE sy-repid,
event TYPE slis_alv_event.
*****************************************************************
* Event: START-OF-SELECTION
******************************************************************
START-OF-SELECTION.
* Storing the program name
g_repid = sy-repid.
* Building ALV event table
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 4
IMPORTING
et_events = gt_events
EXCEPTIONS
list_type_wrong = 1
OTHERS = 2. IF sy-subrc = 0.
REFRESH gt_events.
* Adding records for CONTEXT_MENU event
event-name = 'CONTEXT_MENU'.
event-form = 'CONTEXT_MENU'.
APPEND event TO gt_events. ENDIF.
* Data Selection
SELECT * FROM sflight INTO CORRESPONDING FIELDS
OF TABLE gt_outtab
UP TO 00030 ROWS.
* Display ALV grid
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE'
i_callback_program = g_repid
i_callback_user_command = 'USER_COMMAND'
i_structure_name = 'SFLIGHT'
it_events = gt_events
TABLES
t_outtab = gt_outtab
EXCEPTIONS
program_error = 1
OTHERS = 2. IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*****************************************************************
* FORM html_top_of_page
*****************************************************************
FORM html_top_of_page USING top TYPE REF TO cl_dd_document.
CALL METHOD top->add_text
EXPORTING
text = 'Hello world '
sap_style = 'heading'.
CALL METHOD top->add_gap
EXPORTING
width = 200.
CALL METHOD top->add_picture
EXPORTING
picture_id = 'ENJOYSAP_LOGO'.ENDFORM.
"html_top_of_page*******************************************************
*********
* Form context_menu
****************************************************************
FORM context_menu USING e_object TYPE REF TO cl_ctmenu.
DATA: l_smenu TYPE REF TO cl_ctmenu. IF e_object IS BOUND.
* Create custom Sub-menu to hide column on which right
* mouse button will be clicked
CREATE OBJECT l_smenu.
CALL METHOD l_smenu->add_function
EXPORTING
fcode = 'ZFN1'
text = 'Hide Column'(001).
CALL METHOD e_object->add_submenu
EXPORTING
menu = l_smenu
text = 'Hide'(002).
ENDIF.
ENDFORM.
"CONTEXT_MENU***********************************************************
*******
* Form user_command
******************************************************************
FORM user_command USING r_ucomm TYPE sy-ucomm
ls_selfield TYPE slis_selfield.
DATA: g_grid TYPE REF TO cl_gui_alv_grid,
t_catalog TYPE lvc_t_fcat,
w_catalog TYPE lvc_s_fcat,
l_repid TYPE sy-repid.
CASE r_ucomm.
* When 'hide column' sub-menu is clicked from the context menu
* then hide the column from where this is happened
WHEN 'ZFN1'.
* Get the global instance of the ALV grid as well as
* it's field catalog info.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_callback_program = l_repid
e_grid = g_grid
et_fieldcat_lvc = t_catalog.
CHECK l_repid = g_repid.
IF g_grid IS BOUND AND t_catalog[] IS NOT INITIAL.
* Set the 'NO_OUT' attribute of the catalog to 'X'
w_catalog-no_out = 'X'.
* Modify the field with this above value
* on which right click occured
MODIFY t_catalog FROM w_catalog TRANSPORTING no_out
WHERE fieldname = ls_selfield-fieldname.
IF sy-subrc = 0.
* Set the field catalog with this modified one
CALL METHOD g_grid->set_frontend_fieldcatalog
EXPORTING
it_fieldcatalog = t_catalog. ENDIF.
ENDIF.
WHEN OTHERS.
* Do nothing
ENDCASE.
ls_selfield-refresh = 'X'.
ENDFORM. "USER_COMMAND