¿Qué tengo que hacer para controlar un doble click en el listado de una ALV y poder irme a una transacción determinada? Gracias
Doble click en listados ALV
Colapsar
X
-
Etiquetas: Ninguno
-
Si usas la función REUSE_ALV_GRID_DISPLAY hay uno de los campos del exporting que es I_CALLBACK_USER_COMMAND, aquí le indicas el nombre de la subrutina a la que tiene que ir cuando haces doble click. Dentro de ahí, ya controlas con un CASE lo que quieres hacer según el campo que se haya hecho click.
Un saludoUn saludo
Comentario
-
Hola, si estás usando la función REUSE_ALV_LIST_DISPLAY debes crear un form USER_COMMAND y añadirlo a una tabla de eventos que luego será mostrada en la llamada a la función del ALV. Dentro del form haces un case cuando SY-UCOMM sea '&IC1' (doble click) y ahi haces tu CALL TRANSACTION xxx. Algo asi:
Data event type slis_alv_event.
event-name = slis_ev_user_command.
event-form = 'USER_COMMAND'.
append event to gt_events.
form user_command using r_ucomm like sy-ucomm
rs_selfield type slis_selfield.
case r_ucomm.
when '&IC1'. "Doble Click
read table orddyn index rs_selfield-tabindex.
if sy-subrc = 0.
set parameter id 'BLN' field orddyn-belnr.
set parameter id 'BUK' field orddyn-bukrs.
set parameter id 'GJR' field orddyn-gjahr.
call transaction 'FB03' and skip first screen.
endif.
endcase.
endform. "USER_COMMAND
call function 'REUSE_ALV_LIST_DISPLAY'
exporting
i_callback_program = g_repid
is_layout = gs_layout
it_fieldcat = gt_fieldcat[]
it_sort = gt_sort[]
it_events = gt_events
tables
t_outtab = orddyn
exceptions
program_error = 1
others = 2.Saludos,
Claudia V.
Comentario
-
Muchas Gracias
¡Hola!
Me has sido de mucha ayuda.
Saludos.
Ignacio
Originalmente publicado por Claudia ValdespinoHola, si estás usando la función REUSE_ALV_LIST_DISPLAY debes crear un form USER_COMMAND y añadirlo a una tabla de eventos que luego será mostrada en la llamada a la función del ALV. Dentro del form haces un case cuando SY-UCOMM sea '&IC1' (doble click) y ahi haces tu CALL TRANSACTION xxx. Algo asi:
Data event type slis_alv_event.
event-name = slis_ev_user_command.
event-form = 'USER_COMMAND'.
append event to gt_events.
form user_command using r_ucomm like sy-ucomm
rs_selfield type slis_selfield.
case r_ucomm.
when '&IC1'. "Doble Click
read table orddyn index rs_selfield-tabindex.
if sy-subrc = 0.
set parameter id 'BLN' field orddyn-belnr.
set parameter id 'BUK' field orddyn-bukrs.
set parameter id 'GJR' field orddyn-gjahr.
call transaction 'FB03' and skip first screen.
endif.
endcase.
endform. "USER_COMMAND
call function 'REUSE_ALV_LIST_DISPLAY'
exporting
i_callback_program = g_repid
is_layout = gs_layout
it_fieldcat = gt_fieldcat[]
it_sort = gt_sort[]
it_events = gt_events
tables
t_outtab = orddyn
exceptions
program_error = 1
others = 2.Comentario
-
he hecho lo mismo pero no me resulta
He puesto un break point en el form user_command y cuando doy doble clic en el alv list, no entra el evento al break point.Código:DATA: gt_events_1 TYPE slis_t_event. PERFORM eventtab_build USING gt_events_1[]. FORM user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield. DATA: wa LIKE output_detail_item. CASE r_ucomm. WHEN '&IC1'. "CHECK NOT rs_selfield-value IS INITIAL. READ TABLE output_detail_item INDEX rs_selfield-tabindex INTO wa. IF rs_selfield-sel_tab_field CS 'BELNR'. SET PARAMETER ID 'BUK' FIELD wa-bukrs. SET PARAMETER ID 'BLN' FIELD output_detail_item-belnr. SET PARAMETER ID 'GJR' FIELD sd_gjahr-low. CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN. ENDIF. ENDCASE. ENDFORM. FORM eventtab_build USING lt_events TYPE slis_t_event. DATA: ls_event TYPE slis_alv_event. ********************************************************************** ls_event-name = slis_ev_user_command. ls_event-form = 'USER_COMMAND'. append ls_event to lt_events. ********************************************************************** CALL FUNCTION 'REUSE_ALV_EVENTS_GET' EXPORTING i_list_type = 0 IMPORTING et_events = lt_events. READ TABLE lt_events WITH KEY name = slis_ev_top_of_page INTO ls_event. IF sy-subrc = 0. MOVE gc_formname_top_of_page TO ls_event-form. * MOdify lt_events from Ls_EVENT index sy-tabix. APPEND ls_event TO lt_events. * APPEND ls_event to LT_EVENTS index sy-tabix. ENDIF. READ TABLE lt_events WITH KEY name = slis_ev_end_of_list INTO ls_event. IF sy-subrc = 0. MOVE gc_formname_top_of_page TO ls_event-form. * MOdify lt_events from Ls_EVENT index sy-tabix. APPEND ls_event TO lt_events. APPEND ls_event to LT_EVENTS index sy-tabix. ENDIF. DEFINE trigger_events. * Top of list read table lt_events with key name = &1 assigning <event>. if ( sy-subrc = 0 ). <event>-form = &2. endif. END-OF-DEFINITION. trigger_events: slis_ev_top_of_list gc_formname_top_of_list, slis_ev_top_of_page gc_formname_top_of_page, slis_ev_after_line_output gc_formname_after_line_output, slis_ev_end_of_page gc_formname_end_of_page, slis_ev_end_of_list gc_formname_end_of_list. ENDFORM. FORM call_alv_detail. DATA: gt_event_exit TYPE slis_t_event_exit, gw_event_exit LIKE LINE OF gt_event_exit. gw_event_exit-ucomm = '&RNT'. gw_event_exit-after = 'X'. APPEND gw_event_exit TO gt_event_exit. CLEAR gw_event_exit. *END @FH210710 PERFORM alv_initialization. PERFORM layout_build USING gs_layout_1. PERFORM print_build USING gs_print. g_variant_1-variant = s_vari. CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING i_callback_program = g_repid_1 i_callback_pf_status_set = 'SET_STATUS' i_callback_user_command = 'user_command' is_layout = gs_layout_1 it_fieldcat = gt_fieldcat_1[] it_sort = it_sortcat i_save = g_save_1 is_variant = g_variant_1 it_events = gt_events_1 it_event_exit = gt_event_exit is_print = gs_print TABLES t_outtab = output_detail_item EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE e301. ENDIF. ENDFORM.
Algun consejo??Editado por última vez por JoNhNaTaN; 18/06/2013, 00:14:55.Comentario
Comentario