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

接着上一篇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.


测试数据:


EN_DD03L数据下载

结果展示:



猜你喜欢

转载自blog.csdn.net/huanglin6/article/details/80499926