应用自定义工具栏后标准工具栏消失
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 )
).
我在模态对话框中有一个 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 )
).