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.
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. "