Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

How to refresh ALV cl_salv_table with new data

Hello Guys I have a program with two ALV, in first ALV when user do click on one record the program show a second ALV on below side, but when the user do click on any other row of first ALV the second ALV must show the new information that is to say, should update ALV2 with the new information.

can anyone please help me?

Here my code:

METHOD on_double_click.

      cl_class->get_data(
      EXPORTING
       i_vbeln = t_rang[]
      IMPORTING
        e_data  = t_alv2
    ).

    CREATE OBJECT lo_alv_custom

      EXPORTING

        container_name = 'CONT2'.

    CREATE OBJECT lo_alv_splitter

      EXPORTING

        parent  = lo_alv_custom

        rows    = 2

        columns = 1.

    lo_alv_splitter->set_row_height( id = 1 height = 100  ).

    go_alv_cont2 = lo_alv_splitter->get_container( row  = 1 column = 1 ).

    cl_salv_table=>factory( EXPORTING r_container  = go_alv_cont2
                            IMPORTING r_salv_table = go_alv_grid2
                            CHANGING  t_table      = t_alv2 ).

    cl_report=>settings_alv2( ).
  TRY .
    go_alv_grid2->set_data(

      CHANGING
        t_table = t_alv2[]

    ).

      CATCH cx_salv_no_new_data_allowed.    "

    ENDTRY.
    go_alv_grid2->get_columns( ).
    go_alv_grid2->refresh( ).
    go_alv_grid2->display( ).
  ENDMETHOD.

1 ACCEPTED SOLUTION

former_member184158
Active Contributor

Hello Luis Roberto Franco,

can you try this:

go_alv_grid2>refresh( refresh_mode = if_salv_c_refresh=>full ).
cl_gui_cfw=>flush( ). 

Best regards

Ebrahim

4 REPLIES 4

former_member184158
Active Contributor

Hello Luis Roberto Franco,

can you try this:

go_alv_grid2>refresh( refresh_mode = if_salv_c_refresh=>full ).
cl_gui_cfw=>flush( ). 

Best regards

Ebrahim

Abinathsiva
Active Contributor

Hi Luis Roberto Franco,

you can try alv containers sample code given below...

DATA: alv_container TYPE REF TO cl_gui_docking_container.
DATA: alv_grid TYPE REF TO cl_gui_alv_grid.
DATA: layout TYPE lvc_s_layo.
DATA: fieldcat TYPE lvc_t_fcat.

* build field catalog .....

layout-zebra = 'X'.
layout-CWIDTH_OPT = 'X'.
layout-edit_mode = 'X'.
CHECK alv_container IS INITIAL.
CREATE OBJECT alv_container
EXPORTING
repid = repid
dynnr = sy-dynnr
side = alv_container->dock_at_right

extension = 4500.
CREATE OBJECT alv_grid
EXPORTING
i_parent = alv_container.
* ALV Specific. Data selection.
* Populate Field Catalog
PERFORM get_fieldcatalog.
CALL METHOD alv_grid->set_table_for_first_display
EXPORTING
is_layout = layout
is_variant = variant
i_save = 'U'
i_structure_name = 'IT_ALV'



CHANGING
it_outtab = it_alv[]
it_fieldcatalog = fieldcat[].

* endif.

so, if you select any record in first ALV will trigger to second ALV which is movable towards right....

Hello guys I solved my problem, now When I run my program I fill the two alvs, first with data and the second without data, that is to say empty, and on the event double click on first ALV y get data for fill second ALV, the only thing that I dont like its to show my second ALV empty when the program run, before this change I did show my first ALV with data and the second ALV it remained hidden until the user was clicked on some record

METHOD on_double_click.
GET_DATA().
*Actualiza alv item
          lr_columns = go_alv_grid2->get_columns( ).
          lr_columns->set_optimize( abap_true ).
          go_alv_grid2->refresh( refresh_mode = if_salv_c_refresh=>full  ).
  ENDMETHOD.

