Ayuda data_changed alv.

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

    #1

    Ayuda data_changed alv.

    No tengo muy claro como se utiliza este metodo, podiais esplicarme como se usa.
    Mi programa tiene un alv que muestra los datos de mi tabla interna, tengo un campo editable y cuando cambie ese campo quiero que se modifique en mi tabla interna, me podias decir como se hace???
    muchas gracias
  • crounly
    Senior Member
    • nov
    • 227

    #2
    Asi es, se puede utilizar para trasportar los datos de tu ALV OO a la tabla interna, pero tienes que registrar el evento que producira tal efecto...

    Vamos por partes, como dijo Jack el Destripador

    Este seria un ejemplo de un ALV con una columna editable, cuando me introduzcan un dato lo replico en todos los registros de la tabla interna con igual clave ( ZBOX, para el ejemplo )

    1º La clase para manejar los eventos, tal que asi:

    Código:
    CLASS lcl_event_handler DEFINITION.
    
      PUBLIC SECTION.
    
        METHODS:
    
        HANDLE_DATA_CHANGED FOR EVENT DATA_CHANGED
                             OF CL_GUI_ALV_GRID
                             IMPORTING ER_DATA_CHANGED
                                       E_ONF4
                                       E_ONF4_BEFORE
                                       E_ONF4_AFTER.
    
    
    ENDCLASS. "lcl_event_handler DEFINITION
    
    
    
    
    
    
    *---------------------------------------------------------------------*
    *       CLASS lcl_event_handler IMPLEMENTATION
    *---------------------------------------------------------------------*
    *       ........                                                      *
    *---------------------------------------------------------------------*
    CLASS lcl_event_handler IMPLEMENTATION.
    
      METHOD  HANDLE_DATA_CHANGED.
    * itab_ty_agrup es tipo de la tabla interna del alv
    
        FIELD-SYMBOLS: <zfield> TYPE itab_ty_agrup,
                               <FD> TYPE LINE OF itab_ty_agrup.
    
    
        ASSIGN er_data_changed->mp_mod_rows->* TO <zfield>.
    
    * Esta es la linea que ha cambiado
        READ TABLE <zfield> INDEX 1 ASSIGNING <FD>.
    
    * itab_alv_dynpro , tabla interna del ALV
        LOOP AT itab_alv_dynpro ASSIGNING <FS>
                      WHERE ZBOX EQ <FD>-ZBOX.
    
             <FS>-ZDATA = <FD>-zdata.   "Este es el campo editable
    
        ENDLOOP.
    
        call method gr_alvgrid->refresh_table_display.
    
      ENDMETHOD. "handler_method
    
    
    
    ENDCLASS. "lcl_event_handler IMPLEMENTATION
    2.-
    DATA: r_handler TYPE REF TO lcl_event_handler.
    3.- Cuando lanzo por primera vez el ALV

    *----REGISTRAMOS EL EVENTO ENTER
    * gr_alvgrid es el nombre de mi implementacion del ALV OO

    CREATE OBJECT r_handler.
    SET HANDLER r_HANDLER->HANDLE_DATA_CHANGED FOR gr_alvgrid.

    *---- Registrado el evento ENTER
    CALL METHOD gr_alvgrid->REGISTER_EDIT_EVENT
    EXPORTING
    I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER.

    *---- Registrado el evento cambio de celda o cursor arriba , abajo
    CALL METHOD gr_alvgrid->REGISTER_EDIT_EVENT
    EXPORTING
    I_EVENT_ID = cl_gui_alv_grid=>mc_evt_modified.

    *---- ALV GRID por pantalla
    CALL METHOD gr_alvgrid->set_table_for_first_display
    EXPORTING
    is_layout = gs_layout_oo
    CHANGING
    it_outtab = itab_alv_dynpro[]
    it_fieldcatalog = gt_fieldcat_oo
    EXCEPTIONS
    invalid_parameter_combination = 1
    program_error = 2
    too_many_lines = 3
    OTHERS = 4 .
    Con esto ya lo tendrias controlado, permuta y combina a tu gusto pero no lo mezclez con ron que da resaca

    Suerte
    http://codigoderetorno.blogspot.com.es/

    Comentario

    • miguel.esteban.martin
      Member
      • ene
      • 89

      #3
      muchisismas gracias, solo una pregunta mas, no hay forma de hacerlo sin fieldsymbols????

      Comentario

      • crounly
        Senior Member
        • nov
        • 227

        #4
        Para leer el registro modificado

        ASSIGN er_data_changed->mp_mod_rows->* TO <zfield>.


        me parece que no, para el resto ya es una mania propia
        http://codigoderetorno.blogspot.com.es/

        Comentario

        Trabajando...