Ayuda eventos alv oo

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • miguel.esteban.martin
    Member
    • ene
    • 89

    #1

    Ayuda eventos alv oo

    Hola abaperos.

    Tengo una duda sobre el evento del alv oo que tengo que utilizar.

    En mi desarrollo quieren que cuando señale una linea del alv compruebe los datos que hay en esa linea y segun lo que halla haga una serie de acciones.

    Yo se hacer esto señalando la linea y dando a un boton pero hay algun evento que pueda utilizar que salte segun señalo la linea.
    Sin tener que dar a ningun boton ni nada solo que salte al momento que selecciono la linea.

    Muhcas gracias.

    Un saludo.
  • Henger Abreu
    Junior Member
    • jun
    • 28

    #2
    Amigo si te entendi bien, lo que quieres es que cuando le des click a una linea de tu ALV te ejecute un evento, bueno lo que tienes que hacer es que cuando ejecutes el ALV "REUSE_ALV_GRID_DISPLAY" activa el USER_COMMAND y creas un Forms USER_COMMAND y ahí, programes lo el evento que tu quieres que haga. Ejemplo:

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
    I_CALLBACK_PROGRAM = SY-REPID
    I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE'
    I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
    IS_LAYOUT = LAYOUT
    IT_FIELDCAT = FIELDCAT
    IT_SORT = GT_SORT
    * I_SAVE = 'X'
    TABLES
    T_OUTTAB = T_OUT_TAB
    EXCEPTIONS
    PROGRAM_ERROR = 1
    OTHERS = 2.

    FORM USER_COMMAND USING r_ucomm LIKE sy-ucomm
    rs_selfield TYPE slis_selfield.
    DATA: wa_alv LIKE T_OUT_TAB.
    CASE r_ucomm.
    WHEN '&IC1'. "***********Doble Click********
    evento que quiro.
    ENDCASE.
    ENDFORM.

    Espero que te ayude, suerte.

    Comentario

    • martin89
      Member
      • may
      • 53

      #3
      Probaste el evento double_click?? o el BUTTON_CLICK??

      Saludos

      Comentario

      • Jonathan Barrio
        Junior Member
        • nov
        • 25

        #4
        Creo que lo que necesitas es esto, si es un ALV OO.
        Fijate en el hot_spot, no en el DATA_CHANGED, que es para que salte cuando haces modificaciones.

        ************************************************** **********************
        * Definición de CLASES
        ************************************************** **********************
        *
        CLASS lcl_co_application DEFINITION DEFERRED.
        DATA: g_application TYPE REF TO lcl_co_application.

        *----------------------------------------------------------------------*
        * CLASS cl_application DEFINITION
        *----------------------------------------------------------------------*
        *
        *----------------------------------------------------------------------*
        CLASS lcl_co_application DEFINITION.

        PUBLIC SECTION.
        METHODS:

        handle_data_changed
        FOR EVENT data_changed OF cl_gui_alv_grid
        IMPORTING er_data_changed,

        handle_hotspot_click
        FOR EVENT hotspot_click OF cl_gui_alv_grid
        IMPORTING e_row_id e_column_id es_row_no.

        ENDCLASS. "cl_application DEFINITION

        *&---------------------------------------------------------------------*
        *& Class (Implementation) cl_application
        *&---------------------------------------------------------------------*
        * Text
        *----------------------------------------------------------------------*
        CLASS lcl_co_application IMPLEMENTATION.

        METHOD handle_data_changed.
        * perform f_handle_data_changed using er_data_changed.
        ENDMETHOD. "handle_data_changed_cli

        METHOD handle_hotspot_click.
        * perform f_handle_hotspot_click using e_row_id e_column_id es_row_no.
        ENDMETHOD. "handle_data_changed_cli

        ENDCLASS. "cl_application

        AL CREAR EL CONTENEDOR Y EL ALV ANTES DE LLAMARLO DEBES INCLUIR EL METODO:

        *&---------------------------------------------------------------------*
        *& Form F_ALV_0017
        *&---------------------------------------------------------------------*
        * text
        *----------------------------------------------------------------------*
        * --> p1 text
        * <-- p2 text
        *----------------------------------------------------------------------*
        FORM f_alv_0017 .

        DATA: lt_toolbar_excluding TYPE ui_functions.

        IF g_container_alv IS INITIAL.

        * Objeto contenedor del ALV
        CREATE OBJECT g_container_alv
        EXPORTING
        container_name = 'ALV_MODELOS_PROYECTOS'. "'ALV_CONTAINER'.

        * Objeto ALV
        CREATE OBJECT g_grid
        EXPORTING
        i_parent = g_container_alv.

        * perform f_register_edit_event using g_grid.

        CREATE OBJECT g_application.
        SET HANDLER g_application->handle_data_changed FOR g_grid.
        SET HANDLER g_application->handle_hotspot_click FOR g_grid.



        y PARA QUE VEAS COMO DECLARAR LOS PARAMETROS FORMALES Y UN PEQUEÑO EJEMPLO :

        *&---------------------------------------------------------------------*
        *& Form F_HANDLE_HOTSPOT_CLICK
        *&---------------------------------------------------------------------*
        * text
        *----------------------------------------------------------------------*
        * -->P_E_ROW_ID text
        * -->P_E_COLUMN_ID text
        * -->P_ES_ROW_NO text
        *----------------------------------------------------------------------*
        FORM f_handle_hotspot_click USING pi_row_id TYPE lvc_s_row
        pi_column_id TYPE lvc_s_col
        pi_row_no TYPE lvc_s_roid.

        * Ini mod IVALLEJO ************************************************** *****

        CLEAR w_co04_0002.
        READ TABLE i_co04_0002 INTO w_co04_0002 INDEX pi_row_id.
        IF sy-subrc = 0.
        CASE pi_column_id-fieldname.
        WHEN 'OBSERV'.
        CALL SCREEN 9010 STARTING AT 130 2.
        ENDCASE.
        ENDIF.

        * End mod IVALLEJO ************************************************** *****

        ENDFORM. " F_HANDLE_HOTSPOT_CLICK


        SINO INTRODUCE UN "BREAK usuario" y MEDIANTE EL DEBUG ANALIZA LAS TABLA Y VARIABLES Y LOS DATOS A LOS QUE TIENES ACCESO DENTRO DEL FORM.


        Supongo que esto te servira, suerte.

        Comentario

        • Adriana Anestoso
          Junior Member
          • abr
          • 18

          #5
          Excelente tu respuesta, a mi me pidieron exactamente lo mismo , solo que el mio es un alv oo y el campo sel_mode es A, por lo que automaticamente aparece una columna de seleccion, hice tu ejemplo pero no me funciona no se si me falta algo que declarar las clases y crear el objeto en mi alv.....

          Comentario

          Trabajando...