0 Kudos

You can use the following snippet for reference:

REPORT ztest_alv1.


TABLES : sflight, zbw360mat_n.
PARAMETERS : p_mtart TYPE mara-mtart.
*DATA : LO_MATERIAL TYPE REF TO CL_USERDEFINED_TYPES. "DECLARE CLASS
TYPES : BEGIN OF ty_mara.

        INCLUDE STRUCTURE zbw360mat.

TYPES :       END OF ty_mara.
TYPES : tt_mara TYPE TABLE OF ty_mara.
DATA : it_mara TYPE TABLE OF ty_mara.
DATA : wa_mara TYPE ty_mara.

DATA  report_i TYPE TABLE OF zbw360mat_n.
DATA  report_w TYPE  zbw360mat_n.
DATA : report_data_1 TYPE zbw360mat,
        report_data_2 TYPE TABLE OF zbw360mat.
DATA : gr_layout      TYPE REF TO cl_salv_layout,
       gr_layout_key  TYPE salv_s_layout_key,
       ls_layout      TYPE salv_s_layout,
       lt_layout_info TYPE salv_t_layout_info.

** Declaration for Global Display Settings
DATA : gr_display TYPE REF TO cl_salv_display_settings,
       lv_title   TYPE lvc_title.
** Declaration for Top of List settings
DATA : gr_content TYPE REF TO cl_salv_form_element.

DATA : l_rec(5)  TYPE n.
** declaration for ALV Columns
DATA : gr_columns    TYPE REF TO cl_salv_columns_table,
       gr_column     TYPE REF TO cl_salv_column_table,
       lt_column_ref TYPE salv_t_column_ref,
       ls_column_ref TYPE salv_s_column_ref.
** Coloring of Date columns **
DATA : lt_colo TYPE STANDARD TABLE OF lvc_s_colo,
       ls_colo TYPE lvc_s_colo.

*----------------------------------------------------------------------*
*       CLASS lcl_app DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_app DEFINITION .

  PUBLIC SECTION.
    METHODS : get_materials_for_type
                  IMPORTING im_mtart TYPE mara-mtart
                  EXPORTING et_mara TYPE tt_mara
    ,display_report.

  PRIVATE SECTION.

    CONSTANTS: btn_delete TYPE salv_de_function VALUE 'BTN_DELETE'.
    DATA: salv_table TYPE REF TO cl_salv_table,
    report_data TYPE TABLE OF  sflight.

    METHODS:
    handle_added_function FOR EVENT added_function OF cl_salv_events_table
    IMPORTING
    e_salv_function.

    METHODS:
    handle_btn_delete.

ENDCLASS.                    "lcl_app DEFINITION
*----------------------------------------------------------------------*
*       CLASS lcl_app IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_app IMPLEMENTATION.
  METHOD get_materials_for_type.
    SELECT * FROM zbw360mat
           INTO CORRESPONDING FIELDS OF  TABLE et_mara
          UP TO 5 ROWS.
    "WHERE MTART = IM_MTART .
  ENDMETHOD.                    "GET_MATERIALS_FOR_TYPE
  METHOD display_report.

    DATA: lr_events TYPE REF TO cl_salv_events_table.
    CALL METHOD me->get_materials_for_type
      EXPORTING
        im_mtart = p_mtart
      IMPORTING
        et_mara  = it_mara.
    TRY.
        cl_salv_table=>factory(
        IMPORTING
        r_salv_table = salv_table
        CHANGING
        t_table = it_mara ).
      CATCH cx_salv_msg .

    ENDTRY.

******* Layout Settings  *******
    CLEAR : gr_layout, gr_layout_key.
    MOVE sy-repid TO gr_layout_key-report.                        "Set Report ID as Layout Key

    gr_layout = salv_table->get_layout( ).                          "Get Layout of Table
    gr_layout->set_key( gr_layout_key ).                          "Set Report Id to Layout
    gr_layout->set_save_restriction( if_salv_c_layout=>restrict_none ). "No Restriction to Save Layout
