ABAP如何通过代码校验SE11中指定结构是否存在
ABAP查询SE11字典结构是否存在的实现方法
完全可以通过ABAP代码查询指定ABAP字典结构是否存在,常用的有3种实现方式:
方法1:通过
CL_ABAP_TYPEDESCR类判断(推荐,无需直接查询系统表,自动适配大小写)
调用类的DESCRIBE_BY_NAME方法,通过捕获异常判断结构状态,示例代码如下:DATA: lv_struct_name TYPE tabname VALUE 'ZTEST_STRUCT'. "替换为你要查询的结构名 TRY. cl_abap_typedescr=>describe_by_name( lv_struct_name ). WRITE: '结构存在且已激活'. CATCH cx_root. WRITE: '结构不存在或未激活'. ENDTRY.如果结构不存在、未激活或者不属于合法的字典类型,都会抛出异常,捕获后即可直接得到判断结果。
方法2:直接查询DDIC系统表
DD02L
结构属于ABAP字典的内表类型,在DD02L中对应的TABCLASS字段值为INTTAB,可以直接查询判断:DATA: lv_struct_name TYPE tabname VALUE 'ZTEST_STRUCT', lv_exist TYPE abap_bool. SELECT SINGLE abap_bool INTO @lv_exist FROM dd02l WHERE tabname = @lv_struct_name AND as4local = 'A' "仅查询已激活的对象 AND tabclass = 'INTTAB'. "筛选结构类型对象 IF lv_exist = abap_true. WRITE: '结构存在且已激活'. ELSE. WRITE: '结构不存在或未激活'. ENDIF.注意:使用该方法时传入的结构名需要为大写,否则会查询不到结果。
方法3:调用标准功能模块
DDIF_TABL_GETDATA: lv_struct_name TYPE tabname VALUE 'ZTEST_STRUCT'. CALL FUNCTION 'DDIF_TABL_GET' EXPORTING name = lv_struct_name state = 'A' "取激活版本数据 IMPORTING gotstate = DATA(lv_gotstate) EXCEPTIONS illegal_input = 1 others = 2. IF sy-subrc = 0 AND lv_gotstate = 'A'. WRITE: '结构存在且已激活'. ELSE. WRITE: '结构不存在或未激活'. ENDIF.
内容的提问来源于stack exchange,提问作者Manoj Patidar
相关产品推荐
相关产品推荐

