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

ALV issue - capturing user changes in editable fields using custom button?

Former Member
0 Likes
1,921

Hi,

I created a custom button in ALV tool bar. And also in my ALV grid I have couple of fields Editable option. User can change values for these 2 fields.

My question is -

After changing values for these editable fields(more than 1 record) , user will click on custom button and then I have to update all the user changed values in to my internal table(lt_tab) and then I have to process logic.

Problem is when user click on Custom button in ALV tool bar it is not having the changed values in lt_tab table.

Only when user clicks some thing on ALV grid records or fields then it is getting all the changed values in to lt_tab.

Can any one tell me how I can get changed values when user clicks on custom button?

1. Can we place custom button in ALV Grid? instead of ALV tool bar?

or

How I can capture user changes when they click on custom button?

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

TABLES

T_OUTTAB = lt_tab

Please check this logic-

CASE r_ucomm.

WHEN '&IC1'.

- It_tab having all changed field values

WHEN 'custom button'.

lt_tab - not having any changed values - showing all initial lt_tab values.

I highly appreciate your answers on this.

Thanks.

Rajesh.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,056

You would need to refresh the ALV list first using the refresh_table_display method, for instance.

5 REPLIES 5
Read only

Former Member
0 Likes
1,057

You would need to refresh the ALV list first using the refresh_table_display method, for instance.

Read only

Former Member
0 Likes
1,056

Please check that you are not overriding any standard funcionallity. BTW are you using class or functinos? Also did you debug? That is the most easiest to understand.

Read only

Former Member
0 Likes
1,056

Hi,

Please search in SCN for this. I am sure you will get lot of threads which already discuss about this.

Thanks

Naren

Read only

I355602
Product and Topic Expert
Product and Topic Expert
0 Likes
1,056

Hi,

Use this code, its working:-


*&---------------------------------------------------------------------*
*&      Form  ALV_DISPLAY
*&---------------------------------------------------------------------*
*       SUB-ROUTINE ALV_DISPLAY IS USED TO SET THE PARAMETERS
*       FOR THE FUNCTION MODULE REUSE_ALV_GRID_DISPLAY
*       AND PASS THE INTERNAL TABLE EXISTING THE RECORDS TO BE
*       DISPLAYED IN THE GRID FORMAT
*----------------------------------------------------------------------*
FORM alv_display .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
   EXPORTING
*     I_INTERFACE_CHECK                 = ' '
*     I_BYPASSING_BUFFER                = ' '
*     I_BUFFER_ACTIVE                   = ' '
     i_callback_program                = v_rep_id       " report id
     i_callback_pf_status_set          = 'PF'           " for PF-STATUS
     i_callback_user_command           = 'USER_COMMAND' " for User-Command
*     I_CALLBACK_TOP_OF_PAGE            = ' '
*     I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*     I_CALLBACK_HTML_END_OF_LIST       = ' '
*     I_STRUCTURE_NAME                  =
*     I_BACKGROUND_ID                   = ' '
*     I_GRID_TITLE                      =
*     I_GRID_SETTINGS                   =
     is_layout                         = wa_layout      " for layout
     it_fieldcat                       = it_field       " field catalog
*     IT_EXCLUDING                      =
*     IT_SPECIAL_GROUPS                 =
     it_sort                           = it_sort        " sort info
*     IT_FILTER                         =
*     IS_SEL_HIDE                       =
*     I_DEFAULT                         = 'X'
     i_save                            = 'A'
     is_variant                        = wa_variant     " variant name
*     IT_EVENTS                         =
*     IT_EVENT_EXIT                     =
*     IS_PRINT                          =
*     IS_REPREP_ID                      =
*     I_SCREEN_START_COLUMN             = 0
*     I_SCREEN_START_LINE               = 0
*     I_SCREEN_END_COLUMN               = 0
*     I_SCREEN_END_LINE                 = 0
*     I_HTML_HEIGHT_TOP                 = 0
*     I_HTML_HEIGHT_END                 = 0
*     IT_ALV_GRAPHICS                   =
*     IT_HYPERLINK                      =
*     IT_ADD_FIELDCAT                   =
*     IT_EXCEPT_QINFO                   =
*     IR_SALV_FULLSCREEN_ADAPTER        =
*   IMPORTING
*     E_EXIT_CAUSED_BY_CALLER           =
*     ES_EXIT_CAUSED_BY_USER            =
    TABLES
      t_outtab                          = it_final      " internal table
   EXCEPTIONS
     program_error                     = 1
     OTHERS                            = 2.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM.                    " ALV_DISPLAY


*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&---------------------------------------------------------------------*
*       SUB-ROUTINE USER_COMMAND IS USED TO HANDLE THE USER ACTION
*       AND EXECUTE THE APPROPIATE CODE
*----------------------------------------------------------------------*
*      -->LV_OKCODE   used to capture the function code
*                     of the user-defined push-buttons
*      -->L_SELFIELD   text
*----------------------------------------------------------------------*
FORM user_command USING lv_okcode LIKE sy-ucomm l_selfield TYPE slis_selfield.

* assign the function code to variable v_okcode
  lv_okcode = sy-ucomm.

* handle the code execution based on the function code encountered
  CASE lv_okcode.

* when the function code is EXECUTE then process the selected records
    WHEN 'EXECUTE'. "user-defined button

* to reflect the data changed into internal table
      DATA : ref_grid TYPE REF TO cl_gui_alv_grid. "new

      IF ref_grid IS INITIAL.
        CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
          IMPORTING
            e_grid = ref_grid.
      ENDIF.

      IF NOT ref_grid IS INITIAL.
        CALL METHOD ref_grid->check_changed_data.
      ENDIF.

* refresh the ALV Grid output from internal table
      l_selfield-refresh = c_check.

  ENDCASE.
ENDFORM.

This will reflect all the changes in the internal table. Now you can include your logic as per your requirement.

Hope this solves your problem.

Thanks & Regards,

Tarun Gambhir

Read only

Former Member
0 Likes
1,056

Hi all,

Thanks for the answers, I found the logic from documentation and its working fine.

Thank Tarun , I put almost same logic, its working now.

But I am having one more issue hear.

Using ALV tool bar Filter option if we do any filter ALV records and after user command I am still seeing the complete records, not the filtered records.

It is not refreshing my internal table with new filtered records.

I need to get filtered records (what ever is showing in current ALV grid after user does his changes like modifying records or filtering with his own conditions?

Any suggestions. Thanks for your time.

Thanks.

Rajesh