ASSIGN не работает с переменной из пути отладчика - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь присвоить значение этого пути структурирования символу поля, но этот путь не работает, потому что в его пути есть таблица.

Но в отладчике это значение этого пути равно показано правильно.

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

ls_struct (Struct)
    - SUPPLYCHAINTRADETRANSACTION (Struct)
        - INCL_SUPP_CHAIN_ITEM (Table)
            - ASSOCIATEDDOCUMENTLINEDOCUMENT (Element)   


i_component_path = |IG_DDIC-SUPPLYCHAINTRADETRANSACTION-INCL_SUPP_CHAIN_ITEM[1]-ASSOCIATEDDOCUMENTLINEDOCUMENT|.
ASSIGN (i_component_path) TO FIELD-SYMBOL(<lg_value>).
IF <lg_value> IS NOT ASSIGNED.
    return.
ENDIF.

<lg_value> won't be assigned 

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Это кажется довольно неожиданным ограничением оператора ASSIGN. Вероятно, стоит заплатить языковой группе SAP ABAP, чтобы уточнить, является ли это ошибкой.

Пока это работает:

ASSIGN data-some_table[ 1 ]-some_field TO FIELD-SYMBOL(<lv_source>).

то же самое, что и строка, не соответствует:

ASSIGN (`data-some_table[ 1 ]-some_field`) TO FIELD-SYMBOL(<lv_source>).

Альтернатива 1 для (name) документации по ключевым словам ABAP для оператора ASSIGN говорит, что «[t] его имя в name структурировано так же, как если бы оно было указано напрямую ".

Однако за этим объявлением сразу следует" содержимое имени должно быть именем объекта данных, который может содержать смещения и длины, селекторы компонентов структуры и селекторы компонентов для назначения объектов и атрибутов структурированных данных в классах или объектах ", список, который не включает в себя табличные выражения , которые нам понадобятся здесь.

1 голос
/ 12 февраля 2020

Решение Сандра Росси

Отладчик имеет свой собственный синтаксис и собственный лог c, он вообще не применяет алгоритм ASSIGN. В исходном коде ABAP вы должны использовать ASSIGN дважды, первый для достижения внутренней таблицы, затем вы выбираете первую строку, а второй - для доступа к компоненту строки.

Отладчик работает совершенно по-другому, код отладчика работает только в режиме отладки, вы не можете вызвать код из отладчика (то есть, если вы его вызовите, код ядра, используемый отладчиком, потерпит неудачу). Нет, там нет "abappath". Существуют объекты XSL-преобразования (xpath), но они медленны для того, что вы просите.

Большое спасибо

...