RTTI:获取字符列的长度

gue*_*tli 7 sap abap rtti

我的功能模块在运行时会收到一个表名和一个列名。

我想获取列的长度:透明表中允许多少个字符?

我使用了我最喜欢的搜索引擎,并发现了RTTS

但是文档中的例子将变量传递给RTTS方法DESCRIBE_BY_DATA; 就我而言,我没有变量,而在table_name和中只有类型名称column_name

如何获得长度?

San*_*ssi 7

要检索仅在运行时才知道的给定DDIC类型的类型,请使用方法DESCRIBE_BY_NAME。RTTI长度始终以字节数形式返回。

获取表SFLIGHT的列CARRID的类型的示例(我知道这是3个字符的列):

cl_abap_typedescr=>describe_by_name(
EXPORTING
  p_name         = 'SFLIGHT-CARRID'
RECEIVING
  p_descr_ref    = DATA(lo_typedescr)
EXCEPTIONS
  type_not_found = 1 ).

" you should handle the error if SY-SUBRC <> 0

" Because it's SFLIGHT-CARRID, I expect 6 BYTES
ASSERT lo_typedescr->length = 6. " 3 characters * 2 bytes (Unicode)

" Length in CHARACTERS
CASE lo_typedescr->type_kind.
  WHEN lo_typedescr->typekind_char
    OR lo_typedescr->typekind_num
    OR lo_typedescr->typekind_date
    OR lo_typedescr->typekind_time
    OR lo_typedescr->typekind_string.
  DATA(no_of_characters) = lo_typedescr->length / cl_abap_char_utilities=>charsize.
  ASSERT no_of_characters = 3.
ENDCASE.
Run Code Online (Sandbox Code Playgroud)


小智 1

为此,您不需要 RTTS。您可以执行以下操作之一

  1. 使用 TABNAME 和 FIELDNAME 选择表 DD03L
  2. 使用函数 DDIF_FIELDINFO_GET