Доступ к элементу внутренней строки таблицы объекта - PullRequest
1 голос
/ 11 января 2020

Как получить прямой доступ к атрибуту DATA одного объекта во внутренней таблице CHILDREN?

CLASS class1 DEFINITION.
  PUBLIC SECTION.
    DATA: data TYPE string.
    DATA: children TYPE STANDARD TABLE OF REF TO class1 WITH EMPTY KEY.
    METHODS constructor
      IMPORTING data TYPE string.
ENDCLASS.

CLASS class1 IMPLEMENTATION.
  METHOD constructor.
    me->data = data.
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
  DATA children TYPE STANDARD TABLE OF REF TO class1.
  APPEND NEW #( data = 'test' ) TO children.
  WRITE children[ 1 ]->data.                      " <== syntax error

Но я получаю сообщение об ошибке синтаксиса:

Неожиданный оператор "->".

Ответы [ 2 ]

3 голосов
/ 11 января 2020

Табличные выражения (children[ ... ]) допускаются начиная с ABAP 7.40 SP 02 , но селектор компонента объекта -> после табличного выражения разрешен только из ABAP 7.50 :

Начиная с версии 7.50, селектор компонента объекта -> можно указывать непосредственно после табличных выражений, которые возвращают ссылочную переменную. Это позволяет получить доступ к компонентам ссылочного объекта. Исключением являются табличные выражения, результат которых определяется оператором значения VALUE.

Обходной путь: вместо WRITE children[ 1 ]->data используйте:

DATA(child) = children[ 1 ].
WRITE child->data.
1 голос
/ 13 января 2020

Сообщите нам ABAP-версию вашего сервера SAP. Ваш код отлично работает для ABAP версии 7.4 и выше.

Для версий менее 7.3, пожалуйста, используйте следующий код.

  DATA children TYPE STANDARD TABLE OF REF TO class1.
  DATA: child TYPE REF TO class1.
  CREATE OBJECT child EXPORTING data = 'test'.
  append child to children.
  write children[ 1 ]->data.

Я вижу, что проблема также может быть связана с вашим оператором указателя (->), который, я считаю, может быть проблемой кодирования.

Пожалуйста, попробуйте это

...