******* Global Display Settings  *******
    CLEAR : gr_display.
    CONCATENATE  'DEL Monitoring - ' ' ' ' ' 'No of Recs :' l_rec INTO lv_title.
    gr_display = salv_table->get_display_settings( ).               " Global Display settings"
    gr_display->set_striped_pattern( if_salv_c_bool_sap=>true ).  "Activate Strip Pattern"
    gr_display->set_list_header( lv_title ).                      "Report Header"
** Get the columns from ALV Table
    gr_columns = salv_table->get_columns( ).

    IF gr_columns IS NOT INITIAL.
      REFRESH : lt_column_ref.
      CLEAR   : ls_column_ref.
      lt_column_ref = gr_columns->get( ).
** Get columns properties
      gr_columns->set_optimize( if_salv_c_bool_sap=>true ).
      gr_columns->set_key_fixation( if_salv_c_bool_sap=>true ).
      TRY.
          gr_columns->set_color_column( 'T_COLOR' ).
        CATCH cx_salv_data_error .
      ENDTRY.
    ENDIF.
    DATA: lr_selections TYPE REF TO cl_salv_selections.

    lr_selections = me->salv_table->get_selections( ).

    lr_selections->set_selection_mode( if_salv_c_selection_mode=>row_column ).

* Event handling
    lr_events = me->salv_table->get_event( ).
    SET HANDLER me->handle_added_function FOR lr_events.
    me->salv_table->set_screen_status(
    report = sy-repid
    pfstatus = 'SALV_TABLE_STANDARD'
    set_functions = cl_salv_table=>c_functions_all
    ).

    me->salv_table->display( ).

  ENDMETHOD.                    "display_report

  METHOD handle_added_function.

    CASE e_salv_function.

      WHEN btn_delete.
        me->handle_btn_delete( ).
    ENDCASE.

  ENDMETHOD.                    "handle_added_function
  METHOD handle_btn_delete.
    REFRESH : report_data_2 , report_i.
    DATA: lr_selections TYPE REF TO cl_salv_selections,
    lt_sel_rows TYPE salv_t_row,
    lv_sel_row LIKE LINE OF lt_sel_rows,
    lv_n_rows TYPE i,
    lv_answer TYPE c LENGTH 1.

    lr_selections = me->salv_table->get_selections( ).
    lt_sel_rows = lr_selections->get_selected_rows( ).
    lv_n_rows = LINES( lt_sel_rows ).

    LOOP AT lt_sel_rows INTO lv_sel_row .
      READ TABLE it_mara INDEX lv_sel_row INTO  report_data_1.

      APPEND report_data_1 TO report_data_2.

      CLEAR report_data_1.

    ENDLOOP.
    DELETE zbw360mat FROM TABLE report_data_2.

    IF sy-subrc IS INITIAL.
      LOOP AT it_mara INTO report_data_1.

        READ TABLE report_data_2 WITH  KEY materialname = report_data_1-materialname TRANSPORTING NO FIELDS.
        IF sy-subrc IS INITIAL.
          DELETE TABLE it_mara FROM  report_data_1.

        ENDIF.
        CLEAR report_data_1.

      ENDLOOP.
      APPEND LINES OF report_data_2 TO report_i.

      FIELD-SYMBOLS : <fs> TYPE zbw360mat_n.

      LOOP AT report_i ASSIGNING <fs>.

        <fs>-uname = sy-uname.

      ENDLOOP.

      MODIFY zbw360mat_n FROM TABLE report_i   .
    ENDIF.
* Refresh ALV
    me->salv_table->refresh( refresh_mode = if_salv_c_refresh=>full ).
  ENDMETHOD.                    "handle_btn_delete

ENDCLASS.                    "lcl_app IMPLEMENTATION
END-OF-SELECTION.

  DATA: gr_app TYPE REF TO lcl_app.

  CREATE OBJECT gr_app.
  gr_app->display_report( ).