应用自定义工具栏后标准工具栏消失

Standard toolbar disappears after applying custom one

我在模态对话框中有一个 ALV 网格,如下所示:

我尝试将工具栏添加到 ALV,如下所示:

事件 class :

CLASS lcl_evt_task_user_cmd IMPLEMENTATION.
  METHOD handle_toolbar.
    e_object->mt_toolbar = VALUE ttb_button(
                           ( butn_type = 3 )
                           ( function = 'EDIT' icon = icon_edit_file butn_type = 0 )
                           ).
  ENDMETHOD.
  METHOD handle_user_command.
    CASE e_ucomm.
      WHEN 'EDIT'.
    ENDCASE.
*    cl_gui_cfw=>set_new_ok_code('DUMMY').
  ENDMETHOD.
ENDCLASS. 

以及我注册工具栏的方式:

METHOD show.
    FIELD-SYMBOLS <lt_table> TYPE STANDARD TABLE.
    IF c_go_provider->c_go_grid IS INITIAL.
      DATA(lt_fieldcat) = me->get_fieldcat( c_go_provider->c_gv_struname ).
      c_go_provider->c_go_container = NEW cl_gui_custom_container( container_name = co_grid_name ).
      c_go_provider->c_go_grid = NEW cl_gui_alv_grid( i_parent = c_go_provider->c_go_container ).
      ASSIGN c_go_provider->c_gt_data->* TO <lt_table>.
      me->register_event( ).
      c_go_provider->c_go_grid->set_table_for_first_display(
       EXPORTING
          is_variant = VALUE disvariant( report = sy-repid )
          i_save = 'A'
          is_layout = VALUE lvc_s_layo( sel_mode = 'A' )
        CHANGING
          it_outtab = <lt_table>
          it_fieldcatalog = lt_fieldcat
       ).
      c_go_provider->c_go_grid->set_toolbar_interactive( ).
    ENDIF.
    c_go_provider->c_go_grid->refresh_table_display( ).
  ENDMETHOD.
  METHOD register_event.
    me->c_go_event = NEW lcl_evt_task_user_cmd( ).
    SET HANDLER  me->c_go_event->handle_toolbar
                 me->c_go_event->handle_user_command
        FOR  c_go_provider->c_go_grid.
  ENDMETHOD.

之后,标准工具栏消失了:

我做错了什么?

您在内部使用了值运算符 table.It 首先删除内部 table 的现有内容,然后添加新的 contents.This 是不显示现有工具栏项目的原因。我有以下两种解决方案来解决这个问题。

解决方案一:

替换您的以下代码。

   e_object->mt_toolbar = VALUE ttb_button(
                           ( butn_type = 3 )
                           ( function = 'EDIT' icon = icon_edit_file butn_type = 0 )
                           ).

使用下面的代码,新的工具栏项目将添加到 toolbar.This 将帮助您根据您的要求更新逻辑。

DATA: l_toolbar LIKE LINE OF e_object->mt_toolbar.

  l_toolbar-function   = 'EDIT'.
  l_toolbar-icon       = icon_edit_file.
  l_toolbar-quickinfo  = 'Custom Edit'.
  l_toolbar-disabled   = space.
  l_toolbar-butn_type = 0.

  APPEND l_toolbar TO e_object->mt_toolbar.

您还可以通过在 Value 关键字中添加 BASE 来更新现有代码。

方案二:

您可以在添加 BASE 的情况下使用同值运算符。当您将 BASE 与 VALUE 运算符一起使用时,它会保留现有内容并从运算符右侧添加新内容。

以下是使用 **VALUE 运算符并添加 BASE 的 ABAP 代码。工具栏项目不会被删除。**

e_object->mt_toolbar = VALUE ttb_button( BASE e_object->mt_toolbar
                       ( function = 'EDIT' icon = icon_edit_file butn_type = 0 )
                       ).