У меня есть очень простая программа ABAP, демонстрирующая, как отобразить поле текстового редактора (cl_gui_textedit
), которую я хочу поделиться через Интернет, электронную почту, форум, блог или что-то другое.
Я хотел бы, чтобы люди просто скопировали, вставили и запустили эту очень простую демонстрацию мгновенно, но эта программа содержит статус GUI и экран Dynpro, которые сложно поделиться, потому что это не код (см. детали после кода программы).
Я знаю несколько способов делиться объектами ABAP и не ABAP, но на мой взгляд, это слишком сложно для такой простой демонстрации: запрос на транспорт SAP, репозиторий Git и abapGit.
Обратите внимание, что у меня есть и другие демонстрации Dynpro с использованием SAP Control Framework (cl_gui_alv_grid
, cl_gui_html_viewer
и т.д.), поэтому я хотел бы обобщить вопрос для всех типов контролов.
Существует ли способ легко поделиться, скопировать, вставить и запустить эту демонстрацию (возможно, переписав код), будь то cl_gui_textedit
или любой другой контрол Dynpro?
3 элемента демонстрации:
- Программа:
REPORT zdemo_cl_gui_textedit. DATA go_custom_container TYPE REF TO cl_gui_custom_container. DATA go_textedit TYPE REF TO cl_gui_textedit. START-OF-SELECTION. CALL SCREEN 100. MODULE _0100_pbo OUTPUT. SET PF-STATUS '0100'. IF go_textedit IS NOT BOUND. CREATE OBJECT go_custom_container EXPORTING container_name="CUSTOM_CONTAINER". CREATE OBJECT go_textedit EXPORTING parent = go_custom_container. ENDIF. ENDMODULE. MODULE _0100_pai INPUT. IF sy-ucomm = 'EXIT'. SET SCREEN 0. ENDIF. ENDMODULE.
- Dynpro:
- Элементы:
- Поле
CUSTOM_CONTAINER
типа “Custom Control”.
- Поле
- Логика потока:
PROCESS BEFORE OUTPUT. MODULE _0100_PBO. PROCESS AFTER INPUT. MODULE _0100_PAI AT EXIT-COMMAND.
- Элементы:
- Статус GUI:
- Кнопка
EXIT
, типа “E” (Команда выхода).
- Кнопка
Мой предпочтительный способ предложить минимальный воспроизводимый пример (MRE) — использовать cl_gui_container=>screen0
, который является контейнером, отображаемым поверх экрана Dynpro, и он может содержать любые виды контролов Dynpro (не ограничиваясь cl_gui_textedit
).
Таким образом, сначала должен быть отображен экран Dynpro. Вместо общего экрана Dynpro можно использовать экран выбора, который строится с помощью операторов ABAP PARAMETERS
или SELECT-OPTIONS
.
В экранах выбора логика “Обработка перед выводом” соответствует событию “AT SELECTION-SCREEN OUTPUT”, а кнопка выхода управляется по умолчанию (если нужны другие кнопки, можно использовать контрол CL_GUI_TOOLBAR
; несколько контролов могут быть отображены внутри cl_gui_container=>screen0
, используя контрол CL_GUI_SPLITTER_CONTAINER
).
Следовательно, весь пример можно упростить до следующих строк кода, объекты экрана Dynpro и статуса GUI не нужны.
REPORT zdemo_cl_gui_textedit.
DATA go_textedit TYPE REF TO cl_gui_textedit.
PARAMETERS dummy.
AT SELECTION-SCREEN OUTPUT.
IF go_textedit IS NOT BOUND.
go_textedit = NEW #( parent = cl_gui_container=>screen0 ).
ENDIF.
NB: другие MRE на Stack Overflow, основанные на том же принципе:
cl_salv_table
cl_gui_alv_grid
cl_gui_html_viewer
cl_gui_toolbar
cl_salv_tree
Обратите внимание, что демонстрация пользовательского интерфейса может быть улучшена, если она содержит богатые и значимые данные, которые можно получить из таблиц базы данных SFLIGHT
, SBOOK
и т.д. Например, эти данные могут быть использованы для сетки ALV. Эти таблицы должны быть присутствовать во всех системах ABAP, но могут быть доставлены пустыми. Чтобы сгенерировать содержимое, выполните любую из этих программ:
- Для
SCARR
,SPFLI
,SFLIGHT
,SBOOK
…: запустите программуSAPBC_DATA_GENERATOR
. - Для таблиц, начинающихся с
ALV_
(например,ALV_CHCK
,ALV_T_T2
), используемых несколькими демо-программами SAP: запустите программуBCALV_GENERATE_ALV_T_T2
.
Ответ
Чтобы поделиться демонстрацией программы ABAP с использованием элемента управления cl_gui_textedit
(или любого другого элемента управления Dynpro) так, чтобы другие могли просто скопировать, вставить и запустить код, можно использовать упрощенный подход, который исключает необходимость в GUI статусе и дополнительных экранах. Вместо полноценной Dynpro-формы можно воспользоваться экраном выбора (Selection Screen), что значительно упростит процесс.
Вот шаги, которые помогут вам реализовать этот подход и сделать вашу демонстрацию легкодоступной:
1. Упрощение программы
Вместо использования Dynpro и GUI статуса, вы можете создать программу, которая использует экран выбора для отображения вашего текстового редактора. Вот облегченный код программы:
REPORT zdemo_cl_gui_textedit.
DATA go_textedit TYPE REF TO cl_gui_textedit.
PARAMETERS dummy.
AT SELECTION-SCREEN OUTPUT.
IF go_textedit IS NOT BOUND.
go_textedit = NEW #( parent = cl_gui_container=>screen0 ).
ENDIF.
2. Объяснение изменений
- Использование PARAMETER: Вместо создания отдельного экрана, мы определили параметр
dummy
, чтобы программа могла быть выполнена в контексте экрана выбора. - Обработка событий: Логика "PROCESS BEFORE OUTPUT" была заменена на
AT SELECTION-SCREEN OUTPUT
, что позволяет инициализировать ваш текстовый редактор при отображении экрана выбора. - Упрощение объектов GUI: Мы избавились от необходимости создания объектов
cl_gui_custom_container
и GUI статуса, что делает код более компактным и легким для понимания.
3. Как делиться кодом
Теперь, когда вы имеете упрощённый код, вы можете:
- Поделиться в форумах: Вы можете разместить его в любом форуме по ABAP, добавив краткое описание, что делает код, и что пользователи могут ожидать.
- Отправка по электронной почте: Если вы хотите отправить код кому-то, просто скопируйте и вставьте его в тело письма.
- Блог или социальные сети: Можно создать пост в блоге или в социальных сетях, где можно обрисовать сцену использования и дать возможность другим разработчикам легко ее протестировать.
4. Примеры использования
Если хотите, вы можете дополнить свой код демонстрацией других элементов управления, к примеру:
cl_gui_alv_grid
cl_gui_html_viewer
Для этого просто следуйте аналогичной схеме, добавляя соответствующий код для инициализации этих управляемых объектов на экране выбора.
Заключение
Такой подход позволяет вам делиться простыми, но эффективными примерами демонстрации элементов управления в ABAP, минимизируя сложности, связанные с экранами и статусами. Пользователи могут легко скопировать, вставить и запустить ваш код без дополнительных шагов.