通過SAP函數組GOX_OBJECTS_GENERATE中的函數創建數據對象(域,數據元素,表)

 

*&---------------------------------------------------------------------*
*& Report ZRCP10
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zrcp10.

*PARAMETERS :DEVCLASS TYPE DEVCLASS DEFAULT '$TMP',
*      IV_REQUEST_WB TYPE  TRKORR,
*      DOMANAME TYPE DOMNAME OBLIGATORY,
*      DDLANGUAGE TYPE DDLANGUAGE,

CLASS:zcl_dynamic_operate DEFINITION.
  PUBLIC SECTION.
*  TABLES DD07V.
    CLASS-METHODS:
    "DD07V
      create_domain IMPORTING
                              REFERENCE(devclass)      TYPE  devclass DEFAULT '$TMP'   "包
                              REFERENCE(iv_request_wb) TYPE  trkorr OPTIONAL         "請求號
                              REFERENCE(domaname)      TYPE  domname                    "域名
                              REFERENCE(description)   TYPE  comt_gox_fieldvalue     "域描述
                              REFERENCE(ddlanguage)    TYPE  ddlanguage DEFAULT sy-langu      "語言
                              REFERENCE(datatype)      TYPE  datatype_d                 "基本類型
                              REFERENCE(leng)          TYPE  leng                       "長度
                              REFERENCE(outlen)        TYPE  outputlen OPTIONAL       "輸出長度
                              REFERENCE(decimals)      TYPE  decimals OPTIONAL        "精度
                              REFERENCE(lowercase)     TYPE  lowercase OPTIONAL       "是否考慮大小寫
                              REFERENCE(signflag)      TYPE  signflag OPTIONAL        "數值域的符號標誌 作爲域輸出屬性一部分的加/減號
                              REFERENCE(valexi)        TYPE  valexi OPTIONAL          "是否存在固定值
                              REFERENCE(convexit)      TYPE  convexit OPTIONAL         "轉換例程
                              REFERENCE(it_dd07v)      TYPE    dd07vtab  " DD07T         "固定值表
                    RETURNING VALUE(return)            TYPE  mewi_t_return," BAPIRETURN. "返回消息
      "dd04v
      create_element IMPORTING
                               REFERENCE(rollname)    TYPE  rollname
                               REFERENCE(description) TYPE  as4text
                               REFERENCE(ddlanguage)  TYPE  ddlanguage DEFAULT sy-langu
                               REFERENCE(domname)     TYPE  domname OPTIONAL
                               REFERENCE(routputlen)  TYPE  ddleng OPTIONAL
                               REFERENCE(memoryid)    TYPE  memoryid OPTIONAL
                               VALUE(reptext)         TYPE  reptext OPTIONAL
                               VALUE(scrtext_s)       TYPE  scrtext_s OPTIONAL
                               VALUE(scrtext_m)       TYPE  scrtext_m OPTIONAL
                               VALUE(scrtext_l)       TYPE  scrtext_l OPTIONAL
                               REFERENCE(devclass)    TYPE  devclass DEFAULT '$TMP'
                               REFERENCE(request_wb)  TYPE  trkorr OPTIONAL
                     RETURNING VALUE(return)          TYPE  mewi_t_return,
      "DD02V
      create_table   IMPORTING
                               REFERENCE(tabname)    TYPE  char32
                               REFERENCE(tabclass)   TYPE  tabclass DEFAULT 'TRANSP'
                               REFERENCE(tabkat)     TYPE  tabkat DEFAULT '0'
                               REFERENCE(tabart)     TYPE  tabart DEFAULT 'APPL0'
                               REFERENCE(pufferung)  TYPE  pufferung DEFAULT ''
                               REFERENCE(contflag)   TYPE  contflag DEFAULT 'A'
                               REFERENCE(mainflag)   TYPE  maintflag DEFAULT ''
                               REFERENCE(buffallow)  TYPE  bufallow DEFAULT 'N'
                               REFERENCE(schfeldanz) TYPE  schfeldanz DEFAULT 0
                               REFERENCE(devclass)   TYPE  devclass DEFAULT '$TMP'
                               REFERENCE(request_wb) TYPE  trkorr OPTIONAL
                               REFERENCE(it_dd03l)   TYPE fins_cfiny_dd03l  " DD07T         "固定值表
                     RETURNING VALUE(return)         TYPE  mewi_t_return.



