接着上一篇​​SAP abap使用程序批量创建数据元素​​的参考,接下来创建数据自建表



FUNCTION ZZF_CREATE_TABLE.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" REFERENCE(TABNAME) TYPE CHAR32
*" REFERENCE(TABCLASS) TYPE TABCLASS
*" REFERENCE(TABKAT) TYPE TABKAT
*" REFERENCE(TABART) TYPE TABART
*" REFERENCE(PUFFERUNG) TYPE PUFFERUNG
*" REFERENCE(CONTFLAG) TYPE CONTFLAG
*" REFERENCE(MAINFLAG) TYPE MAINTFLAG
*" REFERENCE(BUFFALLOW) TYPE BUFALLOW
*" REFERENCE(SCHFELDANZ) TYPE SCHFELDANZ
*" REFERENCE(DEVCLASS) TYPE DEVCLASS DEFAULT '$TMP'
*" REFERENCE(REQUEST_WB) TYPE TRKORR OPTIONAL
*" TABLES
*" EN_DD03L STRUCTURE DD03L
*" RETURN STRUCTURE BAPIRETURN
*"----------------------------------------------------------------------

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.


DATA IV_REQUEST_WB TYPE TRKORR.
DATA ET_BAPIRETURN TYPE BAPIRETTAB.
DATA ET_TRANSPORT TYPE COMT_GOX_TRANS_OBJECT.
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 = TABCLASS.
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 = TABKAT.
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 = TABART.
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 = PUFFERUNG.
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 = CONTFLAG.
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 = MAINFLAG.
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 = BUFFALLOW.
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 = SCHFELDANZ.
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.



LOOP AT EN_DD03L ASSIGNING FIELD-SYMBOL(<FW_DD03L>).
DATA(L_TABIX) = SY-TABIX.
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 = <FW_DD03L>-FIELDNAME. "FIELD NAME
LS_NEW_OBJECT-POSITION = L_TABIX. "SY-TABIX

LS_NEW_OBJECT_DETAILS-FIELDNAME = 'FIELDNAME'.
LS_NEW_OBJECT_DETAILS-FIELDVALUE = <FW_DD03L>-FIELDNAME.
APPEND LS_NEW_OBJECT_DETAILS TO LS_NEW_OBJECT-DETAILS.

LS_NEW_OBJECT_DETAILS-FIELDNAME = 'AS4LOCAL'.
LS_NEW_OBJECT_DETAILS-FIELDVALUE = 'A'."<FW_DD03L>-AS4LOCAL.
SHIFT LS_NEW_OBJECT_DETAILS-FIELDVALUE LEFT DELETING LEADING SPACE.
APPEND LS_NEW_OBJECT_DETAILS TO LS_NEW_OBJECT-DETAILS.

LS_NEW_OBJECT_DETAILS-FIELDNAME = 'POSITION'.
LS_NEW_OBJECT_DETAILS-FIELDVALUE = L_TABIX.
SHIFT LS_NEW_OBJECT_DETAILS-FIELDVALUE LEFT DELETING LEADING SPACE.
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 = <FW_DD03L>-KEYFLAG.
APPEND LS_NEW_OBJECT_DETAILS TO LS_NEW_OBJECT-DETAILS.

CLEAR LS_NEW_OBJECT_DETAILS.
LS_NEW_OBJECT_DETAILS-FIELDNAME = 'NOTNULL'. "NOTNULL
LS_NEW_OBJECT_DETAILS-FIELDVALUE = <FW_DD03L>-NOTNULL.
APPEND LS_NEW_OBJECT_DETAILS TO LS_NEW_OBJECT-DETAILS.

CLEAR LS_NEW_OBJECT_DETAILS.
LS_NEW_OBJECT_DETAILS-FIELDNAME = 'ROLLNAME'. "NOTNULL
LS_NEW_OBJECT_DETAILS-FIELDVALUE = <FW_DD03L>-ROLLNAME.
APPEND LS_NEW_OBJECT_DETAILS TO LS_NEW_OBJECT-DETAILS.

CLEAR LS_NEW_OBJECT_DETAILS.
LS_NEW_OBJECT_DETAILS-FIELDNAME = 'COMPTYPE'. "NOTNULL
LS_NEW_OBJECT_DETAILS-FIELDVALUE = 'E'."<FW_DD03L>-COMPTYPE.
APPEND LS_NEW_OBJECT_DETAILS TO LS_NEW_OBJECT-DETAILS.


"使用内置类型创建字段
* CLEAR LS_NEW_OBJECT_DETAILS.
* LS_NEW_OBJECT_DETAILS-FIELDNAME = 'DATATYPE'. "KEY
* LS_NEW_OBJECT_DETAILS-FIELDVALUE = <FW_DD03L>-DATATYPE.
* APPEND LS_NEW_OBJECT_DETAILS TO LS_NEW_OBJECT-DETAILS.
*
* CLEAR LS_NEW_OBJECT_DETAILS.
* LS_NEW_OBJECT_DETAILS-FIELDNAME = 'LENG'. "KEY
* LS_NEW_OBJECT_DETAILS-FIELDVALUE = <FW_DD03L>-LENG.
* 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.
ENDLOOP.


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 = DEVCLASS "LOCAL
IV_REQUEST_WB = REQUEST_WB
IMPORTING
ET_BAPIRETURN = ET_BAPIRETURN
ET_TRANSPORT = ET_TRANSPORT
.
APPEND LINES OF ET_BAPIRETURN TO RETURN.
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.

ENDFUNCTION.


测试数据:

SAP abap使用程序批量创建自建表_本地接口

​EN_DD03L数据下载​

结果展示:

SAP abap使用程序批量创建自建表_ABAP_02