ALV视图返回按钮失效:返回选择屏幕时程序终止,需隐藏F8按钮
问题根源
调用RS_SET_SELSCREEN_STATUS时使用标准状态%_00,该状态的返回按钮(F12)默认行为是终止整个程序,而非返回上一层选择屏幕;若不调用该函数,选择屏幕工具栏会保留F8(执行)按钮,不符合需求。
解决方案
创建自定义PF-STATUS,继承标准选择屏幕的功能并移除F8按钮,确保返回按钮的行为是回到上一层选择屏幕:
步骤1:创建自定义PF-STATUS
- 打开SE80,进入目标程序,右键点击「GUI Status」→「Create」。
- 输入状态名称(如
ZALV_SEL_STATUS),选择「Status type」为「Selection Screen」。 - 点击「Copy」,从标准状态
%_00(程序SAPLSEL)复制所有按钮和功能码。 - 在编辑器中,找到并删除
ONLI(对应F8执行按钮)的条目。 - 确认
BACK(返回)、EXIT(退出)、CANCEL(取消)按钮的功能码行为为返回上一层屏幕(而非终止程序)。 - 激活该PF-STATUS。
步骤2:修改代码调用自定义状态
将原代码中RS_SET_SELSCREEN_STATUS的p_status参数替换为自定义状态名称:
* Drucktastenleiste: Button "Ausführen (F8)" entfernen DATA: it_exclude_btn TYPE STANDARD TABLE OF rsexfcode WITH DEFAULT KEY. it_exclude_btn = VALUE #( ( fcode = 'ONLI' ) ). CALL FUNCTION 'RS_SET_SELSCREEN_STATUS' EXPORTING p_status = 'ZALV_SEL_STATUS' " 使用自定义PF-STATUS TABLES p_exclude = it_exclude_btn. * leere SAP-Toolbar ausblenden cl_abap_list_layout=>suppress_toolbar( ). * Focus auf ALV setzen cl_gui_alv_grid=>set_focus( control = o_alv ). * Flag für Screen-Status auf ALV-Anzeige setzen gv_screen_status = 'IN_ALV'. ENDIF.
可选:强制控制返回逻辑(若自定义状态仍有问题)
如果返回按钮行为不符合预期,可在AT SELECTION-SCREEN事件中强制控制:
AT SELECTION-SCREEN. CASE sy-ucomm. WHEN 'BACK' OR 'EXIT' OR 'CANCEL'. IF sy-dynnr = '2000'. " ALV所在选择屏幕编号 LEAVE TO SCREEN 0. " 返回主选择屏幕 ENDIF. ENDCASE.
验证效果
运行程序后:
- ALV所在选择屏幕的F8按钮已被移除;
- 点击返回按钮,程序会回到主选择屏幕,而非直接终止。
内容的提问来源于stack exchange,提问作者toffler
相关产品推荐
相关产品推荐

