Добрый день.
Есть задача, в которой из функционального модуля пользовательского средства поиска необходимо считывать значения полей напрямую с подэкранов. Считать данные из активного подэкрана получилось с помощью функции
DYNP_VALUES_READ. Однако при считывании данных других подэкранов функция не дает результат. Подскажите, пожалуйста, как ей правильно пользоваться или как решить задачу по другому?
Вот мой пример исходного кода
Code:
function ZFM_SHLP_EXIT_CMMITEM.
*"----------------------------------------------------------------------
*" TABLES
*" SHLP_TAB TYPE SHLP_DESCR_TAB_T
*" RECORD_TAB STRUCTURE SEAHLPRES
*" CHANGING
*" REFERENCE(SHLP) TYPE SHLP_DESCR_T
*" REFERENCE(CALLCONTROL) TYPE DDSHF4CTRL
*"----------------------------------------------------------------------
* data declarations for populating batch field on dynpro
data: DYFIELDS like DYNPREAD occurs 1 with header line,
DYFIELDS_ADV like DYNPREAD occurs 1 with header line,
tbl_cobl like cobl occurs 1 with header line.
constants: C_DYNUMB(04) value '1145'.
constants: C_GEBER(132) value 'COBL-GEBER'. "закладка "Контировка"
constants: C_FIPEX(132) value 'COBL-FIPEX'."закладка "Контировка"
constants: C_NAME1(132) value 'ADDR1_DATA-NAME1'.
"закладка"Адрес поставки"
data: W_SELOPT like line of SHLP-SELOPT.
data: WA_DYNPFIELDS like DYNPREAD,
WA_DYNPFIELDS_ADV_FIELDS like DYNPREAD.
data: WA_COBL like COBL.
data: ENV_INFO type DDSHF4ENV,
ENV_INFO_ADV_FIELDS type DDSHF4ENV.
DATA: RETTAB LIKE DDSHRETVAL OCCURS 0 WITH HEADER LINE.
call function 'F4UT_GET_ENVIRONMENT'
importing
ENV_INFO = ENV_INFO
exceptions
F4_NOT_ACTIVE = 1.
* EXIT immediately, if you do not want to handle this step
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.
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'.
* Ýòî ðàáî÷èé êóñîê êîäà - ñ÷èòûâàíèå äàííûõ èç àêòèâíîãî ïîäýêðàíà
* check SY-TCODE eq 'AS02'.
* DYFIELDS-FIELDNAME = C_GEBER.
* append DYFIELDS.
* DYFIELDS-FIELDNAME = C_FIPEX.
* append DYFIELDS.
*
*
** Ñ÷èòûâàåì çíà÷åíèÿ ïîëåé ñòàíäàðòíîãî ïîäýêðàíà
* call function 'DYNP_VALUES_READ'
* exporting
* DYNAME = ENV_INFO-SUBPROG
* DYNUMB = ENV_INFO-SUBDYNP
* START_SEARCH_IN_MAIN_SCREEN = 'X'
* 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.
ENV_INFO-SUBPROG = 'SAPLSZA1'.
ENV_INFO-SUBDYNP = '0301'.
DYFIELDS-FIELDNAME = C_NAME1.
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.
if SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
W_SELOPT-SIGN = 'I'.
W_SELOPT-OPTION = 'EQ'.
loop at DYFIELDS.
check not DYFIELDS-FIELDVALUE is initial.
case DYFIELDS-FIELDNAME.
when C_GEBER.
W_SELOPT-SHLPFIELD = 'GEBER'.
W_SELOPT-LOW = DYFIELDS-FIELDVALUE.
append W_SELOPT to SHLP-SELOPT.
when C_FIPEX.
W_SELOPT-SHLPFIELD = 'FIPEX'.
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_COBL LENGTH LEN.
**MOVE RECORD_TAB(LEN) TO wa_COBL.
*
* move C_WERKS to WA_DYNPFIELDS-FIELDNAME.
* move WA_COBL-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_COBL-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.