使用 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源代码单元等