Application Development and Automation 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: 
Read only

REFRESH ALV.

Former Member
0 Likes
3,370

Hello,

I do an ALV with CL_SALV_TABLE. But I can't refresh it well. Only can refresh 2 times . Why?

Somebody can help me, please?

I have 2 alv with 2 containers in the same screen.

The first gr_alv goes well . When I click on one field the second alv appear.But when I click on the other field of first alv the second alv don't refresh.

I have defined a class.

CLASS LCL_HANDLER DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS:
    ON_DOUBLE_CLICK
    FOR EVENT DOUBLE_CLICK OF CL_SALV_EVENTS_TABLE
    IMPORTING
       ROW
       COLUMN .

ENDCLASS.               "LCL_HANDLER
**&---------------------------------------------------------------------*
**&       Class (Implementation)  LCL_HANDLER
**&---------------------------------------------------------------------*
**        Text Esta en el Module double_click
**----------------------------------------------------------------------*
CLASS LCL_HANDLER IMPLEMENTATION.
  METHOD ON_DOUBLE_CLICK.
    CASE COLUMN.
      WHEN 'PEDIDO'.
        LOOP AT IT_LISTADO INTO WA_LISTADO.
           AUX_PEDIDO = WA_LISTADO-PEDIDO.
          IF SY-TABIX = ROW.
            EXIT.
          ENDIF.
        ENDLOOP.
       REFRESH IT_POSICION.
       SELECT * FROM ZPEDIDOSPOS INTO CORRESPONDING FIELDS
                                 OF TABLE IT_POSICION
                                 WHERE PEDIDO = AUX_PEDIDO.
         PERFORM ALV_POSICIONES.
    ENDCASE.
  ENDMETHOD. 

FORM ALV_POSICIONES.  "The problem is here, I think
IF GR_CONT2 IS INITIAL.
    CREATE OBJECT GR_CONT2
      EXPORTING
        CONTAINER_NAME              = 'MY_AREA2'
      EXCEPTIONS
        CNTL_ERROR                  = 1
        CNTL_SYSTEM_ERROR           = 2
        CREATE_ERROR                = 3
        LIFETIME_ERROR              = 4
        LIFETIME_DYNPRO_DYNPRO_LINK = 5
        OTHERS                      = 6.
    IF SY-SUBRC NE 0.
      MESSAGE E015(BC405).
    ENDIF.
  ELSE.
    GR_ALV2->REFRESH( ).
  ENDIF.

  TRY.
      CALL METHOD CL_SALV_TABLE=>FACTORY
        EXPORTING
          LIST_DISPLAY = ' '
          R_CONTAINER  = GR_CONT2
        IMPORTING
          R_SALV_TABLE = GR_ALV2
        CHANGING
          T_TABLE      = IT_POSICION.
    CATCH CX_SALV_MSG .
  ENDTRY.
  CALL METHOD GR_ALV2->DISPLAY.

ENDFORM.

____________________________________

pbo module___________________

PROCESS BEFORE OUTPUT.
 MODULE STATUS_6000.
 MODULE CREAR_VER.
 MODULE DOUBLE_CLICK.

_____________________________________

MODULE DOUBLE_CLICK OUTPUT.
  DATA: LR_HANDLER TYPE REF TO LCL_HANDLER.
  CREATE OBJECT LR_HANDLER.
  LR_COLUMNS = GR_ALV->GET_COLUMNS( ).
  LR_COLUMNS->SET_OPTIMIZE( ABAP_TRUE ).

TRY.
      LR_COLUMN ?= LR_COLUMNS->GET_COLUMN( 'PEDIDO' ).
      LR_COLUMN->SET_CELL_TYPE( IF_SALV_C_CELL_TYPE=>HOTSPOT ).
    CATCH CX_SALV_NOT_FOUND.
  ENDTRY.
  LR_EVENT = GR_ALV->GET_EVENT( ).
  SET HANDLER LR_HANDLER->ON_DOUBLE_CLICK FOR LR_EVENT.
   GR_ALV->DISPLAY( ).

ENDMODULE.   

7 REPLIES 7
Read only

Former Member
0 Likes
1,153

Hi!

You might try out to reset the SAP buffers. Use the /$sync transaction code for it.

Regards

Tamá

