cl_salv_table 的应用程序工具栏中的自定义按钮?

Custom button in application toolbar of cl_salv_table?

我正在使用 cl_salv_table 制作报告,我想在 ALV 网格的工具栏上制作一个按钮,它将显示一个预定义的弹出窗口。

我能够在工具栏上制作一个按钮并将“功能代码”设置为详细信息,我在调试模式下看到单击该按钮时“sy-ucomm”设置为详细信息,但它是不进入案例循环。

如有任何帮助或建议,我们将不胜感激。

请查看程序 SALV_DEMO_TABLE_SELECTIONS 如何正确实现事件处理程序,基本上 class lcl_handle_events 中的方法 on_user_command 就是您要查找的内容。

首先,您应该在带有容器的屏幕上显示 SALV 网格:

try.
    cl_salv_table=>factory(
      exporting
        r_container    = gr_container
        container_name = 'CONTAINER'
      importing
        r_salv_table   = gr_table
      changing
        t_table        = gt_outtab ).
  catch cx_salv_msg.                                "#EC NO_HANDLER
endtry.

那么应该启用所有功能:

lr_functions = gr_table->get_functions( ).
lr_functions->set_all( gc_true ).

最后你像这样添加自己的函数:

include <icon>.
try.
  lr_functions->add_function(
    name     = 'MYFUNCTION'
    icon     = CONV string( icon_complete )
    text     = `My function`
    tooltip  = `My custom function`
    position = if_salv_c_function_position=>right_of_salv_functions ).
  catch cx_salv_existing cx_salv_wrong_call.
endtry.

下一个重要步骤是在同一个 class 或单独的处理程序中创建 on_user_command 事件处理程序 class:

data: gr_events type ref to lcl_handle_events.
set handler gr_events->on_user_command for lr_events.

最后一件事是执行实际功能工作的处理程序方法实现

class lcl_handle_events implementation.
  method on_user_command.
    message |Function { e_salv_function } is fired| TYPE 'I'.
  endmethod.            
endclass.