Esse é para os casos de se desejar colocar uma lista de valores (matchcode) especifico em um campo de uma lista ALV.
Não esquecer de colocar o flag no campo que vai ter o F4 no fieldcat.
WHEN 'ORIGTP'.
<lfsw_fcat>-edit = 'X'.
<lfsw_fcat>-f4availabl = 'X'.
e tem q registrar o evento no objeto ALV.
DATA: lt_f4 TYPE lvc_t_f4.
DATA: lw_f4 TYPE lvc_s_f4.
CLEAR lw_f4.
lw_f4-fieldname = 'ORIGTP'.
lw_f4-register = 'X'.
APPEND lw_f4 TO lt_f4.
CALL METHOD gcl_alv->register_f4_for_fields
EXPORTING
it_f4 = lt_f4.
No meu caso coloquei o código acima antes do método SET_TABLE_FOR_FIRST_DISPLAY.
Abaixo restante do código.
=========================================================
Criação do evento.
CLASS gcl_alv_event DEFINITION.
on_f4
FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname
e_fieldvalue
es_row_no
er_event_data
et_bad_cells
e_display.
ENDCLASS.
=========================================================
*Implementação da classe.
CLASS gcl_alv_event IMPLEMENTATION.
METHOD on_f4.
PERFORM on_f4 USING e_fieldname
e_fieldvalue
es_row_no
er_event_data
et_bad_cells
e_display.
ENDMETHOD. "on_f4
ENDCLASS.
==================================================
"Implementaçao da rotina..
" As linhas em vermelho são obrigatórias pois elas modificam o valor em tela logo após a seleção do valor da lista.. e o m_event_handler evita um erro que dá no retorno a tela.
FORM on_f4 USING f_fieldname TYPE lvc_fname
f_fieldvalue TYPE lvc_value
fw_row_no TYPE lvc_s_roid
fcl_event_data TYPE REF TO cl_alv_event_data
ft_bad_cells TYPE lvc_t_modi
f_display TYPE char01.
DATA: lw_alv TYPE ze_gnre_rel_lote,
lw_modi TYPE lvc_s_modi.
DATA: l_origtp TYPE zgnre_origtp.
FIELD-SYMBOLS: <lfst_modi> TYPE lvc_t_modi.
ASSIGN fcl_event_data->m_data->* TO <lfst_modi>.
CHECK sy-subrc = 0.
READ TABLE gt_alv INTO lw_alv INDEX fw_row_no-row_id.
CHECK sy-subrc = 0.
CASE f_fieldname.
WHEN 'ORIGTP'.
IF lw_alv-gnreid IS INITIAL.
PERFORM f4_codreceita USING lw_alv-regio
CHANGING l_origtp.
f_fieldvalue = l_origtp.
CLEAR lw_modi.
lw_modi-row_id = fw_row_no-row_id.
lw_modi-fieldname = f_fieldname.
lw_modi-value = f_fieldvalue.
APPEND lw_modi TO <lfst_modi>.
ENDIF.
fcl_event_data->m_event_handled = 'X'.
ENDCASE.
ENDFORM. " ON_F4
*&---------------------------------------------------------------------*
*& Form F4_CODRECEITA
*&---------------------------------------------------------------------*
FORM f4_codreceita USING f_regio TYPE regio
CHANGING f_origtp TYPE zgnre_origtp.
DATA: lt_rettab TYPE TABLE OF ddshretval,
lt_c023 TYPE TABLE OF zc023.
DATA: lw_rettab TYPE ddshretval.
SELECT *
INTO TABLE lt_c023
FROM zc023
WHERE regio EQ f_regio.
CHECK sy-subrc = 0.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
ddic_structure = 'ZC023'
retfield = 'ORIGTP'
value_org = 'S'
TABLES
value_tab = lt_c023
return_tab = lt_rettab
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
CHECK sy-subrc = 0.
READ TABLE lt_rettab INTO lw_rettab INDEX 1.
CHECK sy-subrc = 0.
f_origtp = lw_rettab-fieldval.
ENDFORM. " F4_CODRECEITA
Nenhum comentário:
Postar um comentário