#1
|
|||
|
|||
Captura eventos ALV OO
Mi problema es que intento capturar el evento producido por los botones
del toolbar, i no hay manera. alguien puede darme una pista. he definido la clase local, he implementado el metodo i he provado con diferentes eventos i no hay manera. gracias por avanzado. |
#2
|
|||
|
|||
hola te comento que los botones del toolbar del alv oo ya estan definidos y hacen su tarea estandard como por ejmplo ordenar , filtrar etc.
que es lo que deseas debuguear y encontrarte con la accion del boton? o agregar un nuevo boton al toolbar y personalizar la accion?. Saludos |
#3
|
|||
|
|||
lo que me pasa es que tengo un campo oculto y quando hago la acción de copiar fila no me copia los valores de la fila original(los de ese campo), por eso, queria controlar el evento del boton crear para copiar ese valor manualmente. parece ser, que los botones de copia, crear, insertar i quitar fila no se pueden controlar.
gracias. |
#4
|
|||
|
|||
facil quitalo y create tu propio boton copiar dentro del toolbar y hay puede hacer lo que quieras.
paso 1..... ejemplo SPAN {font-family: "Courier New";font-size: 10pt;color: #000000;background: #FFFFFF;}.L0S52 {color: #0000FF;} PERFORM exclude. donde.. SPAN {font-family: "Courier New";font-size: 10pt;color: #000000;background: #FFFFFF;}.L1S52 {color: #0000FF;}FORM exclude. SPAN {font-family: "Courier New";font-size: 10pt;color: #000000;background: #FFFFFF;}.L1S31 {font-style: italic;color: #808080;}.L1S33 {color: #4DA619;}.L1S52 {color: #0000FF;}*Excluimos los botones q no vamos a utilizar. DATA ls_toolbar_excluding TYPE ui_func. ls_toolbar_excluding = '&LOCAL&CUT'. INSERT ls_toolbar_excluding INTO TABLE lt_toolbar_excluding. ls_toolbar_excluding = '&LOCAL©'. INSERT ls_toolbar_excluding INTO TABLE lt_toolbar_excluding. ls_toolbar_excluding = '&LOCAL&PASTE'. INSERT ls_toolbar_excluding INTO TABLE lt_toolbar_excluding. ls_toolbar_excluding = '&LOCAL&UNDO'. INSERT ls_toolbar_excluding INTO TABLE lt_toolbar_excluding. ls_toolbar_excluding = '&LOCAL&INSERT_ROW'. INSERT ls_toolbar_excluding INTO TABLE lt_toolbar_excluding. ls_toolbar_excluding = '&LOCAL&PASTE_NEW_ROW'. INSERT ls_toolbar_excluding INTO TABLE lt_toolbar_excluding. ls_toolbar_excluding = '&LOCAL&APPEND'. INSERT ls_toolbar_excluding INTO TABLE lt_toolbar_excluding. ls_toolbar_excluding = '&LOCAL©_ROW'. INSERT ls_toolbar_excluding INTO TABLE lt_toolbar_excluding. ls_toolbar_excluding = '&LOCAL&DELETE_ROW'. INSERT ls_toolbar_excluding INTO TABLE lt_toolbar_excluding. ls_toolbar_excluding = '&INFO'. INSERT ls_toolbar_excluding INTO TABLE lt_toolbar_excluding. SPAN {font-family: "Courier New";font-size: 10pt;color: #000000;background: #FFFFFF;}.L1S33 {color: #4DA619;}.L1S52 {color: #0000FF;} CALL METHOD grid1->set_table_for_first_display EXPORTING i_structure_name = 'TI_ZTFIH' is_layout = gs_layout is_variant = gs_variant i_save = '' i_default = 'X' it_toolbar_excluding = lt_toolbar_excluding --> aqui quitas los botones o el boton de copiar o append. para que puedas crear tu propio boton y hacer lo que quieras....!!! seguimis con lo siguiente. paso 2. tienes tus clase definidas SPAN {font-family: "Courier New";font-size: 10pt;color: #000000;background: #FFFFFF;}.L1S52 {color: #0000FF;}class lcl_event_receiver definition. public section. METHODS handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid IMPORTING e_object e_interactive. SPAN {font-family: "Courier New";font-size: 10pt;color: #000000;background: #FFFFFF;}.L1S52 {color: #0000FF;} METHODS handle_user_command FOR EVENT user_command OF cl_gui_alv_grid IMPORTING e_ucomm. SPAN {font-family: "Courier New";font-size: 10pt;color: #000000;background: #FFFFFF;}.L1S52 {color: #0000FF;}endclass. SPAN {font-family: "Courier New";font-size: 10pt;color: #000000;background: #FFFFFF;}.L1S31 {font-style: italic;color: #808080;}.L1S52 {color: #0000FF;}class lcl_event_receiver implementation. METHOD handle_toolbar. PERFORM handle_toolbar CHANGING e_object. SPAN {font-family: "Courier New";font-size: 10pt;color: #000000;background: #FFFFFF;}.L1S52 {color: #0000FF;} METHOD handle_user_command. PERFORM handle_user_command USING e_ucomm. ENDMETHOD. "handle_toolbar creas tus nuevos botones en tu caso seria la copia o el append. pero antes ya los eliminastes.. osea lo quitas y lo vuelves a poner pero para personalizarlo. SPAN {font-family: "Courier New";font-size: 10pt;color: #000000;background: #FFFFFF;}.L1S31 {font-style: italic;color: #808080;}.L1S32 {color: #3399FF;}.L1S33 {color: #4DA619;}.L1S52 {color: #0000FF;}FORM handle_toolbar CHANGING e_object TYPE REF TO cl_alv_event_toolbar_set. DATA ls_toolbar TYPE stb_button. * REFRESH ti_fcode. perform usuario_perm. IF SY-SUBRC EQ 0. CLEAR ls_toolbar. ls_toolbar-butn_type = 3. CLEAR ls_toolbar. ls_toolbar-function = 'NUEVO'. ls_toolbar-icon = ICON_CREATE. ls_toolbar-quickinfo = text-008. ls_toolbar-disabled = space. APPEND ls_toolbar TO e_object->mt_toolbar. CLEAR ls_toolbar. ls_toolbar-butn_type = 4. CLEAR ls_toolbar. ls_toolbar-function = 'MODIF'. ls_toolbar-icon = ICON_CHANGE. ls_toolbar-quickinfo = text-009. ls_toolbar-disabled = space. APPEND ls_toolbar TO e_object->mt_toolbar. ENDIF. endform luego colocas la accion por cada boton SPAN {font-family: "Courier New";font-size: 10pt;color: #000000;background: #FFFFFF;}.L1S31 {font-style: italic;color: #808080;}.L1S32 {color: #3399FF;}.L1S33 {color: #4DA619;}.L1S52 {color: #0000FF;}FORM handle_user_command USING e_ucomm TYPE sy-ucomm. DATA: et_index_rows TYPE lvc_t_row. "#EC NEEDED DATA: et_row_no TYPE lvc_t_roid. DATA: wa_row TYPE lvc_s_roid. perform usuario_perm. IF SY-SUBRC NE 0. MESSAGE s000(zpp) WITH 'No tiene permiso para realizar esta acción'. ELSE. Wsyucomm = e_ucomm. CASE Wsyucomm. WHEN 'NUEVO'. CLEAR WZTFIH. WDESCRIPCION = 'Nuevo Registro'. CALL SCREEN 200 STARTING AT 5 5. clear Wsyucomm. * IF CONTAINER = 'C_ALV_GRID'. * PERFORM ELIMINA_REGISTRO. * ENDIF. WHEN 'MODIF'. CLEAR WZTFIH. * Obtener los numeros de filas que se han seleccionado. CALL METHOD grid1->get_selected_rows IMPORTING et_index_rows = et_index_rows et_row_no = et_row_no. IF not et_row_no[] is initial. LOOP AT et_row_no INTO wa_row. READ TABLE TI_ZTFIH INDEX wa_row-row_id. MOVE-CORRESPONDING TI_ZTFIH TO WZTFIH. WDESCRIPCION = 'Modificar Registro'. CALL SCREEN 200 STARTING AT 5 5. ENDLOOP. clear Wsyucomm. ENDIF. ENDCASE. ENDIF. ENDFORM. |
#5
|
|||
|
|||
sorry por la cojudes que sale de
SPAN {font-family: "Courier New";font-size: 10pt;color: #000000;background: #FFFFFF;}.L0S52 {color: #0000FF;} eso no se porque lo coloca mi editor .. asi q no le hagas caso. |
#6
|
|||
|
|||
facil quitalo y create tu propio boton copiar dentro del toolbar y hay puede hacer lo que quieras.
paso 1..... ejemplo PERFORM exclude. donde.. FORM exclude. *Excluimos los botones q no vamos a utilizar. DATA ls_toolbar_excluding TYPE ui_func. ls_toolbar_excluding = '&LOCAL&CUT'. INSERT ls_toolbar_excluding INTO TABLE lt_toolbar_excluding. ls_toolbar_excluding = '&LOCAL©'. INSERT ls_toolbar_excluding INTO TABLE lt_toolbar_excluding. ls_toolbar_excluding = '&LOCAL&PASTE'. INSERT ls_toolbar_excluding INTO TABLE lt_toolbar_excluding. ls_toolbar_excluding = '&LOCAL&UNDO'. INSERT ls_toolbar_excluding INTO TABLE lt_toolbar_excluding. ls_toolbar_excluding = '&LOCAL&INSERT_ROW'. INSERT ls_toolbar_excluding INTO TABLE lt_toolbar_excluding. ls_toolbar_excluding = '&LOCAL&PASTE_NEW_ROW'. INSERT ls_toolbar_excluding INTO TABLE lt_toolbar_excluding. ls_toolbar_excluding = '&LOCAL&APPEND'. INSERT ls_toolbar_excluding INTO TABLE lt_toolbar_excluding. ls_toolbar_excluding = '&LOCAL©_ROW'. INSERT ls_toolbar_excluding INTO TABLE lt_toolbar_excluding. ls_toolbar_excluding = '&LOCAL&DELETE_ROW'. INSERT ls_toolbar_excluding INTO TABLE lt_toolbar_excluding. ls_toolbar_excluding = '&INFO'. INSERT ls_toolbar_excluding INTO TABLE lt_toolbar_excluding. CALL METHOD grid1->set_table_for_first_display EXPORTING i_structure_name = 'TI_ZTFIH' is_layout = gs_layout is_variant = gs_variant i_save = '' i_default = 'X' it_toolbar_excluding = lt_toolbar_excluding --> aqui quitas los botones o el boton de copiar o append. para que puedas crear tu propio boton y hacer lo que quieras....!!! seguimis con lo siguiente. paso 2. tienes tus clase definidas class lcl_event_receiver definition. public section. METHODS handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid IMPORTING e_object e_interactive. METHODS handle_user_command FOR EVENT user_command OF cl_gui_alv_grid IMPORTING e_ucomm. endclass. class lcl_event_receiver implementation. METHOD handle_toolbar. PERFORM handle_toolbar CHANGING e_object. METHOD handle_user_command. PERFORM handle_user_command USING e_ucomm. ENDMETHOD. "handle_toolbar creas tus nuevos botones en tu caso seria la copia o el append. pero antes ya los eliminastes.. osea lo quitas y lo vuelves a poner pero para personalizarlo. FORM handle_toolbar CHANGING e_object TYPE REF TO cl_alv_event_toolbar_set. DATA ls_toolbar TYPE stb_button. * REFRESH ti_fcode. perform usuario_perm. IF SY-SUBRC EQ 0. CLEAR ls_toolbar. ls_toolbar-butn_type = 3. CLEAR ls_toolbar. ls_toolbar-function = 'NUEVO'. ls_toolbar-icon = ICON_CREATE. ls_toolbar-quickinfo = text-008. ls_toolbar-disabled = space. APPEND ls_toolbar TO e_object->mt_toolbar. CLEAR ls_toolbar. ls_toolbar-butn_type = 4. CLEAR ls_toolbar. ls_toolbar-function = 'MODIF'. ls_toolbar-icon = ICON_CHANGE. ls_toolbar-quickinfo = text-009. ls_toolbar-disabled = space. APPEND ls_toolbar TO e_object->mt_toolbar. ENDIF. endform luego colocas la accion por cada boton FORM handle_user_command USING e_ucomm TYPE sy-ucomm. DATA: et_index_rows TYPE lvc_t_row. "#EC NEEDED DATA: et_row_no TYPE lvc_t_roid. DATA: wa_row TYPE lvc_s_roid. perform usuario_perm. IF SY-SUBRC NE 0. MESSAGE s000(zpp) WITH 'No tiene permiso para realizar esta acción'. ELSE. Wsyucomm = e_ucomm. CASE Wsyucomm. WHEN 'NUEVO'. CLEAR WZTFIH. WDESCRIPCION = 'Nuevo Registro'. CALL SCREEN 200 STARTING AT 5 5. clear Wsyucomm. * IF CONTAINER = 'C_ALV_GRID'. * PERFORM ELIMINA_REGISTRO. * ENDIF. WHEN 'MODIF'. CLEAR WZTFIH. * Obtener los numeros de filas que se han seleccionado. CALL METHOD grid1->get_selected_rows IMPORTING et_index_rows = et_index_rows et_row_no = et_row_no. IF not et_row_no[] is initial. LOOP AT et_row_no INTO wa_row. READ TABLE TI_ZTFIH INDEX wa_row-row_id. MOVE-CORRESPONDING TI_ZTFIH TO WZTFIH. WDESCRIPCION = 'Modificar Registro'. CALL SCREEN 200 STARTING AT 5 5. ENDLOOP. clear Wsyucomm. ENDIF. ENDCASE. ENDIF. ENDFORM. __________________ IBF ARQUITECTO DE DESARROLLO ABAP |
#7
|
|||
|
|||
Muchas gracias, lo pruevo.
|
#8
|
||||
|
||||
Bueno amigo.!
Hola, ya he pasado por esto varias veces, te adjuntare un codigo y explicare con comentarios.
Efectivamente hay q eliminar los botones estandar y agregar los tuyos. Ahi se ve como lo hago. Se llena una tabla "LT_EXCLUDE" dnd estan todos los botones que se van a quitar. Te adjunto 2 archivos. La clase que contrlola los eventos y el codigo del programa. Hay un metodo que se encarga de obtener los botones que presiona el usuario, se llama handle_user_command. Echale un ojo Cualquier duda me avisas
__________________
Atte. Marcos Carrasco... |
#9
|
|||
|
|||
trx estandar
Buenas. Yo tengo el mismo problema pero en una trx estandar. En la trx BP, en una de las solapas donde debo setear un valor, debo hacer click en un boton de un alv el cual no genera eventos en mi grabacion por lo cual no puedo reproducir la accion. Al mismo tiempo, si es que logro reproducir el evento del click sobre el boton, nose si me tomara el valor del campo que deseo seleccionar.
Espero me haya explicado y vean este mensaje. Gracias. Saludos. |
#10
|
|||
|
|||
Eventos ALV
Gente, saludos.
Tengo ese problema que no lo puedo resolver. Necesito, primero, en una solapa de una trx estandar hacer un click sobre un boton del menu de un ALV y seleccionar un valor de la lista que muestra; estos pasos no me generan eventos capturados por la SHDB por lo que no puedo hacer que funcionen en mi Batch Input. Segundo, al oprimir un boton en la trx en otra solapa, me muestra un popup con un ALV en el cual debo hacer doble click en una de las lineas que muestra; esta parte del doble click en la linea tampoco genera evento por lo que no puedo reproducirla en mi BI. Alguno tiene alguna forma de solucionar este problema?.. Gracias. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|