Это недокументированная функция, но в модальном диалоговом окне (всплывающее окно) верхней правой кнопке для закрытия всплывающего окна назначается клавиша F12
, поэтому вы должны назначить эту клавишу коду функции и обработать ее как и любой другой код функции.
Пошаговая процедура:
1) Создать программу ABAP (код транзакции SE38
или SE80
)
REPORT.
CALL SCREEN 100 STARTING AT 10 10 ENDING AT 60 20.
MODULE status_0100 OUTPUT. " <=== called "before output"
SET PF-STATUS '0100'. " <=== choose the GUI status
ENDMODULE.
MODULE user_command_0100 INPUT. " <=== called "after input" (after user action)
IF sy-ucomm = 'CANCEL'. " <=== the function code you chose in your GUI status
SET SCREEN 0. " <=== 0 is a special number which ends "CALL SCREEN"
ENDIF.
ENDMODULE.
Примечание: SET SCREEN 0
- чтобы закрыть диалоговое окно (0
означает «текущая последовательность dynpro завершена»); если у вас сложный экран, вы также можете использовать LEAVE TO SCREEN
(что эквивалентно 2 операторам SET SCREEN + LEAVE SCREEN).
2) Создайте экран 0100 (код транзакции SE51
или двойной щелчок 0100
позади CALL SCREEN
)
Тип экрана: модальное диалоговое окно
Логика потока:
PROCESS BEFORE OUTPUT.
MODULE status_0100.
PROCESS AFTER INPUT.
MODULE user_command_0100.
3) Создание статуса графического интерфейса 0100 (код транзакции SE41
или двойной щелчок 0100
позади SET PF-STATUS
)
Тип состояния: диалоговое окно
Назначьте клавишу F12 произвольному коду функции (я выбрал название CANCEL
) и активируйте этот код функции (кнопка «Код функции»):
4) Тест
Запустите программу, теперь вы можете нажать верхнюю правую кнопку (или нажать F12, если хотите), которая закрывает модальное диалоговое окно: