0

是否可以从变量中找出 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.
4

2 回答 2

1

这个答案是为了在运行时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 源代码单元等。

于 2021-07-08T13:49:45.910 回答
0

假设您想知道表 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 字段的其他值,您可以检查最后一行中的其他组件;)

于 2021-07-08T13:11:40.170 回答