Была ситуация, когда search-help для элемента данных не принимал параметры по умолчанию.
Пришлось написать для этого search-help exit, в котором получался номер активного экрана, и значения нужных полей, которые потом и устанавливались по умолчанию. После выбора значения снова переносились на активный экран:
Цитата:
FUNCTION Z_E_F4IF_SHLP_EXIT_ROOM.
*"----------------------------------------------------------------------
*"*"Local interface:
*" TABLES
*" SHLP_TAB TYPE SHLP_DESCR_TAB_T
*" RECORD_TAB STRUCTURE SEAHLPRES
*" CHANGING
*" VALUE(SHLP) TYPE SHLP_DESCR_T
*" VALUE(CALLCONTROL) LIKE DDSHF4CTRL STRUCTURE DDSHF4CTRL
* data declarations for populating batch field on dynpro
DATA: DYFIELDS LIKE DYNPREAD OCCURS 1 WITH HEADER LINE.
constants: c_dynumb(04) value '1145'.
constants: c_werks(132) value 'ANLZ-WERKS'.
constants: c_stort(132) value 'ANLZ-STORT'.
DATA: w_selopt LIKE LINE OF shlp-selopt.
DATA: wa_dynpfields LIKE DYNPREAD.
DATA: wa_ZGFRAUM1 LIKE ZGFRAUM1.
DATA: ENV_INFO TYPE DDSHF4ENV.
* EXIT immediately, if you do not want to handle this step
CHECK SY-TCODE EQ 'AS02'.
IF CALLCONTROL-STEP <> 'SELONE' AND
CALLCONTROL-STEP <> 'SELECT' AND
CALLCONTROL-STEP <> 'PRESEL1' AND
CALLCONTROL-STEP <> 'RETURN' AND
" AND SO ON
CALLCONTROL-STEP <> 'DISP'.
EXIT.
ENDIF.
CALL FUNCTION 'F4UT_GET_ENVIRONMENT'
IMPORTING
ENV_INFO = ENV_INFO
EXCEPTIONS
F4_NOT_ACTIVE = 1.
IF NOT SY-SUBRC IS INITIAL.
ENV_INFO-SUBPROG = SY-CPROG.
ENV_INFO-SUBDYNP = c_dynumb.
ENDIF.
*"----------------------------------------------------------------------
* STEP PRESEL (Enter selection conditions)
*"----------------------------------------------------------------------
* This step allows you, to influence the selection conditions either
* before they are displayed or in order to skip the dialog completely.
* If you want to skip the dialog, you should change CALLCONTROL-STEP
* to 'SELECT'.
* Normaly only SHLP-SELOPT should be changed in this step.
IF CALLCONTROL-STEP = 'PRESEL'.
* PERFORM PRESEL ..........
EXIT.
ENDIF.
IF CALLCONTROL-STEP = 'PRESEL1'.
DYFIELDS-FIELDNAME = c_werks.
APPEND DYFIELDS.
DYFIELDS-FIELDNAME = c_stort.
APPEND DYFIELDS.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
DYNAME = ENV_INFO-SUBPROG
DYNUMB = ENV_INFO-SUBDYNP
TABLES
DYNPFIELDS = DYFIELDS
EXCEPTIONS
invalid_abapworkarea = 01
invalid_dynprofield = 02
invalid_dynproname = 03
invalid_dynpronummer = 04
invalid_request = 05
no_fielddescription = 06
undefind_error = 07.
CHECK SY-SUBRC IS INITIAL.
w_selopt-sign = 'I'.
w_selopt-option = 'EQ'.
LOOP AT DYFIELDS.
CHECK NOT DYFIELDS-FIELDVALUE IS INITIAL.
CASE DYFIELDS-FIELDNAME.
WHEN c_werks.
w_selopt-shlpfield = 'WERKS'.
w_selopt-low = DYFIELDS-FIELDVALUE.
append w_selopt to shlp-selopt.
WHEN c_stort.
w_selopt-shlpfield = 'STORT'.
w_selopt-low = DYFIELDS-FIELDVALUE.
append w_selopt to shlp-selopt.
ENDCASE.
ENDLOOP.
EXIT.
ENDIF.
*"----------------------------------------------------------------------
* STEP RETURN (Select one of the elementary searchhelps)
*"----------------------------------------------------------------------
IF CALLCONTROL-STEP = 'RETURN'.
DATA: LEN TYPE I.
DESCRIBE FIELD wa_ZGFRAUM1 LENGTH LEN.
MOVE RECORD_TAB(LEN) TO wa_ZGFRAUM1.
MOVE c_werks TO wa_dynpfields-fieldname.
MOVE wa_ZGFRAUM1-WERKS TO wa_dynpfields-fieldvalue.
TRANSLATE wa_dynpfields-fieldname TO UPPER CASE.
APPEND wa_dynpfields TO DYFIELDS.
MOVE c_stort TO wa_dynpfields-fieldname.
MOVE wa_ZGFRAUM1-STORT TO wa_dynpfields-fieldvalue.
TRANSLATE wa_dynpfields-fieldname TO UPPER CASE.
APPEND wa_dynpfields TO DYFIELDS.
CALL FUNCTION 'DYNP_UPDATE_FIELDS'
EXPORTING
DYNAME = ENV_INFO-SUBPROG
DYNUMB = ENV_INFO-SUBDYNP
request = 'A'
TABLES
dynpfields = DYFIELDS
EXCEPTIONS
INVALID_ABAPWORKAREA = 1
INVALID_DYNPROFIELD = 2
INVALID_DYNPRONAME = 3
INVALID_DYNPRONUMMER = 4
INVALID_REQUEST = 5
NO_FIELDDESCRIPTION = 6
UNDEFIND_ERROR = 7
OTHERS = 8.
EXIT.
ENDIF.
ENDFUNCTION.