Ver la Versión Completa : Insertar botón en la barra de herramientas del ALV
jplozano
24/02/07, 20:31:30
Hola a todos:
Tengo preparado un ALV y necesito insetar un botón en la barra de herramientas mediante código, he visto algún ejemplo pero con programación orientada a objetos pero yo tengo un ALV de tipo grid normalillo.
La idea poder insertar un botón y capturar cuando ese botón sea pulsado para llamar a un formulario, bueno cuando descubra como.
Saludos. :confused:
Hola jplozano yo tengo el mismo problema que tú. Te comento lo que se hasta ahora a ver si nos podemos ayudar mutuamente.
Por lo visto cuanto tu llamas a la función alv grid. De la siguiente forma
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_BUFFER_ACTIVE = ' '
i_callback_program = repid
i_callback_top_of_page = 'TOP_OF_PAGE'
i_callback_pf_status_set = 'PF_STATUS_SET'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
is_layout = s_layout
it_fieldcat = fieldcat
it_sort = tab_sort
i_save = 'A'
TABLES
t_outtab = it_list
EXCEPTIONS
program_error = 1
OTHERS = 2.
En donde pone i_callback_top_of_page lo que estas poniendo en realidad es una llamada a una perform por lo que tienes que tener en tú programa una form con la siguiente forma.
*---------------------------------------------------------------------*
* FORM pf_status_set *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM pf_status_set USING gt_extab TYPE slis_t_extab.
SET TITLEBAR 'ALV' WITH sy-title.
SET PF-STATUS 'ALV'.
ENDFORM.
Desda aqui puedes pinchar en SET PF-STATUS 'ALV' y de esta forma crearas el status.
Por lo que es posible deducir que para tratar el evento que va a producir el status deberías tener un form que se llamase 'USER_COMMAND'. Es decir de esta forma.
*---------------------------------------------------------------------*
* FORM user_command *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> F_UCOMM *
* --> I_SELFIELD *
*---------------------------------------------------------------------*
FORM USER_COMMAND USING f_ucomm LIKE sy-ucomm
i_selfield TYPE slis_selfield.
READ TABLE it_list INDEX i_selfield-tabindex.
CASE f_ucomm.
WHEN 'SALIR'.
LEAVE PROGRAM.
ENDCASE.
ENDFORM.
Pero la verdad es que a mi me da un dump me dice lo siguiente
Errores tiempo ejecució
MOVE_TO_LIT_NOTALLOWED_NODATA
ocurrido el 25.02.2007 a 23:15:39
>> Dump breve ABAP no almacenado completamente (muy grande)
Assignment error: Overwriting a protected field.
Siento responderte con una pregunta pero la verdad es que no se por donde seguir a ver si la gente del foro nos echa una mano.
jplozano
26/02/07, 06:59:15
Hola JAC:
Yo está parte creo que la tengo más o menos resuelta. Por lo que he visto mí código es muy parecido al tuyo. Te lo adjunto por si tú ves alguna diferencia.
form user_command_01 using ucomm like sy-ucomm
selfield type slis_selfield.
READ TABLE ti_datos INDEX selfield-tabindex into wa_datos.
check sy-subrc = 0.
case ucomm.
* Doble Click
when '&IC1'.
CASE SELFIELD-FIELDNAME.
WHEN 'CHECKBOX'.
wa_datos-checkbox = 'X'.
modify ti_datos from wa_datos index sy-tabix.
ucomm = '&REFRESH'.
WHEN OTHERS.
ENDCASE.
endcase.
endform. "user_command_01
Lo unico que yo controlo si se punsa en una columna para activar un checkbox.
Saludos. Espero que te sirva.
jplozano me puedes decir que le has puesto para rellenar el argumento
IT_EVENTS, es que creo que este es mi problema. Que es precisamente donde se rellena el evento a que form esta asociado.
Si me equivoco que alguién me corrija gracias.
jplozano
27/02/07, 13:41:16
Te pasó la llamada a la función entera, por si quieres compararla.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = g_repid
i_callback_user_command = 'USER_COMMAND_01'
* i_callback_pf_status_set = 'SET_PF_STATUS_01'
i_structure_name = 't_trabajo '
is_layout = gs_layout
it_fieldcat = gt_fieldcat[]
IT_SORT = GT_SORT[]
IT_EXCLUDING = GT_EXCLUDE[]
* I_DEFAULT = 'X'
I_SAVE = ' ' "Grabar Variante
IS_VARIANT = ls_vari
IT_EVENTS = GT_EVENTS[]
TABLES
T_OUTTAB = t_materiales
EXCEPTIONS
program_error = 1
OTHERS = 2.
Suerte.
Renzo_bravo
09/01/14, 21:04:39
1. Visualizar el programa SAPLSLVC_FULLSCREEN.
2. Desplegar Status GUI.
3. clic derecho sobre STANDARD_FULLSCREEN.
4. clic en copiar.
5. escoger el programa destino y colocar un nombre.
6. Editar nuestro programa Z y luego ingresar al status copiado. Modificar ó añadir el botón requerido.
Funciona!!!
www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web