-
方式一:使用标准数据表,FIELDCAT字段设置值
gs_fieldcat-edit = 'X'. "列可编辑 gs_fieldcat-ref_table = 'MARA'. "F4 参考表 gs_fieldcat-ref_field = 'MATNR'. "F4 参考字段
- 方式二.使用自定义数据 ,实现效果如下图
- 实现步骤:按照下面3步操作应该是没有问题的
- FIELDCAT内表赋值时在需要实现F4的列加上 F4AVAILABL参数赋值'X'即可
gs_fieldcat-f4availabl = 'X'.
- 类的定义和实现:这段代码可以复制在程序顶部
CLASS cl_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 cl_event IMPLEMENTATION. METHOD handle_onf4. DATA:ls_modi TYPE lvc_s_modi, lt_ret_tab TYPE TABLE OF ddshretval. FIELD-SYMBOLS <modtab> TYPE lvc_t_modi. IF e_fieldname = 'MATNR'. "需要自定义搜索的字段名 READ TABLE gt_data TRANSPORTING NO FIELDS INDEX es_row_no-row_id. CHECK sy-subrc = 0. SELECT mara~matnr,makt~maktx INTO TABLE @DATA(lt_f4) FROM maRA INNER JOIN makt ON mara~matnr = makt~matnr UP TO 10 ROWS. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'HIT_FIELD' value_org = 'S' TABLES value_tab = lt_f4 return_tab = lt_ret_tab EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3. IF sy-subrc = 0. READ TABLE lt_ret_tab INTO DATA(lw_ret_tab) INDEX 1. IF sy-subrc = 0. " ls_modi-row_id = es_row_no-row_id. ls_modi-fieldname = e_fieldname. ls_modi-value = lw_ret_tab-fieldval. ASSIGN er_event_data->m_data->* TO <modtab>. APPEND ls_modi TO <modtab>. ENDIF. ENDIF. er_event_data->m_event_handled = 'X'. ENDIF. ENDMETHOD. ENDCLASS.
- 通过事件处理类的实例对象给OOALV的实例对象设置注册事件,TIPS:一般来说,创建OOALV实例对象调用方法打开ALV的步骤是差不多的, 就是命名不同,中间那段代码可以直接复制,注意自己本身程序的OOALV实例对象命名的即可
"创建容器实例对象 CREATE OBJECT go_con EXPORTING container_name = 'CONTORL'. "创建OOALV实例对象 CREATE OBJECT go_alv EXPORTING I_parent = go_con. *********** begin 可复制的代码 ************* DATA: lt_f4 TYPE lvc_t_f4 WITH HEADER LINE. CLEAR lt_f4. lt_f4-fieldname = 'MATNR'. lt_f4-register = 'X'. lt_f4-chngeafter = 'X'. APPEND lt_f4. "调用OOALV实例对象的方法 这里注意自己本身程序OOALV实例对象的命名 CALL METHOD go_alv->register_f4_for_fields EXPORTING it_f4 = lt_f4[]. "创建事件处理实例对象 DATA(lo_event) = NEW cl_event( ). SET HANDLER lo_event->handle_onf4 FOR go_alv. 这里注意自己本身程序OOALV实例对象的命名 *********** end 可复制的代码 ************* "调用方法打开OOALV CALL METHOD go_alv->set_table_for_first_display EXPORTING is_layout = gs_layout CHANGING it_outtab = gt_data it_fieldcatalog = gt_fieldcat.