RTTI: получить длину столбца символов - PullRequest
0 голосов
/ 28 февраля 2019

Мой функциональный модуль получает имя таблицы и имя столбца во время выполнения.

Я хотел бы получить длину столбца: сколько символов допускается в прозрачной таблице?

Я использовал свою любимую поисковую систему и нашел RTTS .

Но примеры в документации передают переменную методу RTTS DESCRIBE_BY_DATA;в моем случае у меня нет переменной, у меня просто есть имена типов в table_name и column_name.

Как получить длину?

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

Вам не нужен RTTS для этого.Вы можете сделать одно из следующих действий:

  1. Выбрать таблицу DD03L с TABNAME и FIELDNAME
  2. Использовать функцию DDIF_FIELDINFO_GET
0 голосов
/ 28 февраля 2019

Для извлечения типа данного типа DDIC, известного только во время выполнения, используйте метод DESCRIBE_BY_NAME.Длина RTTI всегда возвращается в виде количества байтов.

Пример для получения типа столбца CARRID таблицы SFLIGHT (я знаю, что это столбец из 3 символов):

cl_abap_typedescr=>describe_by_name(
EXPORTING
  p_name         = 'SFLIGHT-CARRID'
RECEIVING
  p_descr_ref    = DATA(lo_typedescr)
EXCEPTIONS
  type_not_found = 1 ).

" you should handle the error if SY-SUBRC <> 0

" Because it's SFLIGHT-CARRID, I expect 6 BYTES
ASSERT lo_typedescr->length = 6. " 3 characters * 2 bytes (Unicode)

" Length in CHARACTERS
CASE lo_typedescr->type_kind.
  WHEN lo_typedescr->typekind_char
    OR lo_typedescr->typekind_num
    OR lo_typedescr->typekind_date
    OR lo_typedescr->typekind_time
    OR lo_typedescr->typekind_string.
  DATA(no_of_characters) = lo_typedescr->length / cl_abap_char_utilities=>charsize.
  ASSERT no_of_characters = 3.
ENDCASE.
...