透明表——ABAP程序创建透明表
技术背景:解决项目上的不必要重复劳动。
涉及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程序创建透明表相关推荐
- mysql创建表语句 cmd_MySQL 创建数据表
MySQL 可以使用 CREATE TABLE SQL 语句创建表 创建 MySQL 数据表需要 表名 .表字段名 .定义每个表字段 CREATE TABLE 语句语法 下面的 SQL 语句为创建 M ...
- mysql创建表参数_MySQL创建数据表(CREATE TABLE语句)
在创建数据库之后,接下来就要在数据库中创建数据表.所谓创建数据表,指的是在已经创建的数据库中建立新表. 创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性.引用完整性和域 ...
- 使用程序创建数据库表
使用程序来创建数据库表.
- mysql创建数据库时候同时创建表空间_MySQL 创建InnoDB表空间_编程学问网
15.2.5. 创建InnoDB表空间 假设你已经安装了MySQL,并且已经编辑了选项文件,使得它包含必要的InnoDB配置参数.在启动MySQL之前,你应该验证你为InnoDB数据文件和日志文件指定 ...
- php mysql oracle数据库表结构图_创建数据库表
数据库的作用:1.有结构的存储大量数据.2.有效保持数据的一致性.3.方便智能的分析,产生新的有用的信息.4.满足应用的共享和安全的要求. 关系型数据库的基本组成:一个数据库是由一组数据表(table ...
- MySQL授权修改表结构_MySQL创建修改表结构
一.数据库的概述 1.什么是数据库 DB,DataBase 数据库:依照某种数据模型进行组织并存放到存储器的数据集合 DBMS,DataBase Management System 数据库管理系统:用 ...
- oracle数据库迁移 增大空间,Oracle数据库迁移、创建表空间、创建数据表实例讲解-Oracle...
数据库迁移 对于数据库迁移来说,如果源数据库与目标数据库版本一致,推荐使用Oracle导入或者pl/sql导入:如果版本不一致,则可以使用sql导入的方式. 创建表空间 create tablespa ...
- xampp mysql创建表_xampp怎样创建数据表和删除数据表 来学习吧
xampp新建好数据库之后,怎样新建数据表呢?今天咪咪我就来讲解一下xampp中怎样创建数据表和删除数据表. 工具/材料 电脑 电脑 xampp 操作方法 01 如图,单击选中已经创建好的数据库. 0 ...
- php mysql 创建数据表_PHP MySQL 创建数据表
PHP 创建 MySQL 表 一个数据表有一个唯一名称,并有行和列组成. 使用 MySQLi 和 PDO 创建 MySQL 表 CREATE TABLE 语句用于创建 MySQL 表. 我们将创建一个 ...
最新文章
- 出国留学想申请国家留学基金委的奖学金?传说中的csc! 从这里入手就对了!
- python:连接Oracle数据库后控制台打印中文为??
- 利用linux mutt 发送邮件(在Shell脚本中使用比较方便)
- 一个传统的前端框架的布局
- Word论文插入带有方括号序号的参考文献——尾注+交叉引用
- MAYA制作女猎人角色毛发-3D建模场景模型教程
- JSP——JSP介绍以及运行原理
- C/C++和Lua混合编程
- html加拼音注释,古诗加拼音注释版.doc
- Channel 用法
- 单细胞测序分析软件包_seurat使用笔记
- 谈谈测试过程中常见的几个问题
- CAMP模型——估计资本成本的模型
- 微信公众号及小程序开发入门(二)
- win10:如何在注册表中操作右键菜单
- 诺基亚智能手机未来仅采用Symbian和MeeGo系统
- ES6 generator函数的详解
- (附源码)计算机毕业设计SSM音乐推荐系统
- SumperMap基本编程
- 快速复制备份多个文件,覆盖过重复的文件