模拟需求:根据选择屏幕的工厂,对选择屏幕部门来进行筛选自定义F4搜索帮助。
搜索帮助自建表:
函数名称:DYNP_VALUES_READ
代码DEMO:
*&---------------------------------------------------------------------*
*& 程 序 名:YTEST_001
*& 程序描述:获取选择屏幕字段值进行搜索帮助
*& 创 建 者:你们的小涵
*& 创建日期:2023/06/06
*&---------------------------------------------------------------------*
*& 版本 修改者(公司) 日期 修改描述
*& 1.0.0 XXXX YYYYMMDD 创建程序
*&---------------------------------------------------------------------*
REPORT ytest_001.
TABLES:ekko,ytdepart.
"选择屏幕
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE TEXT-001.
PARAMETERS:
"工厂
p_werks TYPE ekpo-werks OBLIGATORY.
SELECT-OPTIONS:
"部门
s_depart FOR ytdepart-zdepart NO INTERVALS NO-EXTENSION.
SELECTION-SCREEN END OF BLOCK b01.
*&----------------------------------------------------------------------
*& INITIALIZATION.
*&----------------------------------------------------------------------
INITIALIZATION.
*&----------------------------------------------------------------------
*& AT SELECTION-SCREEN OUTPUT
*&----------------------------------------------------------------------
AT SELECTION-SCREEN OUTPUT.
*&----------------------------------------------------------------------
*& AT SELECTION-SCREEN
*&----------------------------------------------------------------------
AT SELECTION-SCREEN.
*&----------------------------------------------------------------------
*& AT SELECTION-SCREEN ON VALUE-REQUEST FOR
*&----------------------------------------------------------------------
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_depart-low.
TYPES:
BEGIN OF typ_s_text,
werks TYPE ytdepart-werks, "工厂
zdepart TYPE ytdepart-zdepart, "部门
zname TYPE ytdepart-zname, "部门描述
END OF typ_s_text.
DATA lt_text TYPE TABLE OF typ_s_text.
DATA dynpfields TYPE TABLE OF dynpread WITH HEADER LINE.
* 获取屏幕上字段输入的值:此字段还没有更新到对应的内表或工作区中
dynpfields-fieldname = 'P_WERKS'.
APPEND dynpfields.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-cprog
dynumb = sy-dynnr
TABLES
dynpfields = dynpfields
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
stepl_not_found = 10
OTHERS = 11.
IF sy-subrc EQ 0.
READ TABLE dynpfields WITH KEY 'P_WERKS' .
IF sy-subrc = 0.
p_werks = dynpfields-fieldvalue.
TRANSLATE p_werks TO UPPER CASE.
ENDIF.
ELSE.
* Implement suitable error handling here
ENDIF.
CLEAR:lt_text.
SELECT *
FROM ytdepart
INTO CORRESPONDING FIELDS OF TABLE @lt_text
WHERE werks = @p_werks.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'ZDEPART' "返回值
* PVALKEY = ' '
dynpprog = sy-cprog "程序ID
dynpnr = sy-dynnr "屏幕号
dynprofield = 'S_DEPART-LOW' "搜索帮助对象
* STEPL = 0
* WINDOW_TITLE =
* VALUE = ' '
value_org = 'S'
* MULTIPLE_CHOICE = ' '
* DISPLAY = ' '
* CALLBACK_PROGRAM = ' '
* CALLBACK_FORM = ' '
* CALLBACK_METHOD =
* MARK_TAB =
* IMPORTING
* USER_RESET =
TABLES
value_tab = lt_text
* FIELD_TAB =
* RETURN_TAB =
* DYNPFLD_MAPPING =
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
*&----------------------------------------------------------------------
*& START-OF-SELECTION
*&----------------------------------------------------------------------
START-OF-SELECTION.
效果如下: