技术背景:解决项目上的不必要重复劳动。
涉及FUNCTION:
GOX_GEN_TABLE_STD: 生成透明表
DDIF_TABL_GET: 获得表的相关信息
DDIF_TABL_PUT: 设置表的相关信息
DDIF_TABL_ACTIVATE: 激活透明表

主要逻辑:
STEP1、设计一个透明表字段信息EXCEL模板(包括:字段名 位置(表第几列) 主键 初始值 数据元素)
模板EXCEL
STEP2.获取上传透明表信息

STEP3、处理接收数据完成表技术设置
表头设置

字段设置

STEP4、调用GOX_GEN_TABLE_STD生成透明表
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.
STEP5、调用DDIF_TABL_GET获得表的相关信息
call function ‘DDIF_TABL_GET’ " 获得表的相关信息
exporting
name = lv_ddobjname
state = ‘A’ " A 活动版本 M 最新版本
langu = sy-langu
importing
dd02v_wa = ls_dd02v
dd09l_wa = ls_dd09l
exceptions
illegal_input = 1
others = 2.
STEP6、调用DDIF_TABL_PUT设置表的相关信息


STEP7、调用DDIF_TABL_ACTIVATE激活透明表

  • active table
    call function ‘DDIF_TABL_ACTIVATE’ " 激活透明表
    exporting
    name = lv_ddobjname
    auth_chk = ’ '.

程序运行展示:
屏幕:

运行结果:


程序源码:
&---------------------------------------------------------------------
*& Report ZF_CREATE_TABLE
*& 程序描述:动态创建透明表
&---------------------------------------------------------------------
*&
*&
&---------------------------------------------------------------------

report zf_create_table.

&---------------------------------------------------------------------
*& 数据类型
&---------------------------------------------------------------------
types:begin of tp_table,
column1 type char100, " object_name
column2 type char100, " POSITION
column3 type char100, " KEYFLAG
column4 type char100, " NOTNULL
column5 type char100, " ROLLNAME
column6 type char100, " REFTABLE
column7 type char100, " REFFIELD
end of tp_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:lv_guid type guid_32.
data:lv_parent_guid like ls_new_object-key_guid.
data:gt_dd03l type standard table of dd03l.
data: lv_ddobjname type ddobjname,
ls_dd02v type dd02v,
ls_dd09l type dd09l.
data:lt_table type table of tp_table,
lw_table type tp_table.
“定义表格结构内表。”
data: lt_excel type table of alsmex_tabline, “表格结构。”
lw_excel type alsmex_tabline.
&---------------------------------------------------------------------
*& 选择屏幕
&---------------------------------------------------------------------
selection-screen begin of block b1 with frame title text-001.
parameters: tabname type char32 obligatory, " 表名
tabtext type char50 obligatory. " 表描述

selection-screen end of block b1.
selection-screen begin of block b2 with frame title text-002.
parameters: tabart type dd09v-tabart obligatory, " 数据类
tabkat type dd09v-tabkat obligatory. " 大小范畴
selection-screen end of block b2.
selection-screen begin of block b3 with frame title text-003.
parameters:p_file(80) obligatory. " 地址栏
selection-screen end of block b3.
&---------------------------------------------------------------------
*& AT SELECTION-SCREEN
&---------------------------------------------------------------------
initialization.

at selection-screen output. " pbo
*** Prepare Report Data

at selection-screen on value-request for p_file.
perform frm_open_dialog. " 调用选择文件函数"

at selection-screen.
" 输入条件检查
perform frm_screen_check.

start-of-selection.
" 上传表信息
perform frm_upload_file.

perform frm_technical_setting.

end-of-selection.

