После добавления команды пользователя инструмент исчез - PullRequest
0 голосов
/ 09 января 2019

У меня есть сетка ALV в модальном диалоге, который выглядит следующим образом:
enter image description here

Я попытался добавить панель инструментов в ALV следующим образом:

Класс мероприятия:

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.

После этого стандартная панель инструментов исчезла:

enter image description here

Что я делаю не так?

1 Ответ

0 голосов
/ 09 января 2019

Вы использовали оператор значения с внутренней таблицей. Сначала удалите существующее содержимое внутренней таблицы, а затем добавьте новое содержимое. По этой причине существующие элементы панели инструментов не отображаются. У меня есть два следующих решения для решения проблемы.

Решение 1:

Замените ваш следующий код.

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

С помощью приведенного ниже кода новый элемент панели инструментов будет добавлен на панель инструментов. Это поможет вам обновить логику в соответствии с вашими требованиями.

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.

Вы также можете обновить существующий код, добавив BASE в ключевом слове Value.

Решение 2:

Вы можете использовать тот же оператор значения с добавлением BASE. Когда вы используете BASE с оператором VALUE, он сохраняет существующее содержимое и добавляет новое содержимое с правой стороны оператора.

Ниже приведен код ABAP с использованием оператора ** VALUE с добавлением BASE . Элементы панели инструментов не будут удалены. **

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