RTTI:获取字符列的长度
RTTI: Get length of a character column
我的功能模块在运行时收到一个 table 名称和一个列名称。
我想得到列的长度:透明的允许多少个字符table?
我使用我最喜欢的搜索引擎找到了 RTTS。
但是文档中的示例将变量传递给 RTTS 方法DESCRIBE_BY_DATA
;在我的例子中,我没有变量,我只有 table_name
和 column_name
.
中的类型名称
如何获取长度?
要检索仅在运行时已知的给定 DDIC 类型的类型,请使用方法 DESCRIBE_BY_NAME
。 RTTI 长度始终以字节数形式返回。
获取 table 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.
您不需要为此使用 RTTS。您可以执行其中一项
- Select table DD03L 与 TABNAME 和 FIELDNAME
- 使用函数DDIF_FIELDINFO_GET
我的功能模块在运行时收到一个 table 名称和一个列名称。
我想得到列的长度:透明的允许多少个字符table?
我使用我最喜欢的搜索引擎找到了 RTTS。
但是文档中的示例将变量传递给 RTTS 方法DESCRIBE_BY_DATA
;在我的例子中,我没有变量,我只有 table_name
和 column_name
.
如何获取长度?
要检索仅在运行时已知的给定 DDIC 类型的类型,请使用方法 DESCRIBE_BY_NAME
。 RTTI 长度始终以字节数形式返回。
获取 table 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.
您不需要为此使用 RTTS。您可以执行其中一项
- Select table DD03L 与 TABNAME 和 FIELDNAME
- 使用函数DDIF_FIELDINFO_GET