接着前一篇的​​SAP abap使用程序批量创建域​​,接下来就是用我们批量创建好的域来创建数据元素了。

原理和创建域的玩法类似

附上封装好的函数代码。


FUNCTION ZZF_CREATE_ELEMENT.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" REFERENCE(ROLLNAME) TYPE ROLLNAME
*" REFERENCE(DESCRIPTION) TYPE AS4TEXT
*" REFERENCE(DDLANGUAGE) TYPE DDLANGUAGE OPTIONAL
*" REFERENCE(DOMNAME) TYPE DOMNAME OPTIONAL
*" REFERENCE(ROUTPUTLEN) TYPE DDLENG OPTIONAL
*" REFERENCE(MEMORYID) TYPE MEMORYID OPTIONAL
*" REFERENCE(REPTEXT) TYPE REPTEXT OPTIONAL
*" REFERENCE(SCRTEXT_S) TYPE SCRTEXT_S OPTIONAL
*" REFERENCE(SCRTEXT_M) TYPE SCRTEXT_M OPTIONAL
*" REFERENCE(SCRTEXT_L) TYPE SCRTEXT_L OPTIONAL
*" REFERENCE(DEVCLASS) TYPE DEVCLASS DEFAULT '$TMP'
*" REFERENCE(REQUEST_WB) TYPE TRKORR OPTIONAL
*" TABLES
*" RETURN TYPE BAPIRETTAB
*"----------------------------------------------------------------------

DATA: LT_NEW_OBJECT TYPE COMT_GOX_DEF_HEADER,
LT_OLD_OBJECT LIKE LT_NEW_OBJECT,
LV_ELEMENT_NAME TYPE CHAR32,
LV_DEVCLASS TYPE DEVCLASS,
LV_REQUEST_WB TYPE TRKORR,
LS_NEW_OBJECT LIKE LINE OF LT_NEW_OBJECT,
LS_NEW_OBJECT_DETAILS TYPE LINE OF COMT_GOX_TABLE_ENTRY_FIELDS,
ET_BAPIRETURN TYPE BAPIRETTAB,
ET_TRANSPORT TYPE COMT_GOX_TRANS_OBJECT.



LV_ELEMENT_NAME = ROLLNAME.
LV_REQUEST_WB = REQUEST_WB.
MOVE DEVCLASS TO LV_DEVCLASS.

MOVE 'ELEMENT' TO LS_NEW_OBJECT-OBJECT_TYPE.
MOVE ROLLNAME TO LS_NEW_OBJECT-OBJECT_NAME.

TRY.
DATA(LV_GUID) = CL_SYSTEM_UUID=>IF_SYSTEM_UUID_STATIC~CREATE_UUID_C32( ).
CATCH CX_UUID_ERROR .
ENDTRY.

MOVE LV_GUID TO LS_NEW_OBJECT-KEY_GUID .
DATA(LV_PARENT_GUID) = LS_NEW_OBJECT-KEY_GUID.
MOVE 'DESCRIPTION' TO LS_NEW_OBJECT_DETAILS-FIELDNAME."描述
MOVE DDLANGUAGE TO LS_NEW_OBJECT_DETAILS-FIELDVALUE.
APPEND LS_NEW_OBJECT_DETAILS TO LS_NEW_OBJECT-DETAILS.

CLEAR LS_NEW_OBJECT_DETAILS.
MOVE 'DOMNAME' TO LS_NEW_OBJECT_DETAILS-FIELDNAME ."
MOVE DOMNAME TO LS_NEW_OBJECT_DETAILS-FIELDVALUE .
APPEND LS_NEW_OBJECT_DETAILS TO LS_NEW_OBJECT-DETAILS.

CLEAR LS_NEW_OBJECT_DETAILS.
MOVE 'DDLANGUAGE' TO LS_NEW_OBJECT_DETAILS-FIELDNAME .
IF DDLANGUAGE IS INITIAL .
MOVE DDLANGUAGE TO LS_NEW_OBJECT_DETAILS-FIELDVALUE .
ELSE.
MOVE SY-LANGU TO LS_NEW_OBJECT_DETAILS-FIELDVALUE .
ENDIF.
APPEND LS_NEW_OBJECT_DETAILS TO LS_NEW_OBJECT-DETAILS.

CLEAR LS_NEW_OBJECT_DETAILS.
MOVE 'ROUTPUTLEN' TO LS_NEW_OBJECT_DETAILS-FIELDNAME ."
MOVE ROUTPUTLEN TO LS_NEW_OBJECT_DETAILS-FIELDVALUE .
APPEND LS_NEW_OBJECT_DETAILS TO LS_NEW_OBJECT-DETAILS.

*CLEAR LS_NEW_OBJECT_DETAILS.
*MOVE 'MEMORYID' TO LS_NEW_OBJECT_DETAILS-FIELDNAME ."
*MOVE MEMORYID TO LS_NEW_OBJECT_DETAILS-FIELDVALUE .
*APPEND LS_NEW_OBJECT_DETAILS TO LS_NEW_OBJECT-DETAILS.

