CL_GUI_ALV_GRID->GET_SELECTED_ROWS no me funciona

Hola,

Tengo un ALV OO con filas seleccionables. Estoy usando la clase CL_GUI_ALV_GRID. Cuando marco una fila y presiono un botón cuya funcionalidad es mostrar información relacionada con el registro seleccionado, la tabla que devuelve el método con las posiciones de mi tabla interna de datos marcadas se encuentra vacía.

Alguien sabe por qué puede estar pasando esto?

Agradezco de antemano cualquier ayuda.

Saludos & Gracias.

Hola, @cmayca
Es posible que olvidaras definir algun objeto o bien cambiaste el orden de las llamadas a los eventos,
te comento esto, pues me mas de alguna vez me ha pasado lo mismo…

Fijate en la siguiente secuencia, ojala te sea de ayuda.

*
*---->  INCLUDE DE CLASES / METODOS 
*
    *-----------------------------------------------------------------------------------------------------------------*
    * DECLARACION CLASES
    *-----------------------------------------------------------------------------------------------------------------*
    CLASS lcl_events_main       DEFINITION DEFERRED.                                                                  "
        ... 
        ... 
      CLASS lcl_events_main DEFINITION.                                                                                 "
        PUBLIC SECTION.
      *
      *   DEFINIR METODO :  ON_BUTTON_CLICK_MAIN_ALV
          METHODS : on_button_click_main_alv      FOR EVENT button_click
                        OF cl_gui_alv_grid
            IMPORTING es_col_id
                        es_row_no.                       
        ... 
        ... 
      CLASS lcl_events_main IMPLEMENTATION.
      *
      * IMPLENTAR ACCION DEL METODO : BUTTON_CLICK

        METHOD : on_button_click_main_alv.
          PERFORM btn_click_main_alv USING es_col_id es_row_no.
        ENDMETHOD.                                                                                                      "
        ... 
        ... 
*
*---->  INCLUDE RUTINAS FORM
*
      *------------------------------------------------------------------------------------------------------------------*
      * FORM : DEFINIR_FCAT 
      *------------------------------------------------------------------------------------------------------------------*
      FORM DEFINIR_FCAT......
        ... 
        ... 
      ENDFORM.

      *------------------------------------------------------------------------------------------------------------------*
      * FORM : MODIFICAR_FCAT 
      *------------------------------------------------------------------------------------------------------------------*
      FORM MODIFICAR_FCAT  CHANGING pt_fieldcat  TYPE lvc_t_fcat.

        FIELD-SYMBOLS : <fs_lvc_fcat>   TYPE LINE OF lvc_t_fcat.
      *
      *  AQUI LO QUE HAGO MAS POR TEMA DE ESTETICA ES DAR EL ASPECTO DE "BOTON" 
      *  A  LA CELDA QUE VOY A UTILIZAR PARA COMO BOTON EN LA FILA....(SOLO COMO 
      *  EJEMPLO)
      *
            LOOP AT pt_fieldcat  ASSIGNING <fs_lvc_fcat>.
              IF ( <fs_lvc_fcat>-fieldname EQ 'CAMPO_CLICK' ).
                <fs_lvc_fcat>-style = cl_gui_alv_grid=>mc_style_button.
              ENDIF.
            ENDLOOP.
        ... 
        ... 
      ENDFORM.
      *-----------------------------------------------------------------------------------------------------------------*
      * FORM : LAYOUT_ALV
      *-----------------------------------------------------------------------------------------------------------------*
      FORM prepare_layout_alv CHANGING ps_layout     TYPE lvc_s_layo.
        ... 
        ... 
        CLEAR : ps_layout.
        ps_layout-no_toolbar  = abap_false.
        ps_layout-stylefname  = 'FIELD_STYLE'.
        ps_layout-zebra       = abap_true.
        ps_layout-no_rowmark  = abap_false.
        ps_layout-sel_mode    = 'C'.        
              " A : selection of all entries is possible 
             "  B : single selection 
              " C : multi selection               
             " D : Cell
             " E : only one entry can be selected
        ... 
        ... 
      ENDFORM.
      *------------------------------------------------------------------------------------------------------------------*
      * FORM : BTN_CLICK_MAIN_ALV   : AQUI ENTRA AL HACER CLICK
      *------------------------------------------------------------------------------------------------------------------*
      FORM btn_click_main_alv USING es_col_id TYPE lvc_s_col
                                    es_row_no TYPE lvc_s_roid. 
       *
        DATA : lt_row_no                      TYPE lvc_t_roid.
        DATA : ls_row_no                      TYPE lvc_s_roid.
       *
        DATA : ls_alv_main                    TYPE ty_alv_main.
        DATA : ld_row                         TYPE char10.
       *
        FIELD-SYMBOLS : <fs_alv_main>         TYPE ty_alv_main.
       *
        ld_row = es_row_no-row_id.
        *
        *  AQUI AL LLAMAR EL METODO TE RETORNA LAS FILAS SELECCIONADAS 
        *
        o_grid_cc_main->get_selected_rows( IMPORTING et_row_no = lt_row_no ).
        ... 
        ...         
          o_grid_cc_main->set_selected_rows( it_row_no = lt_row_no[] ).
        ... 
        ...       
        *
        ENDFORM.                                                                                                         "
      *------------------------------------------------------------------------------------------------------------------*
      * FORM : DIPLAY_MAIN_ALV
      *------------------------------------------------------------------------------------------------------------------*
      FORM btn_click_main_alv USING es_col_id TYPE lvc_s_col
        ... 
        ... 
        DATA : lcl_handler_receiver_ca              TYPE REF TO lcl_events_main.
        ... 
        *
        * REGISTAR ALGUN OTRO EVENTO.....
        *
        ... 
        *
        * CREAR OBJETO Y LAMAR EVENTOS DE LCL_EVENT_RECEIVER
         CREATE OBJECT o_events_main.
         SET HANDLER o_events_main->on_user_command                          FOR o_grid_cc_main.
         *
         * ESTE EVENTO REGISTRA CLICK
         *
         SET HANDLER o_events_main->on_button_click_main_alv                 FOR o_grid_cc_main.
         ... 
         ... 
         *         
         *  OTRO EVENTO DE EJEMPLO....ACTUA CUANDO SE MODIFICA UN VALOR O 
         *  PRESIONAS ENTER
         CALL METHOD o_grid_cc_main->register_edit_event
            EXPORTING
              i_event_id = cl_gui_alv_grid=>mc_evt_enter.
         *
         * CREAR EL OBJETO QUE RECEIVER AL PRESIONAR EL CLICK
         *
         CREATE OBJECT lcl_handler_receiver_ca.
         ... 
         * LLAMAR FORM PARA CREAR EL FIELD-CATALOG
         * LLAMAR FORM PARA MODIFICAR EL FIELD-CATALOG
         ... 
         ... 
         *
         * LLAMAR METODO DE VISUALIZACION DEL ALV
         *
          CALL METHOD o_grid_cc_main->set_table_for_first_display .....
          ... 
          ... 
        . .. 
      ENDFORM.                                                                                                         "

Este tema se cerró automáticamente 7 días después de la última publicación. No se permiten nuevas respuestas.