使用 TABLE-FIELD 声明时如何找出变量的类型
How to find out the type of a variable when it gets declared with TABLE-FIELD
是否可以从变量中找出TABLE-FIELD 短语?
在下面的示例中,我如何从 dref
作为字符串获取 jkak-vbeln
作为类型?
我尝试了一些 RTTI,但没有发现任何有用的东西。
DATA: p_dat TYPE jkak-vbeln.
DATA: dref TYPE REF TO data.
GET REFERENCE OF p_dat INTO dref.
假设您想知道 table 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 字段的其他值,您可以检查最后一行中的其他组件 ;)
此答案用于在运行时从使用 DATA p_dat TYPE jkak-vbeln
声明的变量中获取文本 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 或子 ABAP源代码单元等
是否可以从变量中找出TABLE-FIELD 短语?
在下面的示例中,我如何从 dref
作为字符串获取 jkak-vbeln
作为类型?
我尝试了一些 RTTI,但没有发现任何有用的东西。
DATA: p_dat TYPE jkak-vbeln.
DATA: dref TYPE REF TO data.
GET REFERENCE OF p_dat INTO dref.
假设您想知道 table 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 字段的其他值,您可以检查最后一行中的其他组件 ;)
此答案用于在运行时从使用 DATA p_dat TYPE jkak-vbeln
声明的变量中获取文本 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 或子 ABAP源代码单元等