0

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

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

任何帮助或建议将不胜感激。

4

2 回答 2

1

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

于 2017-02-06T11:44:13.487 回答
0

首先,您应该在带有容器的屏幕上有 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.

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

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.
于 2020-09-24T17:53:06.570 回答