最近在解决用户账号问题的时候,需要通过ABAP程序创建透明表,查询了相关资料,总结如下。

通过ABAP程序创建透明表,主要利用了4个函数:

DDIF_TABL_ACTIVATE: 激活透明表

GOX_GEN_TABLE_STD: 生成透明表

DDIF_TABL_PUT: 设置表的相关信息

DDIF_TABL_GET: 获得表的相关信息

通过ABAP程序创建透明表-LMLPHP

参数说明
     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 = ''.
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 = ''.
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 = ''.
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 =
OTHERS = .
IF sy-subrc <> .
RETURN.
ENDIF. ls_dd02v-mainflag = 'X'.
CALL FUNCTION 'DDIF_TABL_PUT'
EXPORTING
name = lv_ddobjname
dd02v_wa = ls_dd02v
EXCEPTIONS
tabl_not_found =
name_inconsistent =
tabl_inconsistent =
put_failure =
put_refused =
OTHERS = .
IF sy-subrc <> .
RETURN.
ENDIF. * active table
CALL FUNCTION 'DDIF_TABL_ACTIVATE'
EXPORTING
name = lv_ddobjname
auth_chk = ' '. CHECK sy-subrc = . WRITE:/ 'Table: ', lv_ddobjname, ' generated successfully'.

输入透明表名运行,即可创建成功。

通过ABAP程序创建透明表-LMLPHP

通过ABAP程序创建透明表-LMLPHP

进入SE11查看结果:

通过ABAP程序创建透明表-LMLPHP

通过ABAP程序创建透明表-LMLPHP

05-11 18:07