接着前一篇的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.
结果展示: