오늘은 abap에서
AT SELECTION-SCREEN ON VALUE-REQUEST FOR 에
'ENTER' 가 자동 처리되도록 추가한 소스 입니다.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR
사용자가 F4를 눌렀을 때, 선택 가능한 정보를 도움말 창에서 선택할 수 있는 값을
동적으로 로딩하도록 구현하고,
그 이후 자동으로 ENTER 기능이 적용되도록 로직 추가하였습니다.
F4 처리 및 ENTER 기능 적용 예제
REPORT ZVALUE_REQUEST_EXAMPLE.
TABLES: sflight.
PARAMETERS: p_carrid TYPE sflight-carrid OBLIGATORY.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_carrid.
DATA: lt_carrid TYPE TABLE OF sflight-carrid,
lv_input TYPE sy-msgid,
lv_output TYPE sy-msgty.
DATA : LT_RETURN TYPE STANDARD TABLE OF DDSHRFTVAL,
LS_RETURN TYPE DDSHRETVAL.
" Fetch possible values for p_carrid from the database
SELECT carrid
FROM sflight
INTO TABLE lt_carrid
UP TO 10 ROWS.
" Prepare the input and output parameters for the F4 help
lv_input = 'F4'.
lv_output = 'E'.
" Display F4 help for p_carrid
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'CARRID'
value_org = 'S'
TABLES
value_tab = lt_carrid
return_tab = lt_return
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
CASE sy-subrc.
WHEN 0.
" User selected a value from the F4 help
read table lt_return into ls_return index 1.
p_carrid = ls_return-fieldval.
CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
EXPORTING
functioncode = 'ENTE'
EXCEPTIONS
function_not_supported = 1
other = 2.
WHEN 1.
" Parameter error
MESSAGE ID lv_input TYPE lv_output INTO sy-msgid sy-msgty.
MESSAGE sy-msgid TYPE sy-msgty.
WHEN 2.
" No values found
MESSAGE ID lv_input TYPE lv_output INTO sy-msgid sy-msgty.
MESSAGE sy-msgid TYPE sy-msgty.
ENDCASE.