You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ALV视图返回按钮失效:返回选择屏幕时程序终止,需隐藏F8按钮

问题根源

调用RS_SET_SELSCREEN_STATUS时使用标准状态%_00,该状态的返回按钮(F12)默认行为是终止整个程序,而非返回上一层选择屏幕;若不调用该函数,选择屏幕工具栏会保留F8(执行)按钮,不符合需求。

解决方案

创建自定义PF-STATUS,继承标准选择屏幕的功能并移除F8按钮,确保返回按钮的行为是回到上一层选择屏幕:

步骤1:创建自定义PF-STATUS

  1. 打开SE80,进入目标程序,右键点击「GUI Status」→「Create」。
  2. 输入状态名称(如ZALV_SEL_STATUS),选择「Status type」为「Selection Screen」。
  3. 点击「Copy」,从标准状态%_00(程序SAPLSEL)复制所有按钮和功能码。
  4. 在编辑器中,找到并删除ONLI(对应F8执行按钮)的条目。
  5. 确认BACK(返回)、EXIT(退出)、CANCEL(取消)按钮的功能码行为为返回上一层屏幕(而非终止程序)。
  6. 激活该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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 08:57:12