SAPфорум.RU https://sapboard.ru/forum/ |
|
Динамическое добавление кнопки при вызове REUSE_ALV_GRID_DISPLAY_LVC https://sapboard.ru/forum/viewtopic.php?f=13&t=81107 |
Страница 1 из 1 |
Автор: | MadSpirit [ Чт, фев 14 2013, 13:24 ] |
Заголовок сообщения: | Динамическое добавление кнопки при вызове REUSE_ALV_GRID_DISPLAY_LVC |
Добрый день. Задача следующая: Создаю ALV отчет с помощью FM 'REUSE_ALV_GRID_DISPLAY_LVC'. Необходимо динамически добавить пользовательскую кнопку. Хотелось бы не создавать руками экраны и GUI-статус. Пытаюсь сделать как в коде ниже, но почему-то кнопка не появляется =( Может я что-то не так делаю, подскажите пожалуйста! Code: FORM main_output.
DATA: lt_fcat TYPE lvc_t_fcat, ls_grid_settings TYPE lvc_s_glay, lt_event TYPE slis_t_event, ls_layout_lvc TYPE lvc_s_layo . * Формирование каталога полей ALV: PERFORM fill_fcat CHANGING lt_fcat. * Заполнение таблицы событий ALV: PERFORM set_events CHANGING lt_event. ls_grid_settings-edt_cll_cb = 'X'. ls_layout_lvc-zebra = 'X'. ls_layout_lvc-cwidth_opt = 'X'. ls_layout_lvc-stylefname = 'CELLTAB'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_bypassing_buffer = 'X' i_callback_program = gv_repid i_callback_user_command = 'USER_COMMAND' i_grid_settings = ls_grid_settings is_layout_lvc = ls_layout_lvc it_fieldcat_lvc = lt_fcat i_default = 'X' i_save = 'X' it_events = lt_event TABLES t_outtab = gt_out EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM. " MAIN_OUTPUT *&---------------------------------------------------------------------* *& Form set_events *&---------------------------------------------------------------------* * Формирование таблицы событий ALV *----------------------------------------------------------------------* FORM set_events CHANGING pt_events TYPE slis_t_event. DATA: lv_event TYPE slis_alv_event . FIELD-SYMBOLS: <ls_event> TYPE slis_alv_event . CALL FUNCTION 'REUSE_ALV_EVENTS_GET' EXPORTING i_list_type = 0 IMPORTING et_events = pt_events EXCEPTIONS list_type_wrong = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. READ TABLE pt_events ASSIGNING <ls_event> WITH KEY name = 'CALLER_EXIT'. IF sy-subrc = 0. CONCATENATE 'ALV_EVENT_' <ls_event>-name INTO <ls_event>-form. ENDIF. ENDFORM. " set_events *&---------------------------------------------------------------------* *& Form ALV_EVENT_CALLER_EXIT *&---------------------------------------------------------------------* * Изменение панели инструментов *----------------------------------------------------------------------* FORM alv_event_caller_exit USING ps_data TYPE slis_data_caller_exit. DATA: lr_alv_toolbar TYPE REF TO lcl_alv_toolbar . IF g_alv_grid IS INITIAL. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING e_grid = g_alv_grid. ENDIF. * Создание обработчика события добавления кнопок в панель инструментов: CREATE OBJECT lr_alv_toolbar EXPORTING io_alv_grid = g_alv_grid. * Регистрируем обработчик события: SET HANDLER lr_alv_toolbar->on_toolbar FOR g_alv_grid. ENDFORM. "alv_event_caller_exit *--------------------------------------------------------------------- * CLASS lcl_alv_toolbar DEFINITION *--------------------------------------------------------------------- * ALV event handler *--------------------------------------------------------------------- CLASS lcl_alv_toolbar DEFINITION. PUBLIC SECTION. METHODS: * Constructor constructor IMPORTING io_alv_grid TYPE REF TO cl_gui_alv_grid, * Event for toolbar on_toolbar FOR EVENT toolbar OF cl_gui_alv_grid IMPORTING e_object. ENDCLASS. " lcl_alv_toolbar DEFINITION *--------------------------------------------------------------------- * CLASS lcl_alv_toolbar IMPLEMENTATION *--------------------------------------------------------------------- * alv event handler *--------------------------------------------------------------------- CLASS lcl_alv_toolbar IMPLEMENTATION. METHOD constructor. * Create ALV toolbar manager instance CREATE OBJECT gr_alv_toolbarmanager EXPORTING io_alv_grid = io_alv_grid. ENDMETHOD. " constructor METHOD on_toolbar. DATA: ls_toolbar TYPE stb_button . * Добавление пользовательских кнопок: ls_toolbar-icon = icon_create. ls_toolbar-butn_type = 0. ls_toolbar-text = text-001. ls_toolbar-function = 'BUTTON1'. ls_toolbar-disabled = ''. ls_toolbar-quickinfo = text-002. APPEND ls_toolbar TO e_object->mt_toolbar. * Вызов метода реорганизации панели инструментов: CALL METHOD gr_alv_toolbarmanager->reorganize EXPORTING io_alv_toolbar = e_object. ENDMETHOD. "on_toolbar ENDCLASS. "lcl_alv_toolbar IMPLEMENTATION |
Автор: | bossjohn [ Чт, фев 14 2013, 16:35 ] |
Заголовок сообщения: | Re: Динамическое добавление кнопки при вызове REUSE_ALV_GRID_DISPLAY_LVC |
Попробовать добавить CALL METHOD g_alv_grid->set_toolbar_interactive в alv_event_caller_exit |
Автор: | Сергей Королев [ Чт, фев 14 2013, 16:44 ] |
Заголовок сообщения: | Re: Динамическое добавление кнопки при вызове REUSE_ALV_GRID_DISPLAY_LVC |
Ну вот смотрите - написано довольно много кода, а проблема не решена. Значительно проще скопировать в свою программу статус из группы функций, где описана REUSE..., там есть STANDARD_FULLSCREEN, добавить своих кнопок, установить его через callback - подпрограмму и там же включать/выключать самые разные кнопки. Ну да, придется "ручками", ну так и код тоже вроде "ручками" пишется, нет? Кнопка у вас не появляется от того, что в FULL SCREEN ALV тулбар вообще отключен и используется обычный PF-STATUS. |
Автор: | MadSpirit [ Пт, фев 15 2013, 07:41 ] |
Заголовок сообщения: | Re: Динамическое добавление кнопки при вызове REUSE_ALV_GRID_DISPLAY_LVC |
Сергей Королев написал: Ну вот смотрите - написано довольно много кода, а проблема не решена. Значительно проще скопировать в свою программу статус из группы функций, где описана REUSE..., там есть STANDARD_FULLSCREEN, добавить своих кнопок, установить его через callback - подпрограмму и там же включать/выключать самые разные кнопки. Ну да, придется "ручками", ну так и код тоже вроде "ручками" пишется, нет? Кнопка у вас не появляется от того, что в FULL SCREEN ALV тулбар вообще отключен и используется обычный PF-STATUS. Да, вы правы код тоже пишется "ручками", но дело в том, что эту разработку нужно будет копировать в другие системы - это будет, так сказать, удобное средство создания запросов для разработчика с ведением технической документации. Именно по этой причине хотелось бы, чтобы ручных действий было по минимуму. |
Автор: | Удав [ Пт, фев 15 2013, 08:40 ] |
Заголовок сообщения: | Re: Динамическое добавление кнопки при вызове REUSE_ALV_GRID_DISPLAY_LVC |
MadSpirit написал(а): дело в том, что эту разработку нужно будет копировать в другие системы Для этого есть отдельные инструменты, которые позволяют переносить не только код, но и экраны, и объекты словаря данных. |
Автор: | PavelT [ Пт, сен 20 2013, 18:47 ] |
Заголовок сообщения: | Re: Динамическое добавление кнопки при вызове REUSE_ALV_GRID_DISPLAY_LVC |
Не будем плодить похожие темы. Коллеги, подскажите какие мои шаги, если хочу в FULL SCREEN ALV через этот же ФМник пользоваться и тулбаром и статусом. Тулбар, по возможности, родной gui-шный. И как получить ссылку на грид из этого ФМник? Порывшись в гугле, нашел фм 'GET_GLOBALS_FROM_SLVC_FULLSCR'. Может, есть более изящный путь? |
Автор: | proga19 [ Ср, май 03 2023, 10:51 ] |
Заголовок сообщения: | Re: Динамическое добавление кнопки при вызове REUSE_ALV_GRID_DISPLAY_LVC |
Для этого нужно в форме с определением статуса очистить флаг NO_TOOLBAR. Тогда будет работать и GUI и Toolbar. DATA: LO_ALV_GRID TYPE REF TO CL_GUI_ALV_GRID, LS_LAYOUT TYPE LVC_S_LAYO. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING E_GRID = LO_ALV_GRID. CHECK LO_ALV_GRID IS BOUND. LO_ALV_GRID->GET_FRONTEND_LAYOUT( IMPORTING ES_LAYOUT = LS_LAYOUT ). IF LS_LAYOUT-STYLEFNAME IS INITIAL. LS_LAYOUT-STYLEFNAME = GC_TAB_STYL_FIELD. LS_LAYOUT-NO_TOOLBAR = SPACE."GUI + TOOLBAR LO_ALV_GRID->SET_FRONTEND_LAYOUT( IS_LAYOUT = LS_LAYOUT ). LO_ALV_GRID->REFRESH_TABLE_DISPLAY( ). ENDIF. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |