get_selected_rows 来自处理程序 PAI 逻辑之后的 alv

get_selected_rows from alv after handler PAI logic

我在屏幕上的容器中有一个 ALV 0100。它是通过 class CL_SALV_TABLE.

创建的

问题是在按下屏幕上的按钮(屏幕截图中的 2)后,我无法通过 go_alv_dms->get_selections( )->get_selected_rows( ) 获取选定的行。

如果按钮位于 ALV 状态栏(屏幕截图中的 1),我可以毫无问题地访问选定的行。似乎在 ALV 之外按下按钮会清除它的选择。

显示ALV时注册选择:

  ...
  lo_selections = go_alv_dms->get_selections( ).
  lo_selections->set_selection_mode( if_salv_c_selection_mode=>row_column ).
  lo_events = go_alv_dms->get_event( ).
  CREATE OBJECT go_handler.
  SET HANDLER go_handler->on_user_command2 FOR lo_events.
  ...

屏幕按钮逻辑PAI:

 go_handler->on_user_command2( gv_ok_0100 ).

方法on_user_command2:

    case gv_ok_0100.
      when 'OK'.
         ...
         lt_rows = go_alv_dms->get_selections( )->get_selected_rows( ).
         ...
    ENDCASE.

听了同事的意见,上网找了答案,得出的结论是,这是classCL_SALV_TABLE限制。我在 class CL_ALV_GRID 上重写了程序,我赚到了。我喜欢CL_SALV_TABLE,如果有人反驳我的话我会很高兴。

DATA gr_alv TYPE REF TO cl_salv_table.
DATA it_rows TYPE salv_t_row.
... 
gr_alv->get_metadata( ). " Call this method before getting selected rows
it_rows = gr_alv->get_selections( )->get_selected_rows( ).

参考:https://answers.sap.com/questions/4693234/getselectedrows-returns-nothing.html