ENDCLASS.

*&---------------------------------------------------------------------*
*& Class (Implementation) zcl_dynamic_operate
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
CLASS zcl_dynamic_operate IMPLEMENTATION.
  METHOD create_domain.
    DATA: lt_new_object         TYPE comt_gox_def_header,
          lw_onject_text        TYPE coms_gox_def_text,
          lt_old_object         LIKE lt_new_object,
          lv_doma_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,
          lt_returntab          TYPE bapirettab,
          ls_return             LIKE LINE OF lt_returntab,
          lw_dd07v              LIKE LINE OF it_dd07v,
          ew_return             LIKE LINE OF return.

    IF domaname IS INITIAL OR ( domaname(1) <> 'Z' AND domaname(1) <> 'Y' ).
      ew_return-type = 'E'.
      ew_return-message = '不能創建域名' && domaname.
      RETURN.
    ENDIF.
    lv_doma_name  = domaname.
    lv_request_wb = iv_request_wb.
    MOVE devclass TO lv_devclass.

    CLEAR ls_new_object.
    ls_new_object-object_type = 'DOMA'.
    ls_new_object-object_name = domaname.

    "域描述
    CLEAR lw_onject_text.
    lw_onject_text-language = ddlanguage.
    lw_onject_text-description = description.
    APPEND lw_onject_text TO ls_new_object-object_text.

    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.

    CLEAR ls_new_object_details.
    ls_new_object_details-fieldname = 'DDLANGUAGE'."語言
    ls_new_object_details-fieldvalue = ddlanguage  .
    APPEND ls_new_object_details TO ls_new_object-details.

    CLEAR ls_new_object_details.
    ls_new_object_details-fieldname  = 'DATATYPE'."數據類型
    ls_new_object_details-fieldvalue = datatype.
    APPEND ls_new_object_details TO ls_new_object-details.

    CLEAR ls_new_object_details.
    ls_new_object_details-fieldname = 'LENG'."類型長度
    ls_new_object_details-fieldvalue = leng.
    CONDENSE ls_new_object_details-fieldvalue.
    APPEND ls_new_object_details TO ls_new_object-details.

    CLEAR ls_new_object_details.
    IF outlen IS NOT INITIAL .
      ls_new_object_details-fieldname = 'OUTPUTLEN'."輸出長度 默認和類型長度一致
      ls_new_object_details-fieldvalue = outlen.
      CONDENSE ls_new_object_details-fieldvalue.
      APPEND ls_new_object_details TO ls_new_object-details.
    ENDIF.

    CLEAR ls_new_object_details.
    ls_new_object_details-fieldname = 'DECIMALS'."小數位
    ls_new_object_details-fieldvalue = decimals.
    APPEND ls_new_object_details TO ls_new_object-details.

    CLEAR ls_new_object_details.
    ls_new_object_details-fieldname = 'LOWERCASE'."是否區分大小寫
    ls_new_object_details-fieldvalue = lowercase.
    APPEND ls_new_object_details TO ls_new_object-details.

    CLEAR ls_new_object_details.
    ls_new_object_details-fieldname = 'SIGNFLAG'."符號
    ls_new_object_details-fieldvalue = signflag.
    APPEND ls_new_object_details TO ls_new_object-details.

    CLEAR ls_new_object_details.
    ls_new_object_details-fieldname = 'VALEXI'."是否存在固定值
    ls_new_object_details-fieldvalue = valexi.
    APPEND ls_new_object_details TO ls_new_object-details.

