Refrescar ALV GRID OO Abap

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Mr Robot
    Junior Member
    • nov
    • 2

    #1

    Refrescar ALV GRID OO Abap

    Buenos Dias, Tardes o Noches.

    -Estimados, aqui explico mi duda, por si alguien podria ayudarme.

    Resulta que tengo 7 ALV, y necesito mostrarlos en una sola pantalla, por que se requiere para monitorear todos en tiempo real, resulta que ya encontre la forma de colocarlos en una sola Dynpro, mediante CC, y funciona bien, tengo una pantalla principal donde indico una fecha y al pulsar "Boton de Consulta", me muestra la informacion correspondiente en cada Recuadro con respecto a la fecha, hasta ahi todo bien, ahora cuando regreso a la pantalla anterior, ingreso otra fecha para consultar y muestre datos de la fecha nueva, doy "Boton de Consulta" y me vuelve a mostrar los datos de la fecha anterior ingresada.

    Lo que necesito es una forma de refrescar la pantalla y asi me muestre los datos de la nueva fecha sin necesidad de cerrar la transaccion y volverla a ejecutar.

    PD: He leido varios temas pero sin exito, Intente el REFRESH DISPLAY pero nada, intente limpiar mis TI y WA al regresar a la pantalla, pero sin resultados.

    Agradeceria de corazon quien pueda apoyarme con eso, y Muchisimas gracias de Ante mano, compañeros Abaperos.

    Saludos.
    Raynner F: ABAP.
    Editado por última vez por Mr Robot; 24/11/2015, 22:25:02.
  • naxito
    Junior Member
    • oct
    • 2

    #2
    Buenas,
    no tengo claro como habrás hecho el tema de tener tantos ALV en una pantalla.
    Supongo que habrás creado 7 customs containers en la dynpro, y asignar cada ALV grid a un custom container,
    Hay una solución más "bonita" a mi gusto, que te evita crear tantos customs containers, que es usar el objeto cl_gui_splitter_container.
    En mi caso, tuve que hacer una pantalla con 3 ALVs. 1 en la mitad superior, y 2 en la mitad inferior.
    Aqui el codigo para conseguir tener 3 containers, generados a partir de splitters.
    Código:
    data:
          d_grid1            TYPE REF TO cl_gui_alv_grid, "grid superior
          d_cc_grid1         TYPE REF TO cl_gui_container, "container para grid superior
          d_grid2            TYPE REF TO cl_gui_alv_grid, "grid inferior izquierdo
          d_cc_grid2         TYPE REF TO cl_gui_container,"container para grid inferior izquierdo
          d_grid3            TYPE REF TO cl_gui_alv_grid, "grid inferior izquierdo
          d_cc_grid3         TYPE REF TO cl_gui_container, "container para grid inferior derecho
          d_container_bottom TYPE REF TO cl_gui_container,"container auxiliar que incluye d_cc_grid2 y d_cc_grid3
          d_splitter        TYPE REF TO cl_gui_splitter_container,
          d_splitter_bottom        TYPE REF TO cl_gui_splitter_container.
    
    END-OF-SELECTION.
    CALL SCREEN 100.
    FORM f_set_screen_display .
    *   Las siguientes lineas son para crear la cabecera. Es necesario
    *   definir un splitter para separarla del ALV
      CREATE OBJECT d_dyndoc
        EXPORTING
          style = 'ALV_GRID'.
    *   Creamos el splitter para el custom container
      CREATE OBJECT d_splitter
        EXPORTING
    *        parent  = custom_container
          parent  = cl_gui_container=>default_screen "utiliza todo el tamaño disponible y no hay que crear un custom container en la dynpro
          rows    = 2  "filas 
          columns = 1. "
      d_cc_grid1 = d_splitter->get_container( row = 1 column = 1 ).
      d_container_bottom = d_splitter->get_container( row = 2 column = 1 ).
      CREATE OBJECT d_splitter_bottom
        EXPORTING
          parent  = d_container_bottom
          rows    = 1
          columns = 2.
      d_cc_grid2 = d_splitter_bottom->get_container( row = 1 column = 1 ).
      d_cc_grid3 = d_splitter_bottom->get_container( row = 1 column = 2 ).
    
    ENDFORM.                    " F_SET_SCREEN_DISPLAY
    FORM f_set_alv.
    
    IF d_grid1 IS INITIAL.
        CREATE OBJECT d_grid1
          EXPORTING
            i_parent = d_cc_grid1.
        CALL METHOD d_grid1->set_table_for_first_display
          EXPORTING
            is_layout       = lr_layout1
          CHANGING
            it_fieldcatalog = i_fieldcatalog1
            it_outtab       = <ld_table1>
            it_sort         = lt_sort1.
      ELSE.
        CALL METHOD d_grid1->refresh_table_display.
      ENDIF.
    IF d_grid2 IS INITIAL.
        CREATE OBJECT d_grid2
          EXPORTING
            i_parent = d_cc_grid2.
        CALL METHOD d_grid2->set_table_for_first_display
          EXPORTING
            is_layout       = lr_layout2
          CHANGING
            it_fieldcatalog = i_fieldcatalog2
            it_outtab       = <ld_table2>
            it_sort         = lt_sort2.
      ELSE.
        CALL METHOD d_grid2->refresh_table_display.
      ENDIF.
    IF d_grid3 IS INITIAL.
        CREATE OBJECT d_grid3
          EXPORTING
            i_parent = d_cc_grid3.
        CALL METHOD d_grid3->set_table_for_first_display
          EXPORTING
            is_layout       = lr_layout3
          CHANGING
            it_fieldcatalog = i_fieldcatalog3
            it_outtab       = <ld_table3>
            it_sort         = lt_sort3.
      ELSE.
        CALL METHOD d_grid3->refresh_table_display.
      ENDIF.
    ENDFORM
    MODULE m_status_0100 OUTPUT.
      SET PF-STATUS 'MAIN100'.
      IF d_splitter IS INITIAL.
        PERFORM f_set_screen_display.
      ENDIF.
    *  IF event_receiver IS INITIAL.
    *    CREATE OBJECT event_receiver.
    *  ENDIF.
      PERFORM f_set_alv.
    ENDMODULE.                 " M_STATUS_0100  OUTPUT
    Con la clase cl_gui_splitter_container ofrece métodos para establecer el ancho alto, y mas cosas de un area seleccionada. lo que es bastante útil.

    Para el tema de la actualización de las tablas. Debería funcionar si separas la creación y alimentación de las tablas inicial, del refresco de datos. tal y como hago yo.
    De todos modos, puedes publicar tu codigo, tal vez podamos ver qué es lo que falla.
    Editado por última vez por naxito; 26/11/2015, 09:20:44.

    Comentario

    Trabajando...