SE11字段过多时怎么快速建表

业务场景:

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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值