*CLEAR LS_NEW_OBJECT_DETAILS.
*LS_NEW_OBJECT_DETAILS-FIELDNAME = 'CONVEXIT'."轉換歷程
*LS_NEW_OBJECT_DETAILS-FIELDVALUE = 'X'.
*APPEND LS_NEW_OBJECT_DETAILS TO LS_NEW_OBJECT-DETAILS.

    APPEND ls_new_object TO lt_new_object.

    IF it_dd07v IS NOT INITIAL .
      LOOP AT it_dd07v ASSIGNING FIELD-SYMBOL(<fw_dd07v>).
        ls_new_object-object_type = 'DOMA_SET'.
        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.
        "域值

        CLEAR ls_new_object_details.
        ls_new_object_details-fieldname = 'VALPOS'."值關鍵字
        ls_new_object_details-fieldvalue = <fw_dd07v>-valpos.
        APPEND ls_new_object_details TO ls_new_object-details.
        IF <fw_dd07v>-ddtext IS NOT INITIAL .
          CLEAR ls_new_object_details.
          ls_new_object_details-fieldname = 'DDTEXT'."簡短描述
          ls_new_object_details-fieldvalue = <fw_dd07v>-ddtext.
          APPEND ls_new_object_details TO ls_new_object-details.
        ENDIF.

        IF <fw_dd07v>-domvalue_l IS NOT INITIAL .
          CLEAR ls_new_object_details.
          ls_new_object_details-fieldname = 'DOMVALUE_L'."下限值
          ls_new_object_details-fieldvalue = <fw_dd07v>-domvalue_l.
          APPEND ls_new_object_details TO ls_new_object-details.
        ENDIF.
        IF <fw_dd07v>-domvalue_h IS NOT INITIAL .
          CLEAR ls_new_object_details.
          ls_new_object_details-fieldname = 'DOMVALUE_H'."DOMVALUE_H
          ls_new_object_details-fieldvalue = <fw_dd07v>-domvalue_h.
          APPEND ls_new_object_details TO ls_new_object-details.
        ENDIF.

        APPEND ls_new_object TO lt_new_object.
        CLEAR ls_new_object.

      ENDLOOP.
    ENDIF.

    DATA et_bapireturn  TYPE bapirettab.
    DATA et_transport   TYPE comt_gox_trans_object.

    CALL FUNCTION 'GOX_GEN_DOMA_STD'
      EXPORTING
        iv_object_name = lv_doma_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.

*CHECK ET_BAPIRETURN IS INITIAL.

    DATA: lv_ddobjname TYPE ddobjname,
          ls_dd02v     TYPE dd02v.

    lv_ddobjname = lv_doma_name.
    DATA name      TYPE ddobjname.
    DATA state     TYPE ddobjstate.
    DATA langu     TYPE sy-langu.
    DATA gotstate  TYPE ddgotstate.
    DATA dd01v_wa  TYPE dd01v.
    DATA dd07v_tab TYPE STANDARD TABLE OF dd07v.

    CALL FUNCTION 'DDIF_DOMA_GET'
      EXPORTING
        name          = lv_ddobjname
        state         = 'A'
        langu         = sy-langu
      IMPORTING
        gotstate      = gotstate
        dd01v_wa      = dd01v_wa
      TABLES
        dd07v_tab     = dd07v_tab
      EXCEPTIONS
        illegal_input = 1.

*DATA NAME      TYPE DDOBJNAME.
*DATA DD01V_WA  TYPE DD01V.
*DATA DD07V_TAB TYPE STANDARD TABLE OF DD07V.
*
    CALL FUNCTION 'DDIF_DOMA_PUT'
      EXPORTING
        name              = lv_ddobjname
        dd01v_wa          = dd01v_wa
      TABLES
        dd07v_tab         = dd07v_tab
      EXCEPTIONS
        doma_not_found    = 1
        name_inconsistent = 2
        doma_inconsistent = 3
        put_failure       = 4
        put_refused       = 5.
    IF sy-subrc NE 0.
      RETURN.
    ENDIF.

