Изменение текста в поле ввода без использования ключевого слова TABLES - PullRequest
1 голос
/ 05 августа 2020

Я хочу показать текст в поле ввода на экране, который представляет собой значение из рабочей области, соответственно имя, возраст и город, как вы можете видеть. Когда я объявляю znew_fdkey01 и znew_fdkey02 (которые являются прозрачными таблицами) с использованием ключевого слова TABLES, например:

TABLES: znew_fdkey01, znew_fdkey02.

, он работает отлично. Но когда я хочу получить тот же эффект без использования этого ключевого слова, и когда я объявляю такие переменные:

DATA: znew_fdkey01 TYPE znew_fdkey01,
      znew_fdkey02 TYPE znew_fdkey02.

, он не показывает мне текст в поле ввода.

Почему?

NB: вот код для инициализации полей экрана (одинаковый в обоих случаях):

LOOP AT SCREEN INTO screen_wa.

  IF screen_wa-name = 'ZNEW_FDKEY01-NAME'.
    znew_fdkey01-name = lr_znewfdkey3-name.
  ENDIF.

  IF screen_wa-name = 'ZNEW_FDKEY01-AGE'.
    znew_fdkey01-age = lr_znewfdkey3-age.
  ENDIF.

  IF screen_wa-name = 'ZNEW_FDKEY02-CITY'.
    znew_fdkey02-city = lr_znewfdkey3-city.
  ENDIF.

  MODIFY SCREEN FROM screen_wa.

ENDLOOP.

Ответы [ 2 ]

2 голосов
/ 05 августа 2020

Это правильно, ТАБЛИЦЫ определяют рабочие области, и в то же время необходимо обеспечить автоматическое c взаимодействие между экраном (dynpro) и программой ABAP, как описано в Справке ABAP :

Рабочие области таблиц, объявленные с помощью TABLES, - это рабочие области интерфейса ...

Оператор TABLES требуется для обмена данными между полями dynpro и программой ABAP , если поля были определены в dynpro в программе из словаря ABAP,. В PBO события dynpro содержимое рабочей области таблицы передается в поля dynpro с одинаковыми именами. В PAI система берет данные из полей dynpro с одинаковыми именами.

(в противном случае не используйте ТАБЛИЦЫ для объявления рабочих областей, это устарело)

0 голосов
/ 06 августа 2020

Вы должны использовать TABLES только в том случае, если вы определяете поле ввода / вывода экрана как поле «DDI C» (Data / ABAP Dictionary). Это флажок, определенный в Screen Painter для каждого поля экрана.

Есть две возможности:

  • Вы можете указать свое поле ввода-вывода, как в соответствии с существующим DDI C поле структуры (как и вы, ZNEW_FDKEY01-NAME), и вы определяете его как поле «DDI C» (это атрибут поля в Screen Painter), и вы должны использовать TABLES для передачи значений.
  • Или вы не определяете поле ввода экрана как поле «DDI C», а определяете имя поля как глобальную переменную в своей программе, использование TABLES совершенно необязательно. Но в этом случае вы теряете некоторые функции на экране, которые являются уникальными для DDI C, например, повторное использование меток DDI C (любое изменение влияет на все экраны), справку по значению / F4, как справку по поиску, подразумевающую несколько полей (но вы все равно можете закодировать его в ABAP с нуля), et c.

Пример:

  • Создайте эту программу:
    TABLES spfli. " Mandatory as screen field SPFLI-CARRID is connected to the "DDIC"
    DATA scarr TYPE scarr. " or TABLES scarr if you wish
    
    spfli-carrid = 'LH'.
    scarr-carrname = 'Name of company'.
    
    CALL SCREEN 100.
    
    MODULE screen_0100_pai INPUT.
      LEAVE TO SCREEN 0.
    ENDMODULE.
    
  • Создайте dynpro 0100 с этими полями (обратите внимание на «Dict.field»)
    Name             Type Line Col. Def Vis Format Inp Out  Dict.field
    SPFLI-CARRID     I/O  1    18   3   3   CHAR   X   X    X
    SCARR-CARRNAME   I/O  2    18   20  20  CHAR   X   X   
    
  • и этот поток logi c:
    PROCESS BEFORE OUTPUT.
    PROCESS AFTER INPUT.
      MODULE SCREEN_0100_PAI.
    
  • Активируйте и запустите программу .
  • Ожидаемый результат: введите описание изображения здесь
...