Dynpro
Dynpro (dynamic program) — класична ABAP-технологія користувацьких інтерфейсів у SAP GUI. До появи ООП і сучасних UI-технологій це був єдиний спосіб інтерактивної роботи з користувачем: намальований екран + процедурна логіка (flow logic) + dialog modules у ABAP-програмі. Сьогодні це legacy, але ти його зустрінеш майже у будь-якому on-premise ABAP-коді.
Базова анатомія
Section titled “Базова анатомія”- Dynpro ідентифікується чотиризначним номером у ABAP-програмі.
1000зарезервовано. - Створюється тільки у function groups, module pools або executable programs (не у class pools).
- Складається з:
- Screen layout — візуальна частина, редагується у screen painter (SAP GUI, транзакція SE51 або подвійний клік на dynpro у SE80).
- Element list — перелік screen elements (input fields, кнопки, радіо, таблиці тощо) + OK field.
- Flow logic — процедурна послідовність подій PBO/PAI/POH/POV.
- Attributes — тип (Normal / Modal / Subscreen), номер наступного dynpro, опис.
Поточний номер dynpro доступний у sy-dynnr.
Flow logic — події обробки
Section titled “Flow logic — події обробки”Чотири події, що викликаються runtime-framework:
| Подія | Коли викликається | Для чого |
|---|---|---|
PROCESS BEFORE OUTPUT (PBO) | Перед показом dynpro | Підготувати дані, prefill полів, задати GUI status/title |
PROCESS AFTER INPUT (PAI) | Після дії користувача (ENTER, кнопка) | Прочитати введене, валідувати, виконати логіку |
PROCESS ON HELP-REQUEST (POH) | F1 на полі | Показати field help |
PROCESS ON VALUE-REQUEST (POV) | F4 на полі | Показати input help |
PROCESS BEFORE OUTPUT. MODULE pbo_9000.
PROCESS AFTER INPUT. MODULE pai_9000.
PROCESS ON HELP-REQUEST. FIELD dynp_field MODULE help_mod.
PROCESS ON VALUE-REQUEST. FIELD dynp_field MODULE f4_mod.Особливі ключові слова у flow logic:
MODULE— викликає dialog module у ABAP-програмі.FIELD— контролює transport поля з dynpro у ABAP та умовний виклик модулів.CHAIN/ENDCHAIN— групує поля для спільної валідації.LOOP/ENDLOOP— цикл для табличних контролів.CALL SUBSCREEN— включає субекран.
Dialog modules
Section titled “Dialog modules”Dialog module — processing block у ABAP-програмі, який dynpro викликає через MODULE:
" У ABAP-програміMODULE pbo_9000 OUTPUT. SET PF-STATUS 'STATUS_9000'. SET TITLEBAR 'TITLE_9000'. some_input_field = 'Привіт'.ENDMODULE.
MODULE pai_9000 INPUT. save_ok = ok_code. CLEAR ok_code.
CASE save_ok. WHEN 'SAVE'. " логіка WHEN 'CANCEL'. LEAVE TO SCREEN 0. ENDCASE.ENDMODULE.Ключові правила:
- Модулі без параметричного інтерфейсу — обмін тільки через глобальні змінні ABAP-програми.
- Локальних даних нема — усе, що оголосиш всередині модуля, стає глобальним у програмі. Якщо потрібні локальні — винось у метод локального класу.
OUTPUT— для PBO,INPUT— для PAI/POH/POV.- Ім’я модуля довільне; конвенція —
pbo_<dynnr>/pai_<dynnr>.
Трансфер даних між dynpro і програмою
Section titled “Трансфер даних між dynpro і програмою”Dynpro field і глобальна змінна ABAP з однаковим імʼям автоматично обмінюються значеннями:
PROGRAM zdemo.
" Глобальні змінні — мають збігатись з іменами dynpro fieldsDATA: ok_code LIKE sy-ucomm, save_ok LIKE ok_code, customer TYPE char30.
TABLES sflight. " для DDIC-структури з label/help- PBO: присвоєння глобальній змінній → transfer до dynpro field → відображення на екрані.
- PAI: ввід користувача → dynpro field → transfer до глобальної змінної → обробка в ABAP.
TABLES <name>оголошує work area зі структури DDIC (зі всіма label-text і field-help).
OK field і function codes
Section titled “OK field і function codes”Кожен dynpro має OK field — 20-символьне поле, куди потрапляє function code натиснутої кнопки/меню. За конвенцією — OK_CODE.
DATA: ok_code LIKE sy-ucomm, save_ok LIKE ok_code.
MODULE pai_9000 INPUT. save_ok = ok_code. " зберегти CLEAR ok_code. " обовʼязково очистити!
CASE save_ok. WHEN 'SAVE'. " ... WHEN 'EXIT' OR 'CANCEL'. LEAVE PROGRAM. ENDCASE.ENDMODULE.sy-ucomm теж містить function code, але його значення не завжди стабільне — працюй з власним OK field.
Умовні виклики модулів і валідація
Section titled “Умовні виклики модулів і валідація”FIELD — контрольоване transporting
Section titled “FIELD — контрольоване transporting”PROCESS AFTER INPUT. MODULE pai_9000. " ні field_a, ні field_b ще не доступні в ABAP FIELD field_a. MODULE mod_a. " field_a вже transported, field_b — ні FIELD field_b. MODULE mod_b. " обидва доступніУмовний виклик
Section titled “Умовний виклик”" Викликати mod тільки якщо field не порожнєFIELD dynp_field MODULE mod ON INPUT.
" Викликати mod тільки якщо значення field змінилось з минулого PBOFIELD dynp_field MODULE mod ON REQUEST.CHAIN для валідації групи полів
Section titled “CHAIN для валідації групи полів”CHAIN. FIELD customer. FIELD order_id. MODULE validate_order.ENDCHAIN.Якщо у validate_order викинути MESSAGE ... TYPE 'E' — усі поля з chain лишаються input-enabled, користувач їх правитиме.
Input checks — автоматичні і власні
Section titled “Input checks — автоматичні і власні”- Автоматичні — required fields (
OBLIGATORYу screen painter). Без валідного вводу program не продовжує. - Exit command — тип функції
E(MODULE mod AT EXIT-COMMAND) обходить автопровірки. Використовується для кнопок Cancel/Back, щоб користувач міг вийти, не заповнюючи required.
PROCESS AFTER INPUT. MODULE exit_handler AT EXIT-COMMAND. " викликається першим, обходить required FIELD customer MODULE check_customer.- Власні перевірки — у dialog module через
FIELD/CHAIN+MESSAGE:TYPE 'E'— error, користувач мусить виправити.TYPE 'W'— warning, можна проігнорувати.
SET SCREEN, CALL SCREEN, LEAVE SCREEN
Section titled “SET SCREEN, CALL SCREEN, LEAVE SCREEN”Керування послідовністю dynpro:
" Динамічно задати наступний dynpro (перезаписує статичний)SET SCREEN 9200.LEAVE SCREEN. " вийти у заданий наступний
" Короткий варіантLEAVE TO SCREEN 9200.
" Закінчити послідовністьSET SCREEN 0.LEAVE SCREEN." або простоLEAVE TO SCREEN 0.
" Запустити нову (вкладену) послідовністьCALL SCREEN 9300.
" Модальне вікноCALL SCREEN 9300 STARTING AT 10 5 ENDING AT 50 20.
" Вийти з програми повністюLEAVE PROGRAM.Правила:
- Якщо next dynpro =
0— послідовність завершується. CALL SCREENстворює вкладену послідовність. По її завершенню повертаємось у попередню.LEAVE PROGRAM— виход з програми в цілому.
Динамічна зміна screen elements
Section titled “Динамічна зміна screen elements”У PBO можна перебрати елементи через LOOP AT SCREEN і змінити їхні атрибути:
MODULE pbo_9000 OUTPUT. LOOP AT SCREEN INTO DATA(scr). IF scr-name = 'CUSTOMER_FIELD'. scr-required = '1'. " зробити required scr-invisible = '0'. MODIFY SCREEN FROM scr. ENDIF. IF scr-group1 = 'GRP1' AND hide_group = abap_true. scr-active = '0'. " приховати MODIFY SCREEN FROM scr. ENDIF. ENDLOOP.ENDMODULE.У dynpro значення булевих атрибутів — '0' / '1' (не abap_true/abap_false).
GUI status і title
Section titled “GUI status і title”" У PBOSET PF-STATUS 'STATUS_9000'.SET PF-STATUS 'STATUS_9000' EXCLUDING 'DELETE'. " заборонити функцію
SET TITLEBAR 'TITLE_9000'.SET TITLEBAR 'TITLE_9000' WITH customer_name. " плейсхолдер &1
" Отримати поточнийDATA current_status TYPE sy-pfkey.GET PF-STATUS current_status.Status і titlebar — окремі репо-обʼєкти, редагуються у menu painter (SE41) або в SE80 під програмою.
Controls
Section titled “Controls”Table control
Section titled “Table control”Для табличного вводу/виводу:
" ABAP declarationCONTROLS tc_orders TYPE TABLEVIEW USING SCREEN 9000.
" Flow logicPROCESS BEFORE OUTPUT. LOOP WITH CONTROL tc_orders. MODULE fill_row. ENDLOOP.
PROCESS AFTER INPUT. LOOP WITH CONTROL tc_orders. MODULE read_row. ENDLOOP.Для сучасних застосунків краще ALV Grid (CL_SALV_TABLE) або Fiori — table control незручний у підтримці.
Tabstrip control
Section titled “Tabstrip control”CONTROLS tabs TYPE TABSTRIP.
" PBOtabs-activetab = 'TAB1'.dynnr = '9100'.prog = sy-repid.
" Flow logicPROCESS BEFORE OUTPUT. CALL SUBSCREEN area INCLUDING prog dynnr.
PROCESS AFTER INPUT. CALL SUBSCREEN area.Tabstrip — набір субекранів з перемиканням через tab-кнопки.
GUI controls
Section titled “GUI controls”CL_GUI_* — Toolbar, Picture, HTML viewer, TextEdit, Tree, ALV Grid. Інтегруються через CL_GUI_CUSTOM_CONTAINER, інстанційований на Custom Control у dynpro. Більш сучасні, ніж табличні контролі, але все одно legacy.
Коротка шпаргалка методики
Section titled “Коротка шпаргалка методики”- SE80 → створити program/function group → dynpro (номер 9000).
- Screen painter → малюєш layout, додаєш елементи. Кожному input field — імʼя, що збігається з глобальною змінною у програмі.
- Element list → додаєш OK_CODE (тип OK).
- Flow logic → PBO/PAI + MODULE.
- У ABAP-програмі оголошуєш глобальні змінні, пишеш модулі між
MODULE ... OUTPUT/INPUTіENDMODULE. - GUI status (SE41) → додаєш кнопки з function codes.
- Запуск через transaction code або з іншої програми через
CALL SCREEN/LEAVE TO SCREEN.
Посилання
Section titled “Посилання”- SAP GUI User Dialogs — ABAP Keyword Documentation.
- Screen painter / Menu painter — SE51 / SE41.
- Демо-програми у системі:
CTRL+SHIFT+A→demo_dynpro*.
Адаптовано з 18_Dynpro.md (Apache 2.0).