* ACTIVE TABLE
    CALL FUNCTION 'DDIF_DOMA_ACTIVATE'
      EXPORTING
        name     = lv_ddobjname
        auth_chk = ' '.

    CHECK sy-subrc = 0.

  ENDMETHOD.

  METHOD create_element.
    DATA: lt_new_object         TYPE comt_gox_def_header,
          lt_old_object         LIKE lt_new_object,
          lw_onject_text        TYPE coms_gox_def_text,
          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.
    lv_devclass = devclass.

    IF reptext IS INITIAL.
      reptext = description.
    ENDIF.

    IF scrtext_s IS INITIAL.
      scrtext_s = description.
    ENDIF.

    IF scrtext_m IS INITIAL.
      scrtext_m = description.
    ENDIF.

    IF scrtext_l IS INITIAL.
      scrtext_l = description.
    ENDIF.

    CLEAR ls_new_object.

    ls_new_object-object_type = 'ELEMENT'.
    ls_new_object-object_name = rollname .

    "數據元素描述
    CLEAR lw_onject_text.
    lw_onject_text-language = ddlanguage.
    lw_onject_text-description = description.
    APPEND lw_onject_text TO ls_new_object-object_text.

    TRY.
        DATA(lv_guid) = cl_system_uuid=>if_system_uuid_static~create_uuid_c32( ).
      CATCH cx_uuid_error .
    ENDTRY.
    ls_new_object-key_guid = lv_guid.
    DATA(lv_parent_guid) = ls_new_object-key_guid.

    CLEAR    ls_new_object_details.
    ls_new_object_details-fieldname  = 'DDTEXT'."標題描述
    ls_new_object_details-fieldvalue =  ddlanguage.
    APPEND   ls_new_object_details   TO ls_new_object-details.

    CLEAR    ls_new_object_details.
    ls_new_object_details-fieldname  =  'DOMNAME'."域名
    ls_new_object_details-fieldvalue =  domname.
    APPEND   ls_new_object_details   TO ls_new_object-details.

    CLEAR    ls_new_object_details.
    ls_new_object_details-fieldname = 'DDLANGUAGE'. "語言
    ls_new_object_details-fieldvalue = ddlanguage.
    APPEND   ls_new_object_details   TO ls_new_object-details.

    CLEAR    ls_new_object_details.
    ls_new_object_details-fieldname = 'ROUTPUTLEN'. "長度(字符數)
    ls_new_object_details-fieldvalue = routputlen.
    APPEND   ls_new_object_details   TO ls_new_object-details.

    CLEAR    ls_new_object_details.
    ls_new_object_details-fieldname = 'MEMORYID'.  "設置/獲取參數標識
    ls_new_object_details-fieldvalue = memoryid.
    APPEND   ls_new_object_details   TO ls_new_object-details.

    CLEAR    ls_new_object_details.
    ls_new_object_details-fieldname = 'REPTEXT'. "長標題
    ls_new_object_details-fieldvalue = reptext.
    APPEND   ls_new_object_details   TO ls_new_object-details.

    CLEAR    ls_new_object_details.
    ls_new_object_details-fieldname = 'HEADLEN'.  "長標題長度
    ls_new_object_details-fieldvalue = strlen( reptext ).
    APPEND   ls_new_object_details   TO ls_new_object-details.

    CLEAR    ls_new_object_details.
    ls_new_object_details-fieldname = 'SCRTEXT_S'. "短標題
    ls_new_object_details-fieldvalue = scrtext_s.
    APPEND   ls_new_object_details   TO ls_new_object-details.

    CLEAR    ls_new_object_details.
    ls_new_object_details-fieldname = 'SCRLEN1'.   "短標題長度
    ls_new_object_details-fieldvalue = strlen( scrtext_s ).
    APPEND   ls_new_object_details   TO ls_new_object-details.

    CLEAR    ls_new_object_details.
    ls_new_object_details-fieldname = 'SCRTEXT_M'. "中標題
    ls_new_object_details-fieldvalue = scrtext_m.
    APPEND   ls_new_object_details   TO ls_new_object-details.

    CLEAR    ls_new_object_details.
    ls_new_object_details-fieldname = 'SCRLEN2'. "中標題長度
    ls_new_object_details-fieldvalue = strlen( scrtext_m ).
    APPEND   ls_new_object_details   TO ls_new_object-details.

    CLEAR    ls_new_object_details.
    ls_new_object_details-fieldname = 'SCRTEXT_L'. "長標題
    ls_new_object_details-fieldvalue = scrtext_l.
    APPEND   ls_new_object_details   TO ls_new_object-details.

    CLEAR    ls_new_object_details.
    ls_new_object_details-fieldname = 'SCRLEN3'.  "長標題長度
    ls_new_object_details-fieldvalue = strlen( scrtext_l ).
    APPEND   ls_new_object_details   TO ls_new_object-details.

    APPEND ls_new_object TO lt_new_object.

    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.
  ENDMETHOD.

  METHOD create_table.
    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.

    CLEAR ls_new_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.

    CLEAR ls_new_object_details.
    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.

    APPEND ls_new_object TO lt_new_object.

    LOOP AT it_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.
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.

