问题
像describe_by_data
, get_ddic_field_list
, get_components
(ofcl_abap_typedescr
和类似的) 这样的方法是从数据库中检索数据还是在应用程序服务器上生成?
我查看了这些类,所有一些方法(可能是填充缓存)似乎以非标准方式(METHOD ... BY KERNEL MODULE ...
)提取数据,而其他方法则从缓存中提取数据。我想知道如果它没有被缓存,它是如何被拉出来的。
谷歌也没有给我任何关于这个话题的具体信息。
一些上下文,以防细节变得相关
我一直在研究为一些通用类实现动态选择子句生成(以替换 S/4HANA 中基于列的处理的星号,并希望减少对 DB 的压力)。
由于这些类中的大多数将数据检索到字典类型结构中,我想我可以使用运行时类型服务 (RTTS) 的类型描述来获取字段列表并根据目标结构动态生成 select 子句。
在大多数情况下,我可以通过实现静态变量(并且每个会话只处理一次)来解决性能损失(如果有的话),但是我遇到过类似的情况,静态变量不是一个选项(处理是在未知的情况下进行的) types),我不得不放弃这个想法,因为我不确定如果调用这些方法会如何影响峰值性能,假设每个会话 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.