09-19-2014 5:08 AM
Hi all,
I have a problem with my ALV OO.
I have several fields, but there is a field (TAX) that I have implemented a F4 help seach by ONF4 method. This help search works fine, but when my try to send the modified row to my my HANDLE_DATA_CHANGED Method in order to loop the modified rows of the ALV, the ->mt_mod_cells is empty
LOOP AT rr_data_changed->mt_mod_cells INTO ls_mod_cells.
Could you tell me how could I save my line previously modified in my F4 help procedure, and transfer this line to my HANDLE_DATA_CHANGED Method and make the er_data_changed contains the row modified?.
Have to say, I am using
CALL METHOD cont_editalvgd -> register_edit_event
Exporting
{}I_event_id = cl_gui_alv_grid => mc_evt_modified
and
ALL METHOD cont_editalvgd -> register_edit_event
Exporting
{}I_event_id = cl_gui_alv_grid => mc_evt_enter
At the same time
Thanks in advance,
Mario
09-19-2014 8:06 AM
Hello Mario,
Pls try to add this code and check. if you have any issues pls do let me know.
set handler event handler(Name)->on_f4 for grid.
Rgds,
K.S
<removed by moderator>
Message was edited by: Manish Kumar
09-19-2014 8:30 AM
Hi K S!
Mi program has already that line:
SET HANDLER go_event_receiver01->handle_onf4 FOR ALL INSTANCES
I've tried with
SET HANDLER go_event_receiver01->handle_onf4 FOR alvgrid
And it doesn´t work
Any other idea?
Thanks
09-19-2014 8:48 AM
Hi Mario,
Will be helpful if you can paste your handle_data_changed method code to analyse.
Rgds,
K.S
09-19-2014 9:02 AM
Hi K S!
This is the logic according to my issue:
handle_data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed e_onf4 e_onf4_before e_onf4_after e_ucomm,
handle_data_changed_finished
FOR EVENT data_changed_finished OF cl_gui_alv_grid
IMPORTING e_modified et_good_cells,
handle_onf4 FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname e_fieldvalue es_row_no er_event_data
et_bad_cells e_display,
METHOD handle_data_changed.
PERFORM f_update_gt_fichero USING er_data_changed e_onf4 e_onf4_before e_onf4_after e_ ucomm.
ENDMETHOD. "handle_data_changed
METHOD handle_data_changed_finished.
PERFORM data_changed_finished USING e_modified et_good_cells.
ENDMETHOD. "handle_data_changed_finished
METHOD handle_onf4.
PERFORM f_handle_onf4 USING e_fieldname
e_fieldvalue
es_row_no "-row_id
er_event_data
et_bad_cells
e_display.
er_event_data->m_event_handled = 'X'.
ENDMETHOD.
FORM f_handle_onf4 USING p_e_fieldname TYPE lvc_fname
p_e_fieldvalue TYPE lvc_value
p_es_row_id TYPE lvc_s_roid
p_er_event_data TYPE REF TO cl_alv_event_data
p_et_bad_cells TYPE lvc_t_modi
p_e_display TYPE char01.
* Declaración de estructuras locales.
DATA: lw_return TYPE ddshretval,
lw_stable TYPE lvc_s_stbl,
li_return TYPE TABLE OF ddshretval,
ls_return TYPE ddshretval,
lv_pais TYPE land1,
lv_posf4 TYPE posnr,
lv_ots(3) TYPE c,
ls_pais TYPE ztconv_pais.
DATA: BEGIN OF lt_tabl1 OCCURS 0,
ots TYPE zots_ed_impuesto,
* mwskz TYPE mwskz,
END OF lt_tabl1.
CLEAR ls_pais.
SELECT SINGLE *
INTO ls_pais
FROM ztconv_pais
WHERE bukrs EQ gv_bukrs4.
IF sy-subrc = 0.
SELECT p~ots
FROM ztconv_impuesto AS p
INNER JOIN a003 AS q ON q~mwskz = p~mwskz
INTO CORRESPONDING FIELDS OF TABLE lt_tabl1
WHERE q~aland = ls_pais-land1.
ENDIF.
CASE p_e_fieldname.
WHEN 'IMPUESTO_OTS'.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'OTS'
window_title = 'Tipos de Impuesto OTS'
value_org = 'S'
TABLES
value_tab = lt_tabl1
return_tab = li_return
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc = 0.
CLEAR lv_posf4.
READ TABLE li_return INTO ls_return WITH KEY fieldname = 'F0001'.
IF ls_return IS NOT INITIAL.
lv_posf4 = p_es_row_id-row_id + 2.
READ TABLE gt_fichero INTO gs_fichero INDEX lv_posf4.
IF sy-subrc = 0.
gs_fichero-impuesto_ots = ls_return-fieldval.
* MODIFY gt_fichero FROM gs_fichero INDEX lv_posf4.
PERFORM f_elimina_cab_cliente.
ENDIF.
ENDIF.
ENDIF.
ENDCASE.
ls_is_stable-row = 'X'.
CALL METHOD go_alvgrid1->refresh_table_display
EXPORTING
is_stable = ls_is_stable
i_soft_refresh = 'X'.
p_er_event_data->m_event_handled = 'X'.
FORM f_update_gt_fichero USING pti_er_data_changed TYPE REF TO cl_alv_changed_data_protocol
p_e_onf4 TYPE char01
p_e_onf4_before TYPE char01
p_e_onf4_after TYPE char01
p_e_ucomm TYPE sy-ucomm.
DATA: lv_field(30) TYPE c,
lv_pos TYPE i,
lv_pos_act TYPE i.
FIELD-SYMBOLS: <lv_field> TYPE ANY.
LOOP AT pti_er_data_changed->mt_good_cells ASSIGNING <fs_updatetb>.
MY LOGIC
ENDLOOP.
ENDFORM. "f_update_gt_fichero
ENDFORM. "HANDLE_ONF4
previously I have defined:
FORM register_f4_fields .
lt_f4_data-fieldname = 'IMPUESTO_OTS'.
lt_f4_data-register = 'X'.
lt_f4_data-getbefore = space.
lt_f4_data-chngeafter = 'X'.
* lt_f4_data-chngeafter ='X'.
INSERT lt_f4_data INTO TABLE lt_f4.
CALL METHOD go_alvgrid1->register_f4_for_fields
EXPORTING
it_f4 = lt_f4[].
ENDFORM.
Thanks
09-19-2014 10:44 AM
after the SET HANDLER go_event_receiver01->handle_onf4 FOR alvgrid
perform register_f4_fields . "set cells with search help
I use this logic
FORM f_handle_onf4
*§5 define fields and field-symbols for data-update
field-symbols: <itab> type lvc_t_modi.
data: ls_modi type lvc_s_modi.
data: ls_f4 type ddshretval,
lt_f4 type table of ddshretval.
* customised f4-help
call method my_f4
exporting
sender = sender
es_row_no = es_row_no
er_event_data = er_event_data
et_bad_cells = et_bad_cells
e_display = e_display
e_fieldname = e_fieldname
importing
lt_f4 = lt_f4.
*§6 assign the cell table fieldsymbol to the dereferenced data table and
* fill the table.
assign er_event_data->m_data->* to <itab>.
read table lt_f4 into ls_f4 with key fieldname = fieldname.
if not ls_f4 is initial.
ls_modi-row_id = es_row_no-row_id.
ls_modi-fieldname = fieldname.
ls_modi-value = ls_f4-fieldval.
append ls_modi to <itab>.
endif.
**§3 set attribute m_event_handled of er_event_data to avoid standard
** f4-help.
er_event_data->m_event_handled = 'X'.
pls try this and let me know if it helps.
Rgds,
K.S
09-24-2014 12:04 PM
07-19-2019 12:18 PM
Hi, since I am facing the same issue May I know how did you solve your problem ?
Kindly help me on this!!
Thanks,
Ishwarya R