*  "測試
*  DATA(return) = zcl_dynamic_operate=>create_domain(
*    domaname      = 'ZDC'
*    description = '測試'
*    datatype      = 'CHAR'
*    leng          = '10'
*    it_dd07v      = VALUE #( ( domname = 'ZD1' valpos = '0001' ddlanguage = '1' ddtext = '空' )
*                            ( domname = 'ZD2' valpos = '0002' ddlanguage = '1' domvalue_l = 'X' ddtext = '是' ) )
*    ).
*
*  IF return IS NOT INITIAL.
*    cl_demo_output=>display( return ).
*    EXIT.
*  ENDIF.
*
*  return = zcl_dynamic_operate=>create_element(
*  rollname    = 'ZE_DC'
*  description = '數據元素'
*  domname     = 'ZDC'
**           routputlen  =
**           memoryid    =
**           reptext     =
**           scrtext_s   =
**           scrtext_m   =
**           scrtext_l   =
**           devclass    = '$TMP'
**           request_wb  =
*  ).
*  IF return IS NOT INITIAL.
*    cl_demo_output=>display( return ).
*    EXIT.
*  ENDIF.

*"測試
*DATA(RETURN) = zcl_dynamic_operate=>create_domain(
*      domaname      = 'ZDC'
*      description = '測試'
*      datatype      = 'CHAR'
*      leng          = '10'
*      it_dd07v      = VALUE #( ( domname = 'ZD1' valpos = '0001' ddlanguage = '1' ddtext = '空' )
*      ( domname = 'ZD2' valpos = '0002' ddlanguage = '1' domvalue_l = 'X' ddtext = '是' ) )
*      ).
*
*IF RETURN IS NOT INITIAL.
*  cl_demo_output=>display( RETURN ).
*  EXIT.
*ENDIF.


  DATA(return) = zcl_dynamic_operate=>create_element(
  rollname    = 'ZE_MAILBOX'
  description = '人事專員郵箱'
  domname     = 'CHAR30'
*           routputlen  =
*           memoryid    =
*           reptext     =
*           scrtext_s   =
*           scrtext_m   =
*           scrtext_l   =
             devclass    = 'Z001'
             request_wb  = 'ED1K900601'
  ).
  IF return IS NOT INITIAL.
    cl_demo_output=>display( return ).
    EXIT.
  ENDIF.

