是否可以从变量中找出 TABLE-FIELD 短语?在下面的示例中,如何从字符串中获取jkak-vbeln
类型?dref
我尝试了一些 RTTI,但没有发现任何有用的东西。
DATA: p_dat TYPE jkak-vbeln.
DATA: dref TYPE REF TO data.
GET REFERENCE OF p_dat INTO dref.
这个答案是为了在运行时JKAK-VBELN
从用 声明的变量中获取文本DATA p_dat TYPE jkak-vbeln
,即以全文形式获取其类型名称。这个答案适用于基于 ABAP 字典(DDIC)“TABLE-FIELD”组合的类型,我不知道其他任何东西。
RTTI 只对技术类型感兴趣,而不是其起源的确切路径,因此您不能完全使用 RTTI。
如果变量的类型来自 DDIC,那么您可以使用DESCRIBE FIELD ... HELP-ID ...。假设您的起点是DREF
对该变量的引用,以下是如何使用它:
DATA: p_dat TYPE jkak-vbeln.
DATA: dref TYPE REF TO data.
GET REFERENCE OF p_dat INTO dref.
DATA: help_id TYPE string.
FIELD-SYMBOLS: <any> TYPE any.
ASSIGN dref->* TO <any>.
DESCRIBE FIELD <any> HELP-ID help_id.
ASSERT help_id = 'JKAK-VBELN'.
如果您的目标是扫描您的 ABAP 源代码,那么您可以使用READ REPORT,但您还有很多事情要考虑,例如使用词法分析器、解析器、读取父或子 ABAP 源代码单元等。
假设您想知道表 JKAK 中字段 VBELN 的“AVNR”类型?然后试试这个:
DATA: p_dat TYPE jkak-vbeln.
DATA: dref TYPE REF TO data.
GET REFERENCE OF p_dat INTO dref.
DATA: o_type TYPE REF TO cl_abap_typedescr,
o_elem TYPE REF TO cl_abap_elemdescr.
o_type = cl_abap_typedescr=>describe_by_data_ref( p_data_ref = dref ).
o_elem ?= o_type.
WRITE o_elem->get_ddic_field( )-tabname.
对于有关 ddic 字段的其他值,您可以检查最后一行中的其他组件;)