Как включить экран выбора в другой экран - PullRequest
1 голос
/ 06 июля 2019

Мне нужно включить экран выбора данной программы (ZPRG1) в подэкран другой программы (ZPRG2) (100).

Когда я запускаю программу ZPRG2 ниже,перед отображением какого-либо экрана возникает ошибка времени выполнения DYNP_WRONG_SCREEN_TYPE (неправильный тип экрана: экран либо был определен неправильно, либо используется неправильно).

ZPRG1 (экран выбора 1000с одним полем TEST):

REPORT zprg1. 
PARAMETERS test AS CHECKBOX.

ZPRG2 :

REPORT zprg2.
CALL SCREEN 100.
MODULE pai INPUT.
  SET SCREEN 0. " close screen (all the time)
ENDMODULE.

Экран 100 : (для ZPRG2) Макет экранаопределяет область подэкрана SUBAREA и любое количество элементов, а логика потока выглядит следующим образом:

PROCESS BEFORE OUTPUT.
  CALL SUBSCREEN subarea INCLUDING 'ZPRG1' '1000'.
PROCESS AFTER INPUT.
  CALL SUBSCREEN subarea.
  MODULE pai.

Как предотвратить ошибку времени выполнения?

1 Ответ

3 голосов
/ 07 июля 2019

В технологии dynpro, чтобы включить экран «A» в экран «B», экран «A» должен быть определен как подэкран , а экран «B» должен определить «подэкран» область ", чтобы содержать экран" A ". логика потока экрана "B" должна содержать оператор CALL SUBSCREEN <subscreen_area> INCLUDING ..., который относится к номеру подэкрана для включения либо статически, либо через глобальную переменную .

Как и в обычном экране, экран выбора также можно определить как подэкран, определив его как «автономный экран выбора» (оборачивая его элементы внутри операторов ABAP SELECTION-SCREEN BEGIN OF SCREEN <any-screen-number> и SELECTION-SCREEN END OF SCREEN <any-screen-number>) и добавив слова «КАК ПОДПИСЬ» после BEGIN OF SCREEN <any-screen-number>). Например:

SELECTION-SCREEN BEGIN OF SCREEN 1001 AS SUBSCREEN.
    PARAMETERS test AS CHECKBOX.
SELECTION-SCREEN END OF SCREEN 1001.

Если вам нужно включить существующий экран выбора, который еще не определен как подэкран, есть две основные возможности:

  1. Если он уже был определен как «автономный экран» (с SELECTION-SCREEN BEGIN OF SCREEN ...), и он должен использоваться только в качестве подэкрана, вы можете просто добавить AS SUBSCREEN, как сказано выше.
  2. Если он должен использоваться как в качестве подэкрана, так и в качестве обычного экрана, то наиболее простым решением является завершение его элементов внутри блока (операторы ABAP SELECTION-SCREEN BEGIN OF BLOCK <block ID> и SELECTION-SCREEN END OF BLOCK <block ID>), и определите другой экран выбора, который включает этот блок (оператор ABAP SELECTION-SCREEN INCLUDE BLOCKS <block ID>).

Ниже приведены два примера для случая 2.

Пример 1 с экраном выбора по умолчанию (сноска 1000 cf)

  • До:
REPORT zprg1.

PARAMETERS test AS CHECKBOX. " screen 1000 cf footnote
  • После того, как:
REPORT zprg1.

SELECTION-SCREEN BEGIN OF BLOCK b1000.
    PARAMETERS test AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK b1000.

SELECTION-SCREEN BEGIN OF SCREEN 1001 AS SUBSCREEN.
    SELECTION-SCREEN INCLUDE BLOCKS b1000.
SELECTION-SCREEN END OF SCREEN 1002.

Пример 2 с автономным экраном выбора (1002, включая CALL SUBSCREEN subarea INCLUDING 'ZPRG1' '1002'.)

  • До:
REPORT zprg1.

SELECTION-SCREEN BEGIN OF SCREEN 1002.
    PARAMETERS test AS CHECKBOX.
SELECTION-SCREEN END OF SCREEN 1002.
  • После того, как:
REPORT zprg1.

SELECTION-SCREEN BEGIN OF SCREEN 1002.
SELECTION-SCREEN BEGIN OF BLOCK b1002.
    PARAMETERS test AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK b1002.
SELECTION-SCREEN END OF SCREEN 1002.

SELECTION-SCREEN BEGIN OF SCREEN 1003 AS SUBSCREEN.
    SELECTION-SCREEN INCLUDE BLOCKS b1002.
SELECTION-SCREEN END OF SCREEN 1003.

Сноска:

(1) Параметры экрана выбора, которые не помещены в SELECTION-SCREEN BEGIN OF SCREEN ... END OF SCREEN ..., неявно являются частью "экрана выбора по умолчанию" (1000). Обратите внимание, что использование SELECTION-SCREEN BEGIN OF SCREEN 1000... приводит к синтаксической ошибке.

...