Read only

0 Likes
1,153

Thanks but I don't solve the problem

Read only

uwe_schieferstein
Active Contributor
0 Likes
1,153

Hello Ana

The sample report <b>ZUS_SDN_TWO_CL_SALV_TABLE</b> shows you how to refresh a secondary ALV list after double-clicking into the primary ALV list.

*&---------------------------------------------------------------------*
*& Report  ZUS_SDN_TWO_CL_SALV_TABLE
*&
*&---------------------------------------------------------------------*
*& Screen '0100' contains no elements.
*& ok_code -> assigned to GD_OKCODE
*&
*& Flow logic:
*  PROCESS BEFORE OUTPUT.
*    MODULE STATUS_0100.
**
*  PROCESS AFTER INPUT.
*    MODULE USER_COMMAND_0100.
*&
*&---------------------------------------------------------------------*

REPORT  zus_sdn_two_cl_salv_table.




DATA:
  gd_okcode        TYPE ui_func,
*
  go_docking       TYPE REF TO cl_gui_docking_container,
  go_splitter      TYPE REF TO cl_gui_splitter_container,
  go_cell_top      TYPE REF TO cl_gui_container,
  go_cell_bottom   TYPE REF TO cl_gui_container,
**  go_grid1         TYPE REF TO cl_gui_alv_grid,
**  go_grid2         TYPE REF TO cl_gui_alv_grid,
  go_table1        TYPE REF TO cl_salv_table,
  go_table2        TYPE REF TO cl_salv_table,
  go_events        TYPE REF TO cl_salv_events_table.


DATA:
  gt_knb1          TYPE STANDARD TABLE OF knb1,
  gt_knvv          TYPE STANDARD TABLE OF knvv.




*---------------------------------------------------------------------*
*       CLASS lcl_eventhandler DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_eventhandler DEFINITION.

  PUBLIC SECTION.

    CLASS-METHODS:
      handle_double_click FOR EVENT
          if_salv_events_actions_table~double_click
          OF cl_salv_events_table
          IMPORTING
            row
            column,

      handle_link_click FOR EVENT
          if_salv_events_actions_table~link_click
          OF cl_salv_events_table
          IMPORTING
            row
            column.

ENDCLASS.                    "lcl_eventhandler DEFINITION

*---------------------------------------------------------------------*
*       CLASS lcl_eventhandler IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_eventhandler IMPLEMENTATION.

  METHOD handle_double_click.
*   define local data
    DATA:
      lo_table   TYPE REF TO cl_salv_table,
      lt_orders  TYPE STANDARD TABLE OF bapiorders,
      ls_knb1    TYPE knb1.


    READ TABLE gt_knb1 INTO ls_knb1 INDEX row.
    IF ( syst-subrc = 0 ).
      SELECT        * FROM  knvv INTO TABLE gt_knvv
             WHERE  kunnr  = ls_knb1-kunnr.
    ENDIF.

    cl_gui_cfw=>set_new_ok_code( 'REFRESH' ).

  ENDMETHOD.                    "handle_double_click



  METHOD handle_link_click.

  ENDMETHOD.                    "handle_link_click


ENDCLASS.                    "lcl_eventhandler IMPLEMENTATION






START-OF-SELECTION.

  SELECT  * FROM  knb1 INTO TABLE gt_knb1
         WHERE  bukrs  = '1000'.


* Create docking container
  CREATE OBJECT go_docking
    EXPORTING
      parent                      = cl_gui_container=>screen0
      ratio                       = 90
    EXCEPTIONS
      OTHERS                      = 6.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


* Create splitter container
  CREATE OBJECT go_splitter
    EXPORTING
      parent            = go_docking
      rows              = 2
      columns           = 1
*      NO_AUTODEF_PROGID_DYNNR =
*      NAME              =
    EXCEPTIONS
      cntl_error        = 1
      cntl_system_error = 2
      OTHERS            = 3.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

* Get cell container
  CALL METHOD go_splitter->get_container
    EXPORTING
      row       = 1
      column    = 1
    RECEIVING
      container = go_cell_top.
  CALL METHOD go_splitter->get_container
    EXPORTING
      row       = 2
      column    = 1
    RECEIVING
      container = go_cell_bottom.