write:/ 'Table: ‘, lv_ddobjname, ’ generated successfully’.
&---------------------------------------------------------------------
*& Form FRM_OPEN_DIALOG
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------

  • –> p1 text
  • <-- p2 text
    ----------------------------------------------------------------------
    form frm_open_dialog .
    data:lt_file_table type filetable.
    data:lw_file_table type file_table.
    data:lv_rc type i.
    call method cl_gui_frontend_services=>file_open_dialog
    exporting
    window_title = ‘选择文件’
    default_filename = ‘’ “默认excel文件”
    initial_directory = ‘’ "默认打开D盘,也可以默认空"D:
    multiselection = ‘’ “文件单选”
    changing
    file_table = lt_file_table
    rc = lv_rc
    exceptions
    file_open_dialog_failed = 1
    cntl_error = 2
    error_no_gui = 3
    not_supported_by_gui = 4
    others = 5.
    if lv_rc eq 1.“因为文件单选,所以这里判断一下选择的数量为1”
    read table lt_file_table index 1 into p_file.
    else.
    message ‘文件单选’ type ‘S’ display like ‘E’.
    return.
    endif.
    “将选择的文件地址写入到地址栏”
    endform. " FRM_OPEN_DIALOG
    &---------------------------------------------------------------------
    *& Form FRM_UPLOAD_FILE
    &---------------------------------------------------------------------
  •   text
    

----------------------------------------------------------------------

  • –> p1 text
  • <-- p2 text
    ----------------------------------------------------------------------
    form frm_upload_file .

“ALSMEX_TABLINE是具有Excel数据的表行,有三个组件,row col value 。”

data:lv_file type rlgrap-filename.“这里参照系统中的结构字段。”
move p_file to lv_file.“将地址栏的值赋值给GET_FILE”

“调用此函数,将Excel中的内容以类似坐标的形式存储到lt_excel 内表中。”
call function ‘ALSM_EXCEL_TO_INTERNAL_TABLE’
exporting
filename = lv_file
i_begin_col = 1
i_begin_row = 1
i_end_col = 100
i_end_row = 9999
tables
intern = lt_excel
exceptions
inconsistent_parameters = 1
upload_ole = 2
others = 3.
delete lt_excel where row = 1.“删除第一行抬头。如果excel文件中不存在抬头的话,可不写此句。”

if lt_excel is initial.
message ‘Excel表格中没有内容!’ type ‘S’ display like ‘E’.
return.
endif.

clear:lt_table.
sort lt_excel by row col.

loop at lt_excel into lw_excel.
case lw_excel-col.
when ‘0001’.
lw_table-column1 = lw_excel-value.
when ‘0002’.
lw_table-column2 = lw_excel-value.
when ‘0003’.
lw_table-column3 = lw_excel-value.
when ‘0004’.
lw_table-column4 = lw_excel-value.
when ‘0005’.
lw_table-column5 = lw_excel-value.
when ‘0006’.
lw_table-column6 = lw_excel-value.
when ‘0007’.
lw_table-column7 = lw_excel-value.
endcase.
at end of row.
append lw_table to lt_table.
clear lw_table.
endat.
clear:lw_excel.
endloop.

endform. " FRM_UPLOAD_FILE
&---------------------------------------------------------------------
*& Form FRM_SCREEN_CHECK
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------

  • –> p1 text
  • <-- p2 text
    ----------------------------------------------------------------------
    form frm_screen_check .
    *& 表名重复性检查
    select * into corresponding fields of table gt_dd03l from dd03l where tabname = tabname.
    if gt_dd03l[] is not initial.
    message ‘表名已存在’ type ‘S’ display like ‘E’.
    return.
    endif.
    endform. " FRM_SCREEN_CHECK
    &---------------------------------------------------------------------
    *& Form FRM_TECHNICAL_SETTING
    &---------------------------------------------------------------------
  •   text
    

----------------------------------------------------------------------

  • –> p1 text
  • <-- p2 text
    ----------------------------------------------------------------------
    form frm_technical_setting .
    ls_new_object-object_type = ‘TABLE’.
    ls_new_object-object_name = tabname.

call function ‘RS_DME_MG_GENERATE_GUID’ " 生成并返回一个Guid
importing
e_guid_32 = lv_guid.

  • technical setting 技术设置
    ls_new_object-key_guid = lv_guid.
    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 = 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 = ‘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.

    " 表字段设置
    data:lv_number type i.
    call function ‘RS_DME_MG_GENERATE_GUID’
    importing
    e_guid_32 = lv_guid.
    *& 默认MANDT
    ls_new_object-object_type = ‘TABLE_FIELD’.
    ls_new_object-key_guid = lv_guid.
    ls_new_object-parent_key = lv_parent_guid.
    ls_new_object-object_name = ‘MANDT’. " 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’. " data element
    ls_new_object_details-fieldvalue = ‘MANDT’. "
    append ls_new_object_details to ls_new_object-details.
    clear ls_new_object_details.
    ls_new_object_details-fieldname = ‘REFTABLE’. " REF TABLE
    ls_new_object_details-fieldvalue = ‘’.
    append ls_new_object_details to ls_new_object-details.
    clear ls_new_object_details.
    ls_new_object_details-fieldname = ‘REFFIELD’. " REF FIELD
    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.
    data lv_sum type i value ‘1’.
    loop at lt_table into lw_table.
    lv_sum = lv_sum + 1.
    ls_new_object-object_type = ‘TABLE_FIELD’.
    ls_new_object-key_guid = lv_guid.
    ls_new_object-parent_key = lv_parent_guid.
    ls_new_object-object_name = lw_table-column1. " field name
    ls_new_object_details-fieldname = ‘POSITION’.
    ls_new_object_details-fieldvalue = lv_sum.
    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 = lw_table-column3.
    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 = lw_table-column4.
    append ls_new_object_details to ls_new_object-details.
    clear ls_new_object_details.
    ls_new_object_details-fieldname = ‘ROLLNAME’. " data element
    ls_new_object_details-fieldvalue = lw_table-column5. "
    append ls_new_object_details to ls_new_object-details.
    clear ls_new_object_details.
    ls_new_object_details-fieldname = ‘REFTABLE’. " REF TABLE
    ls_new_object_details-fieldvalue = lw_table-column6.
    append ls_new_object_details to ls_new_object-details.
    clear ls_new_object_details.
    ls_new_object_details-fieldname = ‘REFFIELD’. " REF FIELD
    ls_new_object_details-fieldvalue = lw_table-column7.
    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.
    clear lw_table.
    endloop.

    refresh lt_returntab.
    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.

    lv_ddobjname = lv_dbtab1_name.
    call function ‘DDIF_TABL_GET’ " 获得表的相关信息
    exporting
    name = lv_ddobjname
    state = ‘A’ " A 活动版本 M 最新版本
    langu = sy-langu
    importing
    dd02v_wa = ls_dd02v
    dd09l_wa = ls_dd09l
    exceptions
    illegal_input = 1
    others = 2.
    if sy-subrc <> 0.
    return.
    endif.

*& 表头设置
ls_dd02v-mainflag = ‘X’.
ls_dd02v-ddtext = tabtext.
*& 技术设置
ls_dd09l-tabart = tabart. " 数据类
ls_dd09l-tabkat = tabkat. " 大小范畴
ls_dd09l-bufallow = ‘N’. " 缓冲区允许/不允许的指示器 N :不允许缓存 X : 缓存已打开 A : 允许缓冲,但已关闭
ls_dd09l-pufferung = ‘’. " 缓冲类型指示器 ‘’ 无缓冲 P : 已缓冲单个表格条目 X : 表完全传输到缓冲

call function ‘DDIF_TABL_PUT’ " 设置表的相关信息
exporting
name = lv_ddobjname
dd02v_wa = ls_dd02v " Table Header
dd09l_wa = ls_dd09l " Technical Settings of the Table
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 = ’ '.
    endform. " FRM_TECHNICAL_SETTING

透明表——ABAP程序创建透明表相关推荐

  1. mysql创建表语句 cmd_MySQL 创建数据表

    MySQL 可以使用 CREATE TABLE SQL 语句创建表 创建 MySQL 数据表需要 表名 .表字段名 .定义每个表字段 CREATE TABLE 语句语法 下面的 SQL 语句为创建 M ...

  2. mysql创建表参数_MySQL创建数据表(CREATE TABLE语句)

    在创建数据库之后,接下来就要在数据库中创建数据表.所谓创建数据表,指的是在已经创建的数据库中建立新表. 创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性.引用完整性和域 ...

  3. 使用程序创建数据库表

    使用程序来创建数据库表.

  4. mysql创建数据库时候同时创建表空间_MySQL 创建InnoDB表空间_编程学问网

    15.2.5. 创建InnoDB表空间 假设你已经安装了MySQL,并且已经编辑了选项文件,使得它包含必要的InnoDB配置参数.在启动MySQL之前,你应该验证你为InnoDB数据文件和日志文件指定 ...

  5. php mysql oracle数据库表结构图_创建数据库表

    数据库的作用:1.有结构的存储大量数据.2.有效保持数据的一致性.3.方便智能的分析,产生新的有用的信息.4.满足应用的共享和安全的要求. 关系型数据库的基本组成:一个数据库是由一组数据表(table ...

  6. MySQL授权修改表结构_MySQL创建修改表结构

    一.数据库的概述 1.什么是数据库 DB,DataBase 数据库:依照某种数据模型进行组织并存放到存储器的数据集合 DBMS,DataBase Management System 数据库管理系统:用 ...

  7. oracle数据库迁移 增大空间,Oracle数据库迁移、创建表空间、创建数据表实例讲解-Oracle...

    数据库迁移 对于数据库迁移来说,如果源数据库与目标数据库版本一致,推荐使用Oracle导入或者pl/sql导入:如果版本不一致,则可以使用sql导入的方式. 创建表空间 create tablespa ...

  8. xampp mysql创建表_xampp怎样创建数据表和删除数据表 来学习吧

    xampp新建好数据库之后,怎样新建数据表呢?今天咪咪我就来讲解一下xampp中怎样创建数据表和删除数据表. 工具/材料 电脑 电脑 xampp 操作方法 01 如图,单击选中已经创建好的数据库. 0 ...

  9. php mysql 创建数据表_PHP MySQL 创建数据表

    PHP 创建 MySQL 表 一个数据表有一个唯一名称,并有行和列组成. 使用 MySQLi 和 PDO 创建 MySQL 表 CREATE TABLE 语句用于创建 MySQL 表. 我们将创建一个 ...

最新文章

  1. 出国留学想申请国家留学基金委的奖学金?传说中的csc! 从这里入手就对了!
  2. python:连接Oracle数据库后控制台打印中文为??
  3. 利用linux mutt 发送邮件(在Shell脚本中使用比较方便)
  4. 一个传统的前端框架的布局
  5. Word论文插入带有方括号序号的参考文献——尾注+交叉引用
  6. MAYA制作女猎人角色毛发-3D建模场景模型教程
  7. JSP——JSP介绍以及运行原理
  8. C/C++和Lua混合编程
  9. html加拼音注释,古诗加拼音注释版.doc
  10. Channel 用法
  11. 单细胞测序分析软件包_seurat使用笔记
  12. 谈谈测试过程中常见的几个问题
  13. CAMP模型——估计资本成本的模型
  14. 微信公众号及小程序开发入门(二)
  15. win10:如何在注册表中操作右键菜单
  16. 诺基亚智能手机未来仅采用Symbian和MeeGo系统
  17. ES6 generator函数的详解
  18. (附源码)计算机毕业设计SSM音乐推荐系统
  19. SumperMap基本编程
  20. 快速复制备份多个文件,覆盖过重复的文件

热门文章

  1. 【01.14】网络安全学习day3
  2. 十大建立网站的开源程序
  3. ICMP有哪些消息类型?常见的ICMP报文有哪些?
  4. 1主2从基于GKE搭建k8s集群-无需科学上网
  5. Java(1),Java架构师之路
  6. Matlab 伪彩色处理方法总结(密度分割法、灰度级变换法、频域变换法)
  7. 洛谷p2655 2038年问题 普及/提高- 模拟
  8. 脑在IDE模式下能正常启动,改成AHCI后蓝屏——解决方法
  9. keychron:一款能让我工作效率提升50%的设备。
  10. 速来接好运!工作2年获得阿里内推名额,历经阿里4面成功拿下offer!