ABAP_自定义屏幕06—上下文菜单
1、上下文菜单解析
上下文菜单,即鼠标右键菜单
分类:固定菜单、动态菜单
加载方式:固定加载、动态加载
切记:通常使用动态菜单+动态加载
2、固定菜单
2.1 加载到屏幕:固定加载
代码添加实现子程序:FORM on_ctmenu_屏幕2000的上下文菜单命名
*------ 上下文菜单实现 -------
FORM on_ctmenu_default USING p_menu TYPE REF TO cl_ctmenu.
CALL METHOD cl_ctmenu=>load_gui_status
EXPORTING
program = sy-repid"SY-REPID指的是本程序
status = 'CONTEXT_MENUS'"定义的上下文菜单id
menu = p_menu.
ENDFORM. "on_ctmenu_default
2.2 固定菜单效果图
2.3 备注
1、当创建、代码都无误的,右键菜单仍不出现,可能是SAP设置了鼠标右键复制黏贴,取消即可
2、右键菜单是输入框的,并不是屏幕的,右键输入框才会出现
3、如只需某个输入框才有右键菜单,按如下设置上下文菜单ID
3A 清除屏幕的上下文菜单ID
3B 在控件设计页面定义上下文菜单ID
3C 代码把此菜单ID加载
上面改为只有姓名才有右键菜单,具体如下
在主程序添加输入框(姓名)的右键菜单代码:FORM on_ctmenu_name
*------ 上下文菜单实现 -------
FORM on_ctmenu_name USING p_menu TYPE REF TO cl_ctmenu.
CALL METHOD cl_ctmenu=>load_gui_status
EXPORTING
program = sy-repid"SY-REPID指的是本程序
status = 'CONTEXT_MENUS'"定义的上下文菜单id
menu = p_menu.
ENDFORM. "on_ctmenu_default
3、动态菜单+动态加载
为下图中的输入框(性别)添加右键菜单:测试1、测试2
主程序代码实现动态加载右键菜单
*------ 动态右键菜单 -------
FORM on_ctmenu_sex USING p_menu TYPE REF TO cl_ctmenu.
"N个菜单就调用N次method.
CALL METHOD p_menu->add_function
EXPORTING
fcode = '&DEL1'
text = '删除1'.
"N个菜单就调用N次method.
CALL METHOD p_menu->add_function
EXPORTING
fcode = '&DEL2'
text = '删除2'.
ENDFORM. "on_ctmenu_default
4、默认右键菜单
所有屏幕创建后都有默认的邮件菜单
在默认右键菜单,添加新功能
在应用工具条中添加功能,就会同步到默认右键菜单中
5、总结
1、当创建、代码都无误的,右键菜单仍不出现,可能是SAP设置了鼠标右键复制黏贴(取消该设置即可)
2、右键菜单是输入框的,并不是屏幕的,鼠标选中输入框后右键菜单才会出现
3、动态菜单只能在文本框设置,因为非文本框的菜单ID只读,无法设置
4、尽量使用动态菜单,比较简便