"創建表
*DATA(RETURN) = zcl_dynamic_operate=>create_table(
*      tabname    = 'ZTDC'
*it_dd03l   = VALUE #( ( fieldname = 'MANDT' POSITION = 'X' keyflag = 'X' rollname = 'MANDT' )
*                     ( fieldname = 'MATNR' POSITION = 'X' keyflag = 'X' rollname = 'MATNR' ) )
*      ).
*(
*      tabname    = ''
*      tabclass   = 'TRANSP'
*      tabkat     = 0
*      tabart     = 'APPL0'
**      pufferung  = ''
*      contflag   =
*      mainflag   =
*      buffallow  =
*      schfeldanz =
**                 devclass   = '$TMP'
**                 request_wb =
*      it_dd03l   =
*      )

*TABCLASS
*TRANSP  透明表格
*INTTAB  結構
*CLUSTER  簇表
*POOL  共享表格
*VIEW  生成的視圖結構
*APPEND  附加結構
*
*TABKAT  0  大小范疇
*0  表 < 500K         0                    0 到            810
*1  表 < 1.5 MB         1                  810 到          3,200
*2  表 < 6.5 MB         2                3,200 到         13,000
*3  表 < 25 MB        3               13,000 到         52,000
*4  表 > 160 MB         4               52,000 到        210,000
*5  值無法手動編輯(早期預警值)     5              210,000 到        420,000
*6  值無法手動編輯(早期預警值)     6              420,000 到        840,000
*7  值無法手動編輯(早期預警值)     7              840,000 到      1,600,000
*8  值無法手動編輯(早期預警值)     8            1,600,000 到      3,300,000
*9  值無法手動編輯(早期預警值)     9            3,300,000 到    130,000,000
*10  值無法手動編輯(早期預警值)
*11  值無法手動編輯(早期預警值)
*12  值無法手動編輯(早期預警值)
*13  值無法手動編輯(早期預警值)
*14  值無法手動編輯(早期預警值)
*
*TABART CHAR  5 0 技術設置的數據類
*APPL0     主數據,透明表
*APPL1     事務數據,透明表
*APPL2     組織和定製
*DDIM      業務倉庫中的維度表
*DFACT     業務倉庫中的事實表
*DODS      業務倉庫中的操作型數據存儲表
*USER      客戶數據類
*USER1     客戶數據類
*
*CONTFLAG 1 類型  CONTFLAG  CHAR  1 0 提交類
*A  應用表 (主數據和業務數據)
*C  定製表, 僅由客戶維護, 非SAP輸入
*L  存儲當前數據表,傳送空閒
*G  定製表, 不受 SAP 更新影響, 只 INS 全部
*E  控制表,SAP和用戶有分開的關鍵字範圍
*S  系統表, 只被SAP維護, 修改=調整
*W  系統表,內容可通過單獨的傳輸請求對象傳輸
*
*PUFFERUNG  1 類型  PUFFERUNG CHAR  1 0 緩衝類型指示器
*無緩衝
*P  已緩衝單個表格條目
*G  按通用鍵值指定進行完全緩衝
*X  整個表傳遞至緩衝區
*
*SCHFELDANZ SCHFELDANZ  NUMC  3 0 普通緩衝區的關鍵區域號
*
*
*BUFALLOW 1 類型  BUFALLOW  CHAR  1 0 允許/不允許緩衝的指示器
*N  不允許緩存
*X  緩存已打開
*A  允許緩衝,但已關閉
*
*LANGDEP  1 類型  LANGDEP CHAR  1 0 語言相關性 ,具有INCLUDES表標記
*表不可包括INCLUDE對於其他表
*X  表包含
*
*SQLTAB 1 類型  SQLAPPDTAB  CHAR  30  0 SQL 表或附加的表的名稱
*
*
*EXCLASS  NUMC  1 ABAP 字典:include 語句和子類型擴展等級
*0  未分類
*1  無法增強
*2  可以增強(字符型)
*3  可以增強(字符或數字型)
*4  可以增強(深度)

*mainflag
*允許顯示/維護,但存在限制
*X  允許顯示/維護
*N  不允許顯示/維護

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章