• 通过ABAP程序创建透明表


           最近在解决用户账号问题的时候,需要通过ABAP程序创建透明表,查询了相关资料,总结如下。

           通过ABAP程序创建透明表,主要利用了4个函数:

           DDIF_TABL_ACTIVATE: 激活透明表

           GOX_GEN_TABLE_STD: 生成透明表

           DDIF_TABL_PUT: 设置表的相关信息

           DDIF_TABL_GET: 获得表的相关信息

         参数说明
         Import:
      NAME: 数据库表的名字
      STATE: 状态
                          STATE = ‘A’ (read the active version)
                          STATE = ‘M’ (read the latest version)
           LANGU: 语言设定, 默认sy-langu
         Export: 
           GOTSTATE: 状态信息
           DD02V_WA: 表头
           DD09L_WA: 表表的技术信息
         Tables: 
            DD03P_TAB: 表的字段列表
            DD05M_TAB: 表的外键字段
            DD08V_TAB: 表的外键
            DD12V_TAB: 表索引
            DD17V_TAB: 表的索引字段
            DD35V_TAB: 检索help相关
            DD36M_TAB: 检索help相关

          代码:

    REPORT z_create_table.
    
    PARAMETERS: tabname TYPE char32 OBLIGATORY.
    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.
    
    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 = 'TRANSP'.
    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 = '0'.
    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 = 'APPL2'.
    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 = 'X'.
    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 = 'S'.
    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 = 'X'.
    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 = 'X'.
    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 = '0'.
    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.
    
    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 = 'CODE_VALUE'. "field name
    ls_new_object_details-fieldname = 'POSITION'.
    ls_new_object_details-fieldvalue = '1'.
    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 = 'X'.
    APPEND ls_new_object_details TO ls_new_object-details.
    CLEAR ls_new_object_details.
    ls_new_object_details-fieldname = 'NOTNULL'. "initial
    ls_new_object_details-fieldvalue = 'X'.
    APPEND ls_new_object_details TO ls_new_object-details.
    CLEAR ls_new_object_details.
    ls_new_object_details-fieldname = 'ROLLNAME'.
    ls_new_object_details-fieldvalue = 'COMT_PRODUCT_ID'. "data element
    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.
    REFRESH lt_returntab.
    CLEAR lv_parent_guid.
    
    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    = '$TMP'  "local
      IMPORTING
        et_bapireturn  = lt_returntab.
    
    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.
    
    WRITE:/ 'Table: ', lv_ddobjname, ' generated successfully'.

          输入透明表名运行,即可创建成功。

           

           

          进入SE11查看结果:

           

           

  • 相关阅读:
    Java线程的几种状态
    常用几种Java Web容器
    数据库触发器
    SQL优化及注意事项
    Oracle中rownum和rowid的区别
    数据库及SQL优化
    如何安装使用Impala
    Impala:新一代开源大数据分析引擎
    开源大数据查询分析引擎
    Google Dremel 原理
  • 原文地址:https://www.cnblogs.com/hulianfei/p/7698349.html
Copyright © 2020-2023  润新知