IT干货网

abap之RTTI:获取字符列的长度

lonelyxmas 2024年10月25日 编程设计 90 0

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

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

我用我最喜欢的搜索引擎找到了RTTS .

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

如何获得长度?

请您参考如下方法:

要检索仅在运行时已知的给定 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. 


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!