SAP: модальное диалоговое окно не реагирует - PullRequest
0 голосов
/ 04 сентября 2011

Я пытаюсь вызвать экран как всплывающее окно.Тип экрана установлен на Modal dialog box, и я могу вызвать экран, но не могу его закрыть.Ничего не происходит, когда я нажимаю на маленький крестик.Следующий экран настроен на 0.

Экран, который я называю всплывающим, в любом случае не содержит кнопок, а также жестко запрограммированных.Есть идеи, что я делаю неправильно?

Я бы также хотел, чтобы экран, к которому он возвращается, обновлялся (поэтому он снова загружал PBO).Как мне это сделать?

РЕДАКТИРОВАТЬ

MODULE werkende_knoppen_subscreen INPUT.
  CASE ok_code.
    WHEN 'X'.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.

Ответы [ 2 ]

1 голос
/ 05 сентября 2011

Вы должны проверить пользовательскую команду 'EXIT' (или, в вашем случае для пользовательской кнопки закрытия, 'X') в части PAI вашего всплывающего окна. Например:

MODULE user_command_0010 INPUT.
  ok = sy-ucomm.
  CLEAR sy-ucomm.
  CASE ok.
    WHEN 'EXIT' OR 'X'.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.
0 голосов
/ 04 июля 2019

Это недокументированная функция, но в модальном диалоговом окне (всплывающее окно) верхней правой кнопке для закрытия всплывающего окна назначается клавиша 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) и активируйте этот код функции (кнопка «Код функции»): enter image description here

4) Тест

Запустите программу, теперь вы можете нажать верхнюю правую кнопку (или нажать F12, если хотите), которая закрывает модальное диалоговое окно:

enter image description here

...