CLEAR LS_NEW_OBJECT_DETAILS.
MOVE 'REPTEXT' TO LS_NEW_OBJECT_DETAILS-FIELDNAME ."
MOVE REPTEXT TO LS_NEW_OBJECT_DETAILS-FIELDVALUE .
APPEND LS_NEW_OBJECT_DETAILS TO LS_NEW_OBJECT-DETAILS.

CLEAR LS_NEW_OBJECT_DETAILS.
MOVE 'HEADLEN' TO LS_NEW_OBJECT_DETAILS-FIELDNAME ."
MOVE STRLEN( REPTEXT ) TO LS_NEW_OBJECT_DETAILS-FIELDVALUE .
APPEND LS_NEW_OBJECT_DETAILS TO LS_NEW_OBJECT-DETAILS.

CLEAR LS_NEW_OBJECT_DETAILS.
MOVE 'SCRTEXT_S' TO LS_NEW_OBJECT_DETAILS-FIELDNAME ."
MOVE SCRTEXT_S TO LS_NEW_OBJECT_DETAILS-FIELDVALUE .
APPEND LS_NEW_OBJECT_DETAILS TO LS_NEW_OBJECT-DETAILS.

CLEAR LS_NEW_OBJECT_DETAILS.
MOVE 'SCRLEN1' TO LS_NEW_OBJECT_DETAILS-FIELDNAME ."
MOVE STRLEN( SCRTEXT_S ) TO LS_NEW_OBJECT_DETAILS-FIELDVALUE .
APPEND LS_NEW_OBJECT_DETAILS TO LS_NEW_OBJECT-DETAILS.

CLEAR LS_NEW_OBJECT_DETAILS.
MOVE 'SCRTEXT_M' TO LS_NEW_OBJECT_DETAILS-FIELDNAME ."
MOVE SCRTEXT_M TO LS_NEW_OBJECT_DETAILS-FIELDVALUE .
APPEND LS_NEW_OBJECT_DETAILS TO LS_NEW_OBJECT-DETAILS.

CLEAR LS_NEW_OBJECT_DETAILS.
MOVE 'SCRLEN2' TO LS_NEW_OBJECT_DETAILS-FIELDNAME ."
MOVE STRLEN( SCRTEXT_M ) TO LS_NEW_OBJECT_DETAILS-FIELDVALUE .
APPEND LS_NEW_OBJECT_DETAILS TO LS_NEW_OBJECT-DETAILS.

CLEAR LS_NEW_OBJECT_DETAILS.
MOVE 'SCRTEXT_L' TO LS_NEW_OBJECT_DETAILS-FIELDNAME ."
MOVE SCRTEXT_L TO LS_NEW_OBJECT_DETAILS-FIELDVALUE .
APPEND LS_NEW_OBJECT_DETAILS TO LS_NEW_OBJECT-DETAILS.

CLEAR LS_NEW_OBJECT_DETAILS.
MOVE 'SCRLEN3' TO LS_NEW_OBJECT_DETAILS-FIELDNAME ."
MOVE STRLEN( SCRTEXT_L ) TO 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.


MOVE DEVCLASS TO LV_DEVCLASS .
MOVE REQUEST_WB TO LV_REQUEST_WB .






CALL FUNCTION 'GOX_GEN_DTEL_STD'
EXPORTING
IV_OBJECT_NAME = LV_ELEMENT_NAME
IT_OBJECT_NEW = LT_NEW_OBJECT
IT_OBJECT_OLD = LT_OLD_OBJECT
IV_DEVCLASS = LV_DEVCLASS
IV_REQUEST_WB = LV_REQUEST_WB
IMPORTING
ET_BAPIRETURN = ET_BAPIRETURN
ET_TRANSPORT = ET_TRANSPORT
.

APPEND LINES OF ET_BAPIRETURN TO RETURN.
DATA: LV_DDOBJNAME TYPE DDOBJNAME,
LS_DD02V TYPE DD02V.

LV_DDOBJNAME = LV_ELEMENT_NAME.

DATA GOTSTATE TYPE DDGOTSTATE.
DATA DD04V_WA TYPE DD04V.
DATA TPARA_WA TYPE TPARA.



CALL FUNCTION 'DDIF_DTEL_GET'
EXPORTING
NAME = LV_DDOBJNAME
STATE = 'A'
LANGU = SY-LANGU
IMPORTING
GOTSTATE = GOTSTATE
DD04V_WA = DD04V_WA
TPARA_WA = TPARA_WA
EXCEPTIONS
ILLEGAL_INPUT = 1
.


CALL FUNCTION 'DDIF_DTEL_PUT'
EXPORTING
NAME = LV_DDOBJNAME
DD04V_WA = DD04V_WA
EXCEPTIONS
DTEL_NOT_FOUND = 1
NAME_INCONSISTENT = 2
DTEL_INCONSISTENT = 3
PUT_FAILURE = 4
PUT_REFUSED = 5
.

IF SY-SUBRC NE 0.
RETURN.
ENDIF.

* ACTIVE TABLE
CALL FUNCTION 'DDIF_DTEL_ACTIVATE'
EXPORTING
NAME = LV_DDOBJNAME
AUTH_CHK = ' '
.

CHECK SY-SUBRC = 0.




ENDFUNCTION.

结果展示:

SAP abap使用程序批量创建数据元素_ABAP