Essa eu consegui no SDN pois não consegui fazer sozinho, postei no SDN e um cara me respondeu.
Problema:
eu tinha 2 ALV com mesmas características apenas com seleção de dados distintos mas com estruturas de saída iguais. Criei um evento hotspot que atendesse os 2 objetos e precisava de uma forma de identificar quando seria a chamada de um objeto e do outro.
Solução:
Existe um parâmetro oculto que não aparece nos eventos, mas q existe em todos os eventos. é o SENDER que é basicamente o objeto classe ALV que chamou o evento, dentro desse objeto tem as características do objetos onde é possível identificar o objeto chamado.
No meu caso eu fiz um casting com o objeto para classe CL_GUI_CUSTOM_CONTAINER identificando depois no método o container chamado e daí fazer a minha lógica.
Abaixo a classe declarada.
CLASS lcl_alv_event_det DEFINITION.
PUBLIC SECTION.
CLASS-METHODS: on_hotspot_click
FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING e_column_id es_row_no sender.
ENDCLASS. "LCL_ALV_EVENT_BR DEFINITION
========================
CLASS lcl_alv_event_det IMPLEMENTATION.
METHOD on_hotspot_click.
* PERFORM on_hotspot_alv_br USING e_column_id es_row_no 'C'.
DATA: lo_cc_obj TYPE REF TO cl_gui_custom_container.
DATA: l_name TYPE string.
lo_cc_obj ?= sender->parent.
CALL METHOD lo_cc_obj->get_name
RECEIVING
name = l_name.
PERFORM on_hotspot_tbd USING e_column_id es_row_no l_name.
ENDMETHOD.
ENDCLASS.
Abaixo as chamada do evento nos 2 objetos.
CALL METHOD o_alv_100->set_table_for_first_display
EXPORTING
is_layout = lw_layout
i_save = 'A'
is_variant = lw_variant
CHANGING
it_outtab = t_alv100
it_fieldcatalog = t_fcat.
SET HANDLER lcl_alv_event_det=>on_hotspot_click FOR o_alv_100.
=======================================================
CALL METHOD o_alv_200->set_table_for_first_display
EXPORTING
is_layout = lw_layout
i_save = 'A'
is_variant = lw_variant
CHANGING
it_outtab = t_alv_200
it_fieldcatalog = t_fcat.
SET HANDLER lcl_alv_event_det=>on_hotspot_click FOR o_alv_200.
Nenhum comentário:
Postar um comentário