业务场景:
SE11需要建字段多的表,一屏只能粘贴15个,当字段过多时,效率变低。
以下功能可实现上传EXCEL即可创建SE11表。
*&---------------------------------------------------------------------*
*& 包含 ZFID086TOP
*&---------------------------------------------------------------------*
*TABLES:.
TYPES:BEGIN OF ty_output,
slbox TYPE c,
icon TYPE icon-id,
END OF ty_output.
DATA:gt_output TYPE TABLE OF ty_output,
gs_output LIKE LINE OF gt_output.
DATA:gt_dd03l TYPE TABLE OF dd03l,
gs_dd03l LIKE LINE OF gt_dd03l.
*&---------------------------------------------------------------------*
*&DEFINE ALV
*&---------------------------------------------------------------------*
DATA: gv_repid TYPE sy-repid,
gs_layout TYPE lvc_s_layo,
gs_repid TYPE sy-repid,
gt_alv_filedcat TYPE lvc_t_fcat,
gs_alv_filed LIKE lvc_s_fcat.
DATA:gv_table_name TYPE string,
gv_type TYPE string,
gv_message TYPE string,
gv_ztms TYPE i. "拆包条目数
*&---------------------------------------------------------------------*
*& Multi-threading
*&---------------------------------------------------------------------*
DATA:gv_task_name TYPE string,
gv_snd_jobs TYPE i,
gv_open_task_num TYPE i, "启动任务数量
gv_wp TYPE i VALUE '5'. "并发进程数
*&---------------------------------------------------------------------*
*& 包含 ZHRI0001SCN
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS:p_file LIKE rlgrap-filename OBLIGATORY MEMORY ID f1.
PARAMETERS:p_tabna TYPE c LENGTH 32 OBLIGATORY .
PARAMETERS:p_devcl TYPE devclass DEFAULT 'ZHR_DEV' OBLIGATORY .
PARAMETERS:p_requ TYPE trkorr OBLIGATORY .
SELECTION-SCREEN END OF BLOCK b1.
"SELECTION-SCREEN FUNCTION KEY 1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. "弹出选择文件对话框
PERFORM frm_get_file_name.
*-----------------------------------------------------------------------
* AT SELECTION-SCREEN OUTPUT --- PBO
*-----------------------------------------------------------------------
AT SELECTION-SCREEN OUTPUT.
*-----------------------------------------------------------------------
* INITIALIZATION
*-----------------------------------------------------------------------
INITIALIZATION.
PERFORM frm_init.
*-----------------------------------------------------------------------
* START-OF-SELECTION
*-----------------------------------------------------------------------
START-OF-SELECTION.
PERFORM frm_start_init.
PERFORM frm_check.
IF gv_type NE 'E'.
* IF SY-BATCH NE 'X'.
* PERFORM FRM_SET_INDICATOR USING TEXT-T01.
PERFORM frm_get_document.
* ELSE.
* ENDIF.
ENDIF.
*-----------------------------------------------------------------------
* END-OF-SELECTION
*-----------------------------------------------------------------------
END-OF-SELECTION.
IF gv_type NE 'E' AND gv_type NE 'S' AND sy-batch NE 'X'.
PERFORM frm_show.
ELSE.
MESSAGE gv_message TYPE 'I' DISPLAY LIKE gv_type.
ENDIF.
*&---------------------------------------------------------------------*
*& 包含 ZHRI0001F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& FORM FRM_GET_DOCUMENT
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& --> P1 TEXT
*& <-- P2 TEXT
*&---------------------------------------------------------------------*
FORM frm_get_document.
DATA : lv_filename TYPE string,
lt_records TYPE solix_tab,
lv_headerxstring TYPE xstring,
lv_filelength TYPE i.
DATA:lv_tabix TYPE sy-tabix VALUE '1'.
FIELD-SYMBOLS:<fs_excel_data_sheet> TYPE STANDARD TABLE,
<gt_data> TYPE any.
lv_filename = p_file.
*-- Read the Input File
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = lv_filename
filetype = 'BIN'
IMPORTING
filelength = lv_filelength
header = lv_headerxstring
TABLES
data_tab = lt_records
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF sy-subrc IS NOT INITIAL.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
EXPORTING
input_length = lv_filelength
IMPORTING
buffer = lv_headerxstring
TABLES
binary_tab = lt_records
EXCEPTIONS
failed = 1
OTHERS = 2.
IF sy-subrc IS NOT INITIAL.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
DATA : lo_excel_ref TYPE REF TO cl_fdt_xl_spreadsheet .
TRY .
lo_excel_ref = NEW cl_fdt_xl_spreadsheet(
document_name = lv_filename
xdocument = lv_headerxstring ) .
CATCH cx_fdt_excel_core INTO DATA(ls_cx_fdt_excel_core).
DATA(lv_msg) = ls_cx_fdt_excel_core->get_longtext( ).
ENDTRY .
IF lo_excel_ref IS BOUND.
*--GET LIST OF WORKSHEETS
lo_excel_ref->if_fdt_doc_spreadsheet~get_worksheet_names(
IMPORTING
worksheet_names = DATA(lt_worksheets) ).
IF NOT lt_worksheets IS INITIAL.
*-- HEADER TAB
READ TABLE lt_worksheets INTO DATA(lv_woksheetname) INDEX lv_tabix.
DATA(lo_data_ref) = lo_excel_ref->if_fdt_doc_spreadsheet~get_itab_from_worksheet(
lv_woksheetname ).
*-- EXCEL WORK SHEET DATA IN DYANMIC INTERNAL TABLE
ASSIGN lo_data_ref->* TO <fs_excel_data_sheet>.
**-- ITEM TAB DETAILS
* READ TABLE lt_worksheets INTO lv_woksheetname INDEX 2.
*
* lo_data_ref = lo_excel_ref->if_fdt_doc_spreadsheet~get_itab_from_worksheet(
* lv_woksheetname ).
**-- EXCEL WORK SHEET DATA IN DYANMIC INTERNAL TABLE
* ASSIGN lo_data_ref->* TO <gt_data>.
ENDIF.
ENDIF.
LOOP AT <fs_excel_data_sheet> ASSIGNING FIELD-SYMBOL(<fs_excel_data_sheet_wa>) .
CHECK sy-tabix NE '1'.
ASSIGN COMPONENT 'A' OF STRUCTURE <fs_excel_data_sheet_wa> TO FIELD-SYMBOL(<fs_value>).
gs_dd03l-tabname = <fs_value>.
ASSIGN COMPONENT 'B' OF STRUCTURE <fs_excel_data_sheet_wa> TO <fs_value>.
gs_dd03l-fieldname = <fs_value>.
ASSIGN COMPONENT 'C' OF STRUCTURE <fs_excel_data_sheet_wa> TO <fs_value>.
gs_dd03l-keyflag = <fs_value>.
ASSIGN COMPONENT 'D' OF STRUCTURE <fs_excel_data_sheet_wa> TO <fs_value>.
gs_dd03l-notnull = <fs_value>.
ASSIGN COMPONENT 'E' OF STRUCTURE <fs_excel_data_sheet_wa> TO <fs_value>.
gs_dd03l-rollname = <fs_value>.
ASSIGN COMPONENT 'F' OF STRUCTURE <fs_excel_data_sheet_wa> TO <fs_value>.
gs_dd03l-as4local = <fs_value>.
ASSIGN COMPONENT 'G' OF STRUCTURE <fs_excel_data_sheet_wa> TO <fs_value>.
gs_dd03l-comptype = <fs_value>.
APPEND gs_dd03l TO gt_dd03l.
ENDLOOP.
ENDFORM..
*&---------------------------------------------------------------------*
*& FORM FRM_SHOW
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& --> P1 TEXT
*& <-- P2 TEXT
*&---------------------------------------------------------------------*
FORM frm_show .
PERFORM frm_set_fieldcat.
PERFORM frm_set_layout.
PERFORM frm_show_alv.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& --> P1 TEXT
*& <-- P2 TEXT
*&---------------------------------------------------------------------*
FORM frm_set_fieldcat .
CLEAR:gt_alv_filedcat.
PERFORM frm_fill_fieldcat USING 'TABNAME' TEXT-001 'X' '' '' '' ''."
PERFORM frm_fill_fieldcat USING 'FIELDNAME' TEXT-002 'X' '' '' '' ''.
PERFORM frm_fill_fieldcat USING 'KEYFLAG' TEXT-003 'X' '' '' '' ''.
PERFORM frm_fill_fieldcat USING 'NOTNULL' TEXT-004 'X' '' '' '' ''.
PERFORM frm_fill_fieldcat USING 'ROLLNAME' TEXT-005 'X' '' '' '' ''.
PERFORM frm_fill_fieldcat USING 'AS4LOCAL' TEXT-006 'X' '' '' '' ''.
PERFORM frm_fill_fieldcat USING 'COMPTYPE' TEXT-007 'X' '' '' '' ''.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_layout .
gs_repid = sy-repid.
gs_layout-zebra = 'X'.
gs_layout-cwidth_opt = 'X'.
* gs_layout-box_fname = 'SLBOX'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SHOW_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_show_alv .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = gs_repid
i_save = 'A'
it_fieldcat_lvc = gt_alv_filedcat[]
i_grid_title = CONV lvc_title( |#总条目数:{ lines( gt_dd03l ) }| )
* it_sort_lvc = gs_sortinfo[]
* i_grid_settings = gs_glay
is_layout_lvc = gs_layout
* it_events = gs_event
i_callback_pf_status_set = 'PF_STATUS'
i_callback_user_command = 'USER_COMMAND'
TABLES
t_outtab = gt_dd03l
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_FILL_FIELDCAT
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& --> FIELDNAME
*& --> COLTEXT
*& --> KEY
*& --> REF_TABLE
*& --> REF_FIELD
*& --> OUTPUTLEN
*& --> NO_ZERO
*&---------------------------------------------------------------------*
FORM frm_fill_fieldcat USING p_fieldname
p_coltext
p_key
p_ref_table
p_ref_field
p_outputlen
p_no_zero.
DATA:ls_alv_filed LIKE gs_alv_filed.
ls_alv_filed-fieldname = p_fieldname.
ls_alv_filed-coltext = p_coltext.
ls_alv_filed-outputlen = p_outputlen.
ls_alv_filed-no_zero = p_no_zero.
ls_alv_filed-key = p_key.
ls_alv_filed-ref_table = p_ref_table.
ls_alv_filed-ref_field = p_ref_field.
APPEND ls_alv_filed TO gt_alv_filedcat.
ENDFORM.
FORM pf_status USING rt_extab TYPE slis_t_extab.
DATA fcode TYPE rsmpe-func.
SET PF-STATUS 'STD' EXCLUDING rt_extab.
ENDFORM.
FORM user_command USING r_ucomm TYPE sy-ucomm
rs_selfield TYPE slis_selfield.
DATA:lr_grid TYPE REF TO cl_gui_alv_grid.
DATA:lv_tabix TYPE sy-tabix,
lv_indicator_text TYPE string.
DATA:lv_error TYPE c,
lv_message TYPE string,
lv_button TYPE c.
* 将界面中的选择数据更新到内表中
*=====GET_GLOBALS_FROM_SLVC_FULLSCR START==========
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lr_grid.
CALL METHOD lr_grid->check_changed_data.
*=====GET_GLOBALS_FROM_SLVC_FULLSCR END============
CASE r_ucomm.
WHEN '&IC1'. "ALV双击事件
PERFORM frm_double_click USING rs_selfield-tabindex.
WHEN 'CLEAR'.
PERFORM frm_set_indicator USING TEXT-t02.
PERFORM frm_get_button USING TEXT-t10 CHANGING lv_button.
IF lv_error EQ 'X'.
MESSAGE lv_message TYPE 'I' DISPLAY LIKE 'E'.
ENDIF.
WHEN 'ZSAVE'.
PERFORM frm_create_table.
WHEN 'BACK'.
CLEAR:gt_output,gt_alv_filedcat.
LEAVE TO SCREEN 0.
WHEN OTHERS.
ENDCASE.
* RS_SELFIELD-ROW_STABLE = 'X'.
* RS_SELFIELD-COL_STABLE = 'X'.
rs_selfield-refresh = 'X'.
ENDFORM. "USER_COMMAND
*&---------------------------------------------------------------------*
*& Form FRM_INIT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_init .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_check .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_INDICATOR
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> TEXT_T01
*&---------------------------------------------------------------------*
FORM frm_set_indicator USING p_text_t01.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = p_text_t01. "text for process
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DOUBLE_CLICK
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_double_click USING p_index.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SHOW_SALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LT_BSIS
*&---------------------------------------------------------------------*
FORM frm_show_salv TABLES p_lt_table.
DATA: lo_alv TYPE REF TO cl_salv_table,
lr_functions TYPE REF TO cl_salv_functions_list.
cl_salv_table=>factory( IMPORTING r_salv_table = lo_alv
CHANGING t_table = p_lt_table[] ).
lr_functions = lo_alv->get_functions( ).
lr_functions->set_all( 'X' ).
lo_alv->set_screen_status(
pfstatus = 'STANDARD_FULLSCREEN'
report = 'SAPLKKBL'
set_functions = lo_alv->c_functions_all ).
lo_alv->set_screen_popup(
start_column = 1
end_column = 100
start_line = 1
end_line = 20 ).
lo_alv->display( ).
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SAVE_MESSAGE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_save_message .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_START_INIT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_start_init .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_BUTTON
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> TEXT_T10
*& <-- LV_BUTTON
*&---------------------------------------------------------------------*
FORM frm_get_button USING lv_text CHANGING p_lv_button.
DATA: lv_answer.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
text_question = lv_text
text_button_1 = TEXT-m02
icon_button_1 = 'ICON_OKAY'
text_button_2 = TEXT-m03
icon_button_2 = 'ICON_CANCEL'
default_button = '1'
display_cancel_button = ''
IMPORTING
answer = lv_answer
EXCEPTIONS
text_not_found = 1.
p_lv_button = lv_answer.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_get_file_name
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_file_name .
DATA:l_obj TYPE REF TO cl_gui_frontend_services,
it_file TYPE filetable WITH HEADER LINE,
g_rc TYPE i.
CREATE OBJECT l_obj.
CALL METHOD l_obj->file_open_dialog
EXPORTING
file_filter = '*.XLS;*.XLSX;*.TXT'
initial_directory = 'C:\DATA'
CHANGING
file_table = it_file[]
rc = g_rc.
READ TABLE it_file INDEX 1.
p_file = it_file-filename.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_create_table
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_create_table .
DATA:ls_return TYPE TABLE OF bapireturn.
CALL FUNCTION 'ZFM_CREATE_TABLE'
EXPORTING
tabname = p_tabna
tabclass = 'TRANSP'
tabkat = '0'
tabart = 'APPL1'
pufferung = 'X'
contflag = 'A'
mainflag = ''
buffallow = 'X'
schfeldanz = '000'
devclass = p_devcl
request_wb = p_requ
TABLES
en_dd03l = gt_dd03l
return = ls_return.
ENDFORM.
FUNCTION ZFM_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.