一、在 FIELDCAT 中设置参照
二、CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST '
三、CALL FUNCTION ' HELP_VALUES_GET_WITH_TABLE '
在对OO ALV 设置搜索帮助的流程
1.注册fieldcat 需要 实现搜索帮助的字段
LS_FIELSCAT-F4AVAILABL = 'X'.
2.注册 ONF4事件
CLASS LCL_EVENT DEFINITION .
PUBLIC SECTION.
METHODS: HANDLE_ONF4 FOR EVENT ONF4 OF CL_GUI_ALV_GRID
IMPORTING E_FIELDNAME
ES_ROW_NO
ER_EVENT_DATA
SENDER .
ENDCLASS .
CLASS LCL_EVENT IMPLEMENTATION .
METHODS HANDLE_ONF4 .
PERFORM FM_HANDLE_ONF4 USING E_FIELDNAME
ES_ROW_NO
ER_EVENT_DATA
SENDER .
ENDMETHOD.
ENDCLASS .
PERFORM FM_HANDLE_ONF4 USING E_FIELDNAME TYPE LVC_FNAME
ES_ROW_NO TYPE LVC_S_ROID
ER_EVENT_DATA TYPE REF TO CL_ALV_EVENT_DATA
SENDER TYPE REF TO CL_GUI_ALV_GRID.
CASE ...
ENDFORM.
SET HANDLER PO_EVENT->HANDLE_ONF4 FOR CL_GUI_ALV_GRID .
3.注册 ALV中的字段( PBO)
PERFORM REGISTER_F4 CHANGING GS_ALV TYPE REF TO CL_ALV_GRID.
DATA IT_F4 TYPE LVC_T_F4 .
DATA IS_F4 TYPE LVC_S_F4 .
CLEAR IS_F4 .
IS_F4-FIELDNAME = 'MATNR'.
IS_F4-REGISTER = 'X' .
IS_F4-GETBEFORE = 'X'.
IS_F4-CHANGEAFTER = 'X'.
INSERT IS_F4 INTO TABLE IT_F4 .
CLEAR IS_F4 .
.....
CALL METHOD GS_ALV->REGISTER_F4_FOR_FIELDS
EXPORTING
IT_F4 = IT_F4[] .
ENDFORM.
4.具体实现
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST '
FORM HELP_F4 TABLES PT_TAB
USING PE_FIELDNAME TYPE LVC_FNAME
PS_ROW_NO TYPE LVC_S_ROID
PR_EVENT_DATA TYPE REF TO CL_ALV_EVENT_DATA .
DATA: LT_RETURN TYPE TABLE OF DDSHRETVAL WITH HEADER LINE ,
LS_MODI TYPE LVC_S_MODI .
FIELD-SYMBOLS: <LV_ITAB> TYPE LVC_T_MODI .
"获取搜索帮助数据 存入表LT_VALUE_TAB
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
RETFIELD = 'FIELDNAME
* 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_VALUE_TAB
* FIELD_TAB =
RETURN_TAB = LT_RETURN
* DYNPFLD_MAPPING =
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
PR_EVENT_DATA->M_EVENT_HANDLED = GC_X.
ASSIGN PR_EVENT_DATA->M_DATA->* TO <LV_ITAB> .
READ TABLE LT_RETURN INDEX 1.
IF SY-SUBRC EQ 0 .
LS_MODI-ROW_ID = PS_ROW_NO-ROW_ID .
LS_MODI-FIELDNAME = PV_FIELDNAME .
LS_MODI-VALUE = LT_RETURN-FIELDVAL.
APPEND LS_MODI TO <LV_ITAB> .
ENDIF.
ENDFORM.
CALL FUNCTION ' HELP_VALUES_GET_WITH_TABLE '
DATA: LT_FIELDS LIKE help_value OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF LT_VALUETAB OCCURS 0,
string(100),
END OF LT_VALUETAB.
DATA: BEGIN OF lt_MATNR OCCURS 0,
MATNR LIKE MARA-MATNR,
MAKTX LIKE MAKT-MAKTX,
END OF lt_MATNR.
SELECT MARA~MATNR MAKT~MAKTX
INTO CORRESPONDING FIELDS OF TABLE lt_MATNR
FROM MARA
INNER JOIN MAKT ON MAKT~MAKTX = MARA~MATNR
.
LT_FIELDS-tabname = 'MARA'.
LT_FIELDS-fieldname = 'MATNR'.
LT_FIELDS-selectflag = 'X'.
APPEND LT_FIELDS.
CLEAR LT_FIELDS.
LT_FIELDS-tabname = 'MAKT'.
LT_FIELDS-fieldname = 'MAKTX'.
APPEND LT_FIELDS.
CLEAR LT_FIELDS.
LOOP AT lt_MATNR.
LT_VALUETAB-string = lt_MATNR-MATNR.
APPEND LT_VALUETAB.
CLEAR LT_VALUETAB.
LT_VALUETAB-string = lt_MATNR-MAKTX.
APPEND LT_VALUETAB.
CLEAR LT_VALUETAB.
ENDLOOP.
CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE'
EXPORTING
title_in_values_list = ''
titel = '请选择'
IMPORTING
select_value = PS_MATNR
TABLES
fields = LT_FIELDS
valuetab = LT_VALUETAB.
IF sy-subrc NE 0.
MESSAGE 'No value selected!' TYPE 'S'.
ENDIF.