segunda-feira, 2 de março de 2015

ALV - Evento com mais de um objeto ALV selecionado.

 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-METHODSon_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'.
    DATAlo_cc_obj TYPE REF TO cl_gui_custom_container.
    DATAl_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