Вопрос
Получают ли такие методы, как describe_by_data
, get_ddic_field_list
, get_components
(из cl_abap_typedescr
и аналогичные), данные из базы данных или они генерируются на сервере приложений?
Я посмотрел на эти классы, и все некоторые методы (предположительно, заполняющие кэш), по-видимому, извлекают данные нестандартными способами (METHOD ... BY KERNEL MODULE ...
), а другие извлекают данные из кеша. Мне интересно, как оно вытягивается, если оно не кэшируется.
Google также не дал мне никакой конкретной информации по этой теме.
Некоторый контекст, если подробности становятся актуальными
Я пытался реализовать генерацию динамических предложений выбора для некоторых универсальных классов (чтобы заменить звездочку для обработки на основе столбцов в S / 4HANA и, надеюсь, уменьшить нагрузку на БД).
Поскольку большинство этих классов извлекают данные в структуры типа словаря, я подумал, что мог бы использовать описания типов Runtime Type Services (RTTS) для получения списков полей и динамического генерирования предложения select на основе целевой структуры.
В большинстве случаев я могу обойти потерю производительности (если она есть), применяя статические переменные (и обрабатывая их только один раз за сеанс), но я сталкивался с подобными случаями, когда статические переменные были недоступны (обработка сделано на неизвестных типах), и мне пришлось отказаться от этой идеи, потому что я не был уверен, как это повлияет на пиковую производительность, если эти методы будут вызваны, скажем, 30 раз за сеанс.
Редактировать (просто фрагмент кода, чтобы избежать дальнейшей путаницы, которая приводит к снисходительным комментариям без содержания):
lo_struct ?= cl_abap_structdescr=>describe_by_data( header ).
ct_components = lo_struct->get_components( ).
"Loop through ct_components appending names to lv_select_clause
lv_select_clause = get_header_fields( is_target_structure = header ).
select single (lv_select_clause)
from rbkp
where gjahr = @iv_gjahr
and belnr = @iv_belnr
into corresponding fields of @header.