网格初始化时的 SALV 事件?

问题描述

我正在以一种避免屏幕和容器的简单方式创建一个 SALV 网格:

TRY.
    cl_salv_table=>factory(
      IMPORTING
        r_salv_table = lo_alv
      CHANGING
        t_table      = itab ).
  CATCH cx_salv_msg INTO exc.
ENDTRY.
...
lo_alv->set_screen_status( pfstatus = 'SALV_STATUS'
                           report = sy-repid
                           set_functions = lo_alv->c_functions_all ).
...
lo_alv->display( ).

我想在网格显示中仅显示标准 MESSAGE 一次,使其显示底部状态栏中。

我尝试了 PAGE 事件,但它们不会在启动时触发,只有在按下标准工具栏按钮后才触发

  SET HANDLER cl_event_handler=>on_top_of_page FOR lo_events.
  SET HANDLER cl_event_handler=>on_end_of_page FOR lo_events.

我也尝试将 MESSAGE 放在 display( ) 方法之后,但是这样在我用后退按钮退出网格后显示,这不是我想要的,我希望它正好显示在首次加载时的网格。

是否有在网格初始化或渲染/加载数据后触发的事件?

如果没有,是否有任何解决方法可以使这项工作正常进行?

解决方法

将消息放在之前调用 lo_alv->display( )。这个完整的程序似乎按照您想要的方式运行。状态消息“Hello World”出现在带有数据的 ALV 网格下方:

REPORT Z_TEST_SALV_MESSAGE.

SELECT * FROM sflight INTO TABLE @DATA(gt_sflight).

cl_salv_table=>factory(
  IMPORTING
    r_salv_table = DATA(lo_alv)
  CHANGING
    t_table      = gt_sflight ).

MESSAGE 'Hello World' TYPE 'S'.
lo_alv->display( ).