通过ABAP程序创建透明表
Posted 逆风的方向,更适合飞翔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过ABAP程序创建透明表相关的知识,希望对你有一定的参考价值。
最近在解决用户账号问题的时候,需要通过ABAP程序创建透明表,查询了相关资料,总结如下。
通过ABAP程序创建透明表,主要利用了4个函数:
DDIF_TABL_ACTIVATE: 激活透明表
GOX_GEN_TABLE_STD: 生成透明表
DDIF_TABL_PUT: 设置表的相关信息
DDIF_TABL_GET: 获得表的相关信息
参数说明
Import:
NAME: 数据库表的名字
STATE: 状态
STATE = ‘A’ (read the active version)
STATE = ‘M’ (read the latest version)
LANGU: 语言设定, 默认sy-langu
Export:
GOTSTATE: 状态信息
DD02V_WA: 表头
DD09L_WA: 表表的技术信息
Tables:
DD03P_TAB: 表的字段列表
DD05M_TAB: 表的外键字段
DD08V_TAB: 表的外键
DD12V_TAB: 表索引
DD17V_TAB: 表的索引字段
DD35V_TAB: 检索help相关
DD36M_TAB: 检索help相关
代码:
REPORT z_create_table. PARAMETERS: tabname TYPE char32 OBLIGATORY. DATA: lt_new_object TYPE comt_gox_def_header, lt_old_object LIKE lt_new_object, lv_dbtab1_name TYPE char32, ls_new_object LIKE LINE OF lt_new_object, ls_new_object_details TYPE LINE OF comt_gox_table_entry_fields, lt_returntab TYPE bapirettab, ls_return LIKE LINE OF lt_returntab. ls_new_object-object_type = \'TABLE\'. ls_new_object-object_name = tabname. TRY. data(lv_guid) = cl_system_uuid=>if_system_uuid_static~create_uuid_c32( ). CATCH cx_uuid_error . ENDTRY. * technical setting ls_new_object-key_guid = lv_guid. data(lv_parent_guid) = ls_new_object-key_guid. ls_new_object_details-fieldname = \'TABCLASS\'. ls_new_object_details-fieldvalue = \'TRANSP\'. APPEND ls_new_object_details TO ls_new_object-details. CLEAR ls_new_object_details. ls_new_object_details-fieldname = \'TABKAT\'. ls_new_object_details-fieldvalue = \'0\'. APPEND ls_new_object_details TO ls_new_object-details. CLEAR ls_new_object_details. ls_new_object_details-fieldname = \'TABART\'. ls_new_object_details-fieldvalue = \'APPL2\'. APPEND ls_new_object_details TO ls_new_object-details. CLEAR ls_new_object_details. ls_new_object_details-fieldname = \'PUFFERUNG\'. ls_new_object_details-fieldvalue = \'X\'. APPEND ls_new_object_details TO ls_new_object-details. CLEAR ls_new_object_details. ls_new_object_details-fieldname = \'CONTFLAG\'. ls_new_object_details-fieldvalue = \'S\'. APPEND ls_new_object_details TO ls_new_object-details. CLEAR ls_new_object_details. ls_new_object_details-fieldname = \'MAINFLAG\'. ls_new_object_details-fieldvalue = \'X\'. APPEND ls_new_object_details TO ls_new_object-details. CLEAR ls_new_object_details. ls_new_object_details-fieldname = \'BUFFALLOW\'. ls_new_object_details-fieldvalue = \'X\'. APPEND ls_new_object_details TO ls_new_object-details. CLEAR ls_new_object_details. ls_new_object_details-fieldname = \'SCHFELDANZ\'. ls_new_object_details-fieldvalue = \'0\'. APPEND ls_new_object_details TO ls_new_object-details. CLEAR ls_new_object_details. APPEND ls_new_object TO lt_new_object. CLEAR ls_new_object. ls_new_object-object_type = \'TABLE_FIELD\'. TRY. lv_guid = cl_system_uuid=>if_system_uuid_static~create_uuid_c32( ). CATCH cx_uuid_error . ENDTRY. ls_new_object-key_guid = lv_guid. ls_new_object-parent_key = lv_parent_guid. lv_parent_guid = lv_guid. ls_new_object-object_name = \'CODE_VALUE\'. "field name ls_new_object_details-fieldname = \'POSITION\'. ls_new_object_details-fieldvalue = \'1\'. APPEND ls_new_object_details TO ls_new_object-details. CLEAR ls_new_object_details. ls_new_object_details-fieldname = \'KEYFLAG\'. "Key ls_new_object_details-fieldvalue = \'X\'. APPEND ls_new_object_details TO ls_new_object-details. CLEAR ls_new_object_details. ls_new_object_details-fieldname = \'NOTNULL\'. "initial ls_new_object_details-fieldvalue = \'X\'. APPEND ls_new_object_details TO ls_new_object-details. CLEAR ls_new_object_details. ls_new_object_details-fieldname = \'ROLLNAME\'. ls_new_object_details-fieldvalue = \'COMT_PRODUCT_ID\'. "data element APPEND ls_new_object_details TO ls_new_object-details. CLEAR ls_new_object_details. APPEND ls_new_object TO lt_new_object. CLEAR ls_new_object. REFRESH lt_returntab. CLEAR lv_parent_guid. lv_dbtab1_name = tabname. CALL FUNCTION \'GOX_GEN_TABLE_STD\' EXPORTING iv_object_name = lv_dbtab1_name it_object_new = lt_new_object it_object_old = lt_old_object iv_devclass = \'$TMP\' "local IMPORTING et_bapireturn = lt_returntab. CHECK lt_returntab IS INITIAL. DATA: lv_ddobjname TYPE ddobjname, ls_dd02v TYPE dd02v. lv_ddobjname = lv_dbtab1_name. CALL FUNCTION \'DDIF_TABL_GET\' EXPORTING name = lv_ddobjname state = \'A\' langu = sy-langu IMPORTING dd02v_wa = ls_dd02v EXCEPTIONS illegal_input = 1 OTHERS = 2. IF sy-subrc <> 0. RETURN. ENDIF. ls_dd02v-mainflag = \'X\'. CALL FUNCTION \'DDIF_TABL_PUT\' EXPORTING name = lv_ddobjname dd02v_wa = ls_dd02v EXCEPTIONS tabl_not_found = 1 name_inconsistent = 2 tabl_inconsistent = 3 put_failure = 4 put_refused = 5 OTHERS = 6. IF sy-subrc <> 0. RETURN. ENDIF. * active table CALL FUNCTION \'DDIF_TABL_ACTIVATE\' EXPORTING name = lv_ddobjname auth_chk = \' \'. CHECK sy-subrc = 0. WRITE:/ \'Table: \', lv_ddobjname, \' generated successfully\'.
输入透明表名运行,即可创建成功。
进入SE11查看结果:
以上是关于通过ABAP程序创建透明表的主要内容,如果未能解决你的问题,请参考以下文章