Captura eventos ALV OO

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Ermengol
    Junior Member
    • mar
    • 6

    #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.
  • ibecerra

    #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

    Comentario

    • Ermengol
      Junior Member
      • mar
      • 6

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

      Comentario

      • ibecerra

        #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&COPY'.
        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&COPY_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.

        Comentario

        • ibecerra

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

          Comentario

          • ibecerra

            #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&COPY'.
            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&COPY_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

            Comentario

            • Ermengol
              Junior Member
              • mar
              • 6

              #7
              Muchas gracias, lo pruevo.

              Comentario

              • mcarrasco
                Member
                • jul
                • 71

                #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
                Archivos Adjuntos

                Atte. Marcos Carrasco...

                Comentario

                • SAPING
                  Senior Member
                  • may
                  • 199

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

                  Comentario

                  • SAPING
                    Senior Member
                    • may
                    • 199

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

                    Comentario

                    Trabajando...