为屏幕上的字段调用搜索帮助功能模块
Calling a search help function module for a field on a screen
是否可以在屏幕的 PBO 模块中调用函数 MAT1_F4_HELP_EXIT 来触发自定义屏幕上 material 字段的搜索帮助(使用 se11 和搜索帮助分配搜索帮助退出无效)。
我对函数中传递的参数感到困惑。
编辑(摘自讨论)
我有一个名为 material 的字段,我想触发搜索帮助 (MAT1)。我已将 table 字段分配给它,但它不会让用户自动执行此操作。所以,我想明确地调用它。
我已经重现了这个问题(参见底部的最小代码和屏幕)。
重现步骤:
- 启动程序(->显示ALV)
- 双击ALV的一行(->显示屏幕0100)
- 在使用搜索帮助定义的屏幕字段上按 F4(-> 弹出 'abnormal situation' 而不是搜索帮助!)
原因: 活动 GUI 状态将 F4 功能键重新分配为经典功能键行为,而不是像您一样调用搜索帮助 和 没有在您的屏幕中设置 GUI 状态,再次使用前一个屏幕。
解决方法:定义自己的GUI状态,在屏幕的PBO中设置(当然不要重新定义F4!)
经验法则:始终为每个屏幕定义您自己的按钮和菜单(为什么要显示其他屏幕上毫无意义的按钮和菜单)。
最小代码:
REPORT.
SELECT * FROM sflight INTO TABLE @DATA(flights).
" does a CALL SCREEN which does SET PF-STATUS 'STANDARD_FULLSCREEN' (in program SAPLKKBL)
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_user_command = 'USER_COMMAND'
i_structure_name = 'SFLIGHT'
TABLES
t_outtab = flights
EXCEPTIONS
OTHERS = 2.
FORM user_command
USING
r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
IF r_ucomm = '&IC1'.
CALL SCREEN 100.
ENDIF.
ENDFORM.
MODULE pbo OUTPUT.
" missing part !! ==> create GUI status 0100 and do SET PF-STATUS '0100'
ENDMODULE.
MODULE pai INPUT.
CASE sy-ucomm.
WHEN '&F03'.
SET SCREEN 0.
WHEN '&F4'.
" corresponds to F4 key inherited from ALV GUI status 'STANDARD_FULLSCREEN'
MESSAGE 'abnormal situation -> define your own GUI status !' TYPE 'I'.
ENDCASE.
ENDMODULE.
屏幕 0100:
- 具有搜索帮助的任何字段(与您所做的相同)
屏幕0100的流程逻辑:
PROCESS BEFORE OUTPUT.
MODULE pbo.
PROCESS AFTER INPUT.
MODULE pai.
是否可以在屏幕的 PBO 模块中调用函数 MAT1_F4_HELP_EXIT 来触发自定义屏幕上 material 字段的搜索帮助(使用 se11 和搜索帮助分配搜索帮助退出无效)。
我对函数中传递的参数感到困惑。
编辑(摘自讨论)
我有一个名为 material 的字段,我想触发搜索帮助 (MAT1)。我已将 table 字段分配给它,但它不会让用户自动执行此操作。所以,我想明确地调用它。
我已经重现了这个问题(参见底部的最小代码和屏幕)。
重现步骤:
- 启动程序(->显示ALV)
- 双击ALV的一行(->显示屏幕0100)
- 在使用搜索帮助定义的屏幕字段上按 F4(-> 弹出 'abnormal situation' 而不是搜索帮助!)
原因: 活动 GUI 状态将 F4 功能键重新分配为经典功能键行为,而不是像您一样调用搜索帮助 和 没有在您的屏幕中设置 GUI 状态,再次使用前一个屏幕。
解决方法:定义自己的GUI状态,在屏幕的PBO中设置(当然不要重新定义F4!)
经验法则:始终为每个屏幕定义您自己的按钮和菜单(为什么要显示其他屏幕上毫无意义的按钮和菜单)。
最小代码:
REPORT.
SELECT * FROM sflight INTO TABLE @DATA(flights).
" does a CALL SCREEN which does SET PF-STATUS 'STANDARD_FULLSCREEN' (in program SAPLKKBL)
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_user_command = 'USER_COMMAND'
i_structure_name = 'SFLIGHT'
TABLES
t_outtab = flights
EXCEPTIONS
OTHERS = 2.
FORM user_command
USING
r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
IF r_ucomm = '&IC1'.
CALL SCREEN 100.
ENDIF.
ENDFORM.
MODULE pbo OUTPUT.
" missing part !! ==> create GUI status 0100 and do SET PF-STATUS '0100'
ENDMODULE.
MODULE pai INPUT.
CASE sy-ucomm.
WHEN '&F03'.
SET SCREEN 0.
WHEN '&F4'.
" corresponds to F4 key inherited from ALV GUI status 'STANDARD_FULLSCREEN'
MESSAGE 'abnormal situation -> define your own GUI status !' TYPE 'I'.
ENDCASE.
ENDMODULE.
屏幕 0100:
- 具有搜索帮助的任何字段(与您所做的相同)
屏幕0100的流程逻辑:
PROCESS BEFORE OUTPUT.
MODULE pbo.
PROCESS AFTER INPUT.
MODULE pai.