Skip to Content

Archived discussions are read-only. Learn more about SAP Q&A

How can I trigger a USER_COMMAND for alv grid "toolbar" ???

Hi,

i have the standard ALV Grid "toolbar" and if i click to the Button "&LOCAL&COPY_ROW" than i want try to make a Refresh to my ALV Table in the Event "afteruser_command"_!!!!

Here is the implementation of my Event *"afteruser_command":*_

METHOD on_after_user_command.

........DATA: ls_stable TYPE lvc_s_stbl.

.....CASE e_ucomm.

.....WHEN '&LOCAL&COPY_ROW'.

........MESSAGE 'LOCAL_COPY_ROW' TYPE 'S' DISPLAY LIKE 'E'.

........ls_stable-row = 'X'.

........ls_stable-col = 'X'.

........CALL METHOD gr_grid_d0100->refresh_table_display

..............EXPORTING

.......................is_stable = ls_stable

..............EXCEPTIONS

.......................finished = 1

.......................OTHERS = 2.

......ENDCASE.

ENDMETHOD.

But it doesnt work.

Is there another function code for the Copy Button????

Thanks

Ersin

Former Member
replied

Hello Ersin,

the events "after_user_command", "before_user_command" and "user_command" will not be fired when selecting this command!

In my opinion, there is no solution, to fire these events, using this alv-function!

But there is a trick:

1. Register on the event "toolbar" with an own method:

...
      toolbar_own          for event toolbar of cl_gui_alv_grid
                                   importing e_object
                                          e_interactive,
     ...

In this method change the function code of "&LOCAL&COPY_ROW", but don´t change the row of the entry, because the button should appear on the same place in the toolbar:

...
    field-symbols: <ls_toolbar>  type stb_button.
    read table e_object->mt_toolbar with key function = '&LOCAL&COPY_ROW'
                                    assigning <ls_toolbar>.
    if sy-subrc = 0.
      <ls_toolbar>-function = 'COPYROW_OWN'.
    endif.
     ...

2. Register on the event "user_command" ( I think, that´s clear ):

...
      user_cmd_own           for event user_command
                                          of cl_gui_alv_grid
                                          importing e_ucomm,
     ...

( don´t forget the set handler-commands for both events:

set handler po_alv_own->user_cmd_own for po_alv_own.

set handler po_alv_own->toolbar_own for po_alv_own. )

3. Now you can react in the method "user_command" on your own function code:

...
    case e_ucomm.
      when 'COPYROW_OWN'.
        perform copy_row using    me
                         changing gt_bis_cf_out.
     ...

Sample code for copying the current line:

FORM COPY_ROW  using    po_alv_own          type ref to gcl_alv_own
               changing pt_table_alv      type gt_table_alv_t.

  data: l_index         type i,
        ls_table_alv   type gs_table_alvt_t.


  call method po_alv_own->get_current_cell
     importing
       e_row     = l_index.
*      e_value   =
*      e_col     =
*      es_row_id =
*      es_col_id =
*      es_row_no =

  "read the current line:
  read table pt_table_alv index l_index
                           into ls_table_alv_out.
  "some changes for the new row:
  clear: ls_table_alv-style,
         ls_table_alv-tabix.

  "insert the new line:
  add 1 to l_index.
  insert ls_table_alv into pt_table_alv index l_index.

  po_alv_own->refresh( ).

ENDFORM.                    " COPY_ROW

In this manner the events "after_user_command", "before_user_command" are fired, too!

For information: My problem was, that the ALV-function copied the style-information too, so in the new line, some fields are not editable. At least his field must be cleared!

Best regard

Thomas Scheuermann

0 View this answer in context
Not what you were looking for? View more on this topic or Ask a question