如何在ooalv中使用自定义的搜索帮助
1. 创建自定义搜索帮助
1.1 创建自建表
1.2 创建表维护
1.3 创建自定义搜索帮助
2. 代码实现
2.1 F4 帮助方法类定义与实现
CLASS cl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS: handle_f4_help FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname
es_row_no
er_event_data
et_bad_cells
e_display.
PRIVATE SECTION.
ENDCLASS. "CL_EVENT_RECEIVER DEFINITION
CLASS cl_event_receiver IMPLEMENTATION.
METHOD handle_f4_help.
FIELD-SYMBOLS:<fs_outtab> LIKE LINE OF gt_outtab.
CASE e_fieldname.
WHEN 'ZJGLX'.
READ TABLE gt_outtab ASSIGNING <fs_outtab> INDEX es_row_no-row_id.
IF sy-subrc = 0.
PERFORM frm_get_arktx_f4 CHANGING <fs_outtab>-zjglx.
ENDIF.
WHEN 'ZHJSZ'.
READ TABLE gt_outtab ASSIGNING <fs_outtab> INDEX es_row_no-row_id.
IF sy-subrc = 0.
PERFORM frm_get_zhjsz_f4 CHANGING <fs_outtab>-zhjsz.
ENDIF.
WHEN OTHERS.
ENDCASE.
CALL METHOD go_grid->refresh_table_display.
ENDMETHOD.
ENDCLASS. "cl_event_receiver IMPLEMENTATION
DATA: lo_event TYPE REF TO cl_event_receiver.
*&---------------------------------------------------------------------*
*& Form frm_get_zhjsz_f4
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& <-- <FS_OUTTAB>_ZHJSZ
*&---------------------------------------------------------------------*
FORM frm_get_zhjsz_f4 CHANGING zhjsz TYPE zsdt040b-zhjsz.
DATA: value_tab TYPE TABLE OF dfies,
ls_value_tab TYPE dfies,
return_tab TYPE TABLE OF ddshretval,
ls_return_tab TYPE ddshretval,
lt_zsdt040d TYPE TABLE OF zsdt040d,
ls_zsdt040d TYPE zsdt040d.
SELECT * INTO TABLE lt_zsdt040d
FROM zsdt040d.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'ZHJSZ'
* PVALKEY = ' '
* DYNPPROG = ' '
* DYNPNR = ' '
* DYNPROFIELD = ' '
* 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_zsdt040d
* FIELD_TAB =
return_tab = return_tab
* DYNPFLD_MAPPING =
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ELSE.
READ TABLE return_tab INTO ls_return_tab INDEX 1.
IF sy-subrc = 0 AND ls_return_tab-fieldval IS NOT INITIAL.
zhjsz = ls_return_tab-fieldval.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_get_arktx_f4
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& <-- <FS_OUTTAB>_ZJGLX
*&---------------------------------------------------------------------*
FORM frm_get_arktx_f4 CHANGING zjglx TYPE zsdt040c-zjglx.
DATA: value_tab TYPE TABLE OF dfies,
ls_value_tab TYPE dfies,
return_tab TYPE TABLE OF ddshretval,
ls_return_tab TYPE ddshretval,
lt_zsdt040c TYPE TABLE OF zsdt040c,
ls_zsdt040c TYPE zsdt040c.
SELECT * INTO TABLE lt_zsdt040c
FROM zsdt040c.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'ZJGLX'
* PVALKEY = ' '
* DYNPPROG = ' '
* DYNPNR = ' '
* DYNPROFIELD = ' '
* 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_zsdt040c
* FIELD_TAB =
return_tab = return_tab
* DYNPFLD_MAPPING =
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ELSE.
READ TABLE return_tab INTO ls_return_tab INDEX 1.
IF sy-subrc = 0 AND ls_return_tab-fieldval IS NOT INITIAL.
zjglx = ls_return_tab-fieldval.
ENDIF.
ENDIF.
ENDFORM.
2.2 设置ALV fieldcat中的F4帮助属性
LOOP AT lt_fieldcat ASSIGNING <lfs_fieldcat> WHERE fieldname = 'ZJGLX' OR fieldname = 'ZHJSZ'. "价格类型搜索帮助
<lfs_fieldcat>-f4availabl = 'X'.
ENDLOOP.
2.3 注册事件
DATA:lt_f4 TYPE lvc_t_f4,
ls_f4 TYPE lvc_s_f4.
FIELD-SYMBOLS: <lfs_fieldcat> TYPE lvc_s_fcat.
CREATE OBJECT lo_event.
* 注册事件handler方法
CALL METHOD go_grid->set_table_for_first_display
EXPORTING
is_layout = ls_layout
CHANGING
it_fieldcatalog = lt_fieldcat
it_outtab = gt_outtab[].
* Set editable cells to ready for input initially
CALL METHOD go_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
CLEAR:ls_f4.
ls_f4-fieldname = 'ZJGLX'. "价格类型搜索帮助
ls_f4-register = 'X'.
ls_f4-getbefore = 'X'.
ls_f4-chngeafter = ''.
ls_f4-internal = ''.
INSERT ls_f4 INTO TABLE lt_f4.
CLEAR:ls_f4.
ls_f4-fieldname = 'ZHJSZ'. "价格类型搜索帮助
ls_f4-register = 'X'.
ls_f4-getbefore = 'X'.
ls_f4-chngeafter = ''.
ls_f4-internal = ''.
INSERT ls_f4 INTO TABLE lt_f4.
CALL METHOD go_grid->register_f4_for_fields
EXPORTING
it_f4 = lt_f4.
SET HANDLER lo_event->handle_f4_help FOR go_grid .