ABAP 选择屏幕搜索帮助
引用系统已有表的搜索帮助
F4IF_FIELD_VALUE_REQUEST
*======================================================================*
* Input Selection Screen
*======================================================================*
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME.
PARAMETERS: p_zdjlx TYPE char2. "单据类型
SELECTION-SCREEN END OF BLOCK blk1.
*======================================================================*
* At Selection-Screen On Value-Request
*======================================================================*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_zdjlx. "搜索帮助 单据类型
PERFORM frm_f4_p_zdjlx. "单据类型 取值
FORM frm_f4_p_zdjlx. "单据类型 取值
DATA: lt_return_tab TYPE STANDARD TABLE OF ddshretval.
CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST' "将表里的字段对应的search help引入到屏幕上
EXPORTING
tabname = 'ZTMM001' "数据库表名
fieldname = 'ZDOCUTYPE' "表中的字段名
dynpprog = sy-repid "使用的程序名
dynpnr = sy-dynnr "使用的屏幕名
dynprofield = 'P_ZDJLX' "返回字段参数
* TABLES
* return_tab = lt_return_tab "选择行的数据内表
EXCEPTIONS
field_not_found = 1
no_help_for_field = 2
inconsistent_help = 3
no_values_found = 4
OTHERS = 5.
IF sy-subrc NE 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
实现效果如下
自定义搜索帮助
F4IF_INT_TABLE_VALUE_REQUEST
*======================================================================*
* Input Selection Screen
*======================================================================*
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME.
PARAMETERS: p_zdjlx TYPE char2. "单据类型
SELECTION-SCREEN END OF BLOCK blk1.
*======================================================================*
* At Selection-Screen On Value-Request
*======================================================================*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_zdjlx. "搜索帮助 单据类型
PERFORM frm_f4_p_zdjlx. "单据类型 取值
FORM frm_f4_p_zdjlx. "单据类型 取值
DATA: lt_dd07v_tab TYPE STANDARD TABLE OF dd07v.
CALL FUNCTION 'DD_DOMVALUES_GET' "获取域的值
EXPORTING
domname = 'ZDDOCUMENT_TYPE' "域的字段名
text = 'X' "获取文本标识 空 不获取 X 获取
TABLES
dd07v_tab = lt_dd07v_tab "返回域值的内表
EXCEPTIONS
wrong_textflag = 1
OTHERS = 2.
IF sy-subrc NE 0.
* Implement suitable error handling here
ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' "根据输入内表给出搜索帮助
EXPORTING
retfield = 'DOMVALUE_L' "内表里的主键 用来返回值
dynpprog = sy-repid "使用的程序名
dynpnr = sy-dynnr "使用的屏幕名
dynprofield = 'P_ZDJLX' "选择屏幕的字段
value_org = 'S' "S 结构 默认是这个
TABLES
value_tab = lt_dd07v_tab "搜索帮助值的内表
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc NE 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
实现效果如下
如果不想用这个域值的内表,可以自定义个内表,只放主键的值和描述文本即可。