* Create 1st ALV grid
  TRY.
      CALL METHOD cl_salv_table=>factory
        EXPORTING
          r_container  = go_cell_top
        IMPORTING
          r_salv_table = go_table1
        CHANGING
          t_table      = gt_knb1.
    CATCH cx_salv_msg .
  ENDTRY.


* Create 2nd ALV grid
  TRY.
      CALL METHOD cl_salv_table=>factory
        EXPORTING
          r_container  = go_cell_bottom
        IMPORTING
          r_salv_table = go_table2
        CHANGING
          t_table      = gt_knvv.  " empty !!!
    CATCH cx_salv_msg .
  ENDTRY.




* Link the docking container to the target dynpro
  CALL METHOD go_docking->link
    EXPORTING
      repid                       = syst-repid
      dynnr                       = '0100'
*      CONTAINER                   =
    EXCEPTIONS
      OTHERS                      = 4.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

* Create event instance
  go_events = go_table1->get_event( ).

* Set event handler
  SET HANDLER:
    lcl_eventhandler=>handle_double_click FOR go_events.


  go_table1->display( ).
  go_table2->display( ).


* NOTE: dynpro does not contain any elements
  CALL SCREEN '0100'.
* Flow logic of dynpro (does not contain any dynpro elements):
*
*PROCESS BEFORE OUTPUT.
*  MODULE STATUS_0100.
**
*PROCESS AFTER INPUT.
*  MODULE USER_COMMAND_0100.



END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS_0100'.  " contains push button "DETAIL"
*  SET TITLEBAR 'xxx'.





ENDMODULE.                 " STATUS_0100  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.

  CASE gd_okcode.
    WHEN 'BACK' OR
         'END'  OR
         'CANC'.
      SET SCREEN 0. LEAVE SCREEN.


    WHEN 'REFRESH'.
      go_table2->refresh( ).


    WHEN OTHERS.
  ENDCASE.

  CLEAR: gd_okcode.

ENDMODULE.                 " USER_COMMAND_0100  INPUT

Regards

Uwe

Read only

Former Member
0 Likes
1,153

HI

Refresh the data displayed within an ALV object grid

The following method call is used to refresh the data displayed within an ALV object grid:

CALL method gd_tree->REFRESH_TABLE_DISPLAY

CALL METHOD gd_tree->set_table_for_first_display

EXPORTING

is_layout = gd_layout

CHANGING

it_fieldcatalog = gd_fieldcat

it_sort = it_sortcat

it_outtab = it_report.

CALL method gd_tree->REFRESH_TABLE_DISPLAY.

CALL METHOD cl_gui_cfw=>flush.

Read only

0 Likes
1,153

I put this in my program

CALL method gd_tree->REFRESH_TABLE_DISPLAY

CALL METHOD gd_tree->set_table_for_first_display
EXPORTING
is_layout = gd_layout
CHANGING
it_fieldcatalog = gd_fieldcat
it_sort = it_sortcat
it_outtab = it_report. 

CALL method gd_tree->REFRESH_TABLE_DISPLAY.

and it doesn't refresh well . Thanks

Read only

Former Member
0 Likes
1,153

HI

>********************************************************************

  • This report displays User's info (SM04) using the FM : *

  • REUSE_ALV_LIST_DISPLAY *

  • The list is auto-refreshed (refresh time : 5 seconds) *

----


TYPE-POOLS: slis. " ALV Global Types

DATA :

gt_user LIKE uinfo OCCURS 0 WITH HEADER LINE. " User info in SM04

----


START-OF-SELECTION.

PERFORM f_read_data.

PERFORM f_display_data.

----


  • Form F_LIRE_DATA

----


FORM f_read_data.

REFRESH gt_user.

  • Get User's info

CALL FUNCTION 'THUSRINFO'

TABLES

usr_tabl = gt_user.

  • Wait in a task

PERFORM f_call_rfc_wait.

ENDFORM. " F_READ_DATA

----


  • Form F_DISPLAY_DATA

----


FORM f_display_data.

DEFINE m_sort.

add 1 to ls_sort-spos.

ls_sort-fieldname = &1.

append ls_sort to lt_sort.

END-OF-DEFINITION.

DEFINE m_event_exit.

clear ls_event_exit.

ls_event_exit-ucomm = &1.

ls_event_exit-after = 'X'.

append ls_event_exit to lt_event_exit.

END-OF-DEFINITION.

DATA :

ls_layout TYPE slis_layout_alv,

lt_sort TYPE slis_t_sortinfo_alv,

ls_sort TYPE slis_sortinfo_alv,

lt_event_exit TYPE slis_t_event_exit,

ls_event_exit TYPE slis_event_exit.

  • Build Sort Table

m_sort 'ZEIT'.

  • Build Event Exit Table

m_event_exit '&NTE'. " Refresh

ls_layout-zebra = 'X'.

ls_layout-colwidth_optimize = 'X'.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

EXPORTING

i_callback_program = sy-cprog

i_callback_user_command = 'USER_COMMAND'

is_layout = ls_layout

i_structure_name = 'UINFO'

it_sort = lt_sort

it_event_exit = lt_event_exit

TABLES

t_outtab = gt_user.

ENDFORM. " F_DISPLAY_DATA

----


  • FORM USER_COMMAND *

----


FORM user_command USING i_ucomm TYPE syucomm

is_selfield TYPE slis_selfield. "#EC CALLED

CASE i_ucomm.

WHEN '&NTE'.

PERFORM f_read_data.

is_selfield-refresh = 'X'.

SET USER-COMMAND '&OPT'. " Optimize columns width

ENDCASE.

ENDFORM. " USER_COMMAND

----


  • Form F_CALL_RFC_WAIT

----


FORM f_call_rfc_wait.

DATA lv_mssg(80). "#EC NEEDED

  • Wait in a task

CALL FUNCTION 'RFC_PING_AND_WAIT' STARTING NEW TASK '001'

PERFORMING f_task_end ON END OF TASK

EXPORTING

seconds = 5 " Refresh time

busy_waiting = space

EXCEPTIONS

RESOURCE_FAILURE = 1

communication_failure = 2 MESSAGE lv_mssg

system_failure = 3 MESSAGE lv_mssg

OTHERS = 4.

ENDFORM. " F_CALL_RFC_WAIT

----


  • Form F_TASK_END

----


FORM f_task_end USING u_taskname.

DATA lv_mssg(80). "#EC NEEDED

  • Receiving task results

RECEIVE RESULTS FROM FUNCTION 'RFC_PING_AND_WAIT'

EXCEPTIONS

RESOURCE_FAILURE = 1

communication_failure = 2 MESSAGE lv_mssg

system_failure = 3 MESSAGE lv_mssg

OTHERS = 4.

CHECK sy-subrc EQ 0.

SET USER-COMMAND '&NTE'. " Refresh

ENDFORM. " F_TASK_END

                              • END OF PROGRAM Z_ALV_AUTO_REFRESH *********************

<b>Reward if usefull</b>

Read only

Former Member
0 Likes
1,153

SOLUTION:

IF GR_CONT2 IS INITIAL.
    "create container object and link to screen area.
    CREATE OBJECT GR_CONT2
      EXPORTING
        CONTAINER_NAME              = 'MY_AREA2'
      EXCEPTIONS
        CNTL_ERROR                  = 1
        CNTL_SYSTEM_ERROR           = 2
        CREATE_ERROR                = 3
        LIFETIME_ERROR              = 4
        LIFETIME_DYNPRO_DYNPRO_LINK = 5
        OTHERS                      = 6.
    IF SY-SUBRC NE 0.
      MESSAGE E015(BC405).
    ENDIF.
ENDIF.
if GR_ALV2 is INITIAL.
    TRY.
    CL_SALV_TABLE=>FACTORY(
      EXPORTING
        LIST_DISPLAY   = ' '
        R_CONTAINER    = GR_CONT2
        CONTAINER_NAME = 'MY_AREA2'
      IMPORTING
        R_SALV_TABLE   = GR_ALV2
      CHANGING
        T_TABLE        = it_posicion
           ).
     CATCH CX_SALV_MSG .
    ENDTRY.
 else.
     GR_ALV2->REFRESH(
*      S_STABLE     = it_posicion
*      REFRESH_MODE = 2
         ).
 endif.

    CALL METHOD GR_ALV2->DISPLAY.

ENDFORM.                 

The position of the refresh was wrong.