ABAP根据输入的表名动态生成上传TXT数据的代码

开发技术:

1.文本文件上载技术

2.动态程序代码生成技术

3.ABAP动态程序执行技术

4.TXT文本文件对应用Table字段编辑技术

注意事项:

文件文件编辑过程中时间日期格式为 20060201 120000 表示 2006.02.01 12:00:00

文本文件中不能包含除字符,数字之外的其他特殊符号。假如Table中对应的字段数据为空时,在编辑数据时也对应该列为空。

程序代码:如下

*&------------------------------------------------------------------*

*& Report  Z_CBO_ABAP_TXT

*&

*&------------------------------------------------------------------*

* 程序说明  Table数据Upload 程序 只能导入TXT

* 模块:版本

* 参考文档

* 应用顾问

* 程序开发

* 开发日期

*&------------------------------------------------------------------*

*&更改记录

*&日期          更改人     模块:版本    功能说明书

*&

*&

*&------------------------------------------------------------------*

REPORT Z_CBO_ABAP.

TABLES : dd03l,dd02t.

*-------------------------------------------------------------------*

*    内表

*-------------------------------------------------------------------*

DATA: BEGIN OF tab OCCURS 10,

fcode(4),

END OF tab.

DATA : BEGIN OF itab OCCURS 0,

chk(1) TYPE c,                     " check box

tabname    LIKE dd03l-tabname,     " Table name

fieldname  LIKE dd03l-fieldname,   " Feld Name

position   LIKE dd03l-position,    " Table

keyflag    LIKE dd03l-keyflag,     " Primary Key

datatype   LIKE dd03l-datatype,    " Data Type

intlen     LIKE dd03l-leng,

END OF itab.

DATA itab1 LIKE itab OCCURS 0 WITH HEADER LINE.

DATA : BEGIN OF uptab OCCURS 0,

*        text(72) TYPE c,

text(100) TYPE c,

END OF uptab.

DATA: BEGIN OF error_message,

line1(72),

line2(72),

line3(72),

END OF error_message.

DATA : cnt1(8) TYPE c,

fcode LIKE sy-ucomm,

changed LIKE s38e-buf_varied,

prog(8) TYPE c,

msg(120) TYPE c,

er_include LIKE sy-repid,

er_line    LIKE sy-index,

er_off     LIKE sy-tabix,

er_subrc   LIKE sy-subrc.

*-------------------------------------------------------------------*

*    选择画面

*-------------------------------------------------------------------*

PARAMETERS : tabname LIKE dd03l-tabname.

*------------------------------------------------------------------*

*    START-OF-SELECTION                                                *

*-------------------------------------------------------------------*

START-OF-SELECTION.

IF tabname IS INITIAL.

MESSAGE ‘请输入数据表名称!‘ TYPE ‘S‘ DISPLAY LIKE ‘E‘.

EXIT.

ENDIF.

*上载Table字段分析

SELECT SINGLE * FROM dd02t WHERE tabname = tabname.

if sy-subrc <> 0.

MESSAGE ‘请输入正确的数据表名称!‘ TYPE ‘S‘ DISPLAY LIKE ‘E‘.

EXIT.

endif.

SET PF-STATUS ‘CBO‘.

SELECT * INTO CORRESPONDING FIELDS OF TABLE itab FROM dd03l

WHERE tabname = tabname

AND as4local = ‘A‘

ORDER BY position.

itab-chk = ‘X‘.

MODIFY itab INDEX 1 TRANSPORTING chk.

*动态上载程序代码生成函数

PERFORM generate_upload_code.

*ABAP程序代码编辑器调用

PERFORM edit_generator_code.

AT USER-COMMAND .

IF sy-ucomm = ‘EDIT‘.

PERFORM edit_generator_code.

ELSEIF sy-ucomm = ‘EXEC‘.

GENERATE SUBROUTINE POOL uptab NAME prog MESSAGE msg.

IF MSG IS NOT INITIAL.

MESSAGE MSG TYPE ‘S‘ DISPLAY LIKE ‘E‘.

EXIT.

ENDIF.

*程序代码语法检测

PERFORM chcek_syntax_error.

*动态程序代码执行

PERFORM dyn1 IN PROGRAM (prog).

elseif ( sy-ucomm = ‘EXIT‘ or sy-ucomm = ‘BACK‘ or sy-ucomm = ‘CANC‘ ).

EXIT.

ENDIF.

*&---------------------------------------------------------------*

*&      Form  generate_upload_code

*&---------------------------------------------------------------*

FORM generate_upload_code.

REFRESH uptab.

uptab-text = ‘REPORT ZUPLOAD_TABLE.‘.

APPEND uptab.

CONCATENATE ‘TABLES :‘ tabname ‘.‘ INTO uptab-text

SEPARATED BY space.

APPEND uptab.

uptab-text = ‘DATA : BEGIN OF UPTAB OCCURS 0,‘.

APPEND uptab.

LOOP AT itab WHERE chk = ‘‘.

CLEAR uptab.

CONCATENATE ‘  ‘ itab-fieldname ‘(‘ itab-intlen  ‘)‘  ‘ TYPE C ,‘

INTO uptab-text+10(80).

APPEND uptab.

ENDLOOP.

uptab-text+6(82) = ‘END OF UPTAB.‘.

APPEND uptab.

uptab-text = ‘DATA : BEGIN OF RESULT OCCURS 0.‘.

APPEND uptab.

CLEAR uptab.

CONCATENATE ‘INCLUDE STRUCTURE‘ itab-tabname ‘.‘

INTO uptab-text+10(80) SEPARATED BY space.

APPEND uptab.

uptab-text = ‘DATA : END OF RESULT.‘.

APPEND uptab.

uptab-text = ‘FORM DYN1.‘.

APPEND uptab.

CLEAR uptab.

uptab-text+2(88) = ‘CALL FUNCTION ‘‘UPLOAD‘‘‘.

APPEND uptab.

CLEAR uptab.

uptab-text+4(86) = ‘EXPORTING‘.

APPEND uptab.

CLEAR uptab.

uptab-text+6(84) = ‘FILENAME = ‘‘C:/‘‘‘.

APPEND uptab.

uptab-text+6(84) = ‘FILETYPE = ‘‘DAT‘‘‘.

APPEND uptab.

uptab-text+4(86) = ‘TABLES‘.

APPEND uptab.

CLEAR uptab.

uptab-text+6(84) = ‘DATA_TAB = UPTAB.‘.

APPEND uptab.

uptab-text+2(88) = ‘LOOP AT UPTAB.‘.

APPEND uptab.

CLEAR uptab.

uptab-text+4(86) = ‘CLEAR RESULT.‘.

APPEND uptab.

uptab-text+4(86) = ‘MOVE-CORRESPONDING UPTAB TO RESULT.‘.

APPEND uptab.

uptab-text+4(86) = ‘APPEND RESULT.‘.

APPEND uptab.

uptab-text+2(88) = ‘ENDLOOP.‘.

APPEND uptab.

CLEAR uptab.

CONCATENATE ‘MODIFY‘  itab-tabname ‘FROM TABLE RESULT.‘

INTO uptab-text+2(88) SEPARATED BY space.

APPEND uptab.

uptab-text = ‘ENDFORM.‘ .

APPEND uptab.

CLEAR uptab.

ENDFORM.                    " generate_upload_code

*&---------------------------------------------------------------*

*&      Form  edit_generator_code

*&---------------------------------------------------------------*

FORM edit_generator_code.

CALL FUNCTION ‘EDITOR_APPLICATION‘

EXPORTING

application = ‘BF‘

display     = ‘ ‘

name        = ‘Source Code.....‘

IMPORTING

fcode       = fcode

changed     = changed

TABLES

content     = uptab.

LOOP AT uptab.

WRITE:/1 uptab-text.

ENDLOOP.

ENDFORM.                               " PRINT_GENERATOR_CODE

*&---------------------------------------------------------------*

*&      Form  chcek_syntax_error

*&---------------------------------------------------------------*

FORM chcek_syntax_error.

CALL FUNCTION ‘EDITOR_SYNTAX_CHECK‘

EXPORTING

i_global_check   = SY-CALLD

i_global_program = SY-REPID

i_program        = ‘ZUPLOAD_TABLE‘

*            i_r2_check       = ‘ ‘

*            i_r2_destination = ‘ ‘

*            i_trdir          = ‘ ‘

IMPORTING

o_error_include  = er_include

o_error_line     = er_line

o_error_message  = error_message

o_error_offset   = er_off

o_error_subrc    = er_subrc

TABLES

i_source         = uptab.

IF er_subrc <> 0.

er_line = er_line - 2.

WRITE:/1 ‘Error Line : ‘,er_line.

WRITE:/1 error_message-line1,error_message-line2,

error_message-line3.

STOP.

ENDIF.

ENDFORM.                    " chcek_syntax_error

时间: 2024-10-29 08:46:10

ABAP根据输入的表名动态生成上传TXT数据的代码的相关文章

ABAP根据输入的表名动态生成上传EXCEL数据的代码

开发技术: 1.文本文件上载技术 2.动态程序代码生成技术 3.ABAP动态程序执行技术 4.TXT文本文件对应用Table字段编辑技术 注意事项: 文件文件编辑过程中时间日期格式为 20060201 120000 表示 2006.02.01 12:00:00 文本文件中不能包含除字符,数字之外的其他特殊符号.假如Table中对应的字段数据为空时,在编辑数据时也对应该列为空. EXCEL 文件必须带表头. 程序代码:如下 *&-----------------------------------

WPF Datagrid 动态生成列 并绑定数据

原文:WPF Datagrid 动态生成列 并绑定数据 说的是这里 因为列头是动态加载的 (后台for循环 一会能看到代码) 数据来源于左侧列 左侧列数据源 当然num1 属于临时的dome使用  可以用ObservableCollection集合代表 动态创建属性 WPF 动态生成对象属性 (dynamic) ObservableCollection<NameList> listName = new ObservableCollection<NameList>(); privat

java随机动态生成汉字验证码图片的实例代码分享

原创不易,转载请注明出处:java随机动态生成汉字验证码图片的实例代码分享 代码下载地址:http://www.zuidaima.com/share/1809721113234432.htm 汉字验证码实现原理 将汉字和干扰线生成图片并将汉字保存到session,前台获取每次生成验证码图片并用文本框值和session值比较,功能相对来说还是比较简单的. 效果图,如下: 验证成功后: java随机动态生成汉字验证码图片的实例代码分享

django_5:表单1——文件上传

上传文件1 class UserForm(forms.Form): name = forms.CharField() headImg = forms.FileField() def regist(req): if req.method == 'POST': uf = UserForm(req.POST, req.FILES) if uf.is_valid(): print(uf.cleaned_data['name']) #通过clean_data获取字段 print(req.FILES) #类

jq表单上传多文件 前后台代码

Html>>>>>>>>> <form id="Job_Notice_Form"  method="post" enctype="multipart/form-data"> <div id="f" > <div id="zhi"> <div style="display:none"> &

Struts2文件上传(基于表单的文件上传)

•Commons-FileUpload组件 –Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目 •Commons-FileUpload组件特点 –使用简单:可以方便地嵌入到JSP文件中,编写少量代码即可完成文件的上传功能 –能够全程控制上传内容 –能够对上传文件的大小.类型进行控制 •需要下载Common-FileUplaod框架地址(当然MyEclipce中Struts2支持里自带有这两个包): –http://jak

java模拟post方式提交表单实现图片上传【转】

转自:http://blog.csdn.net/5iasp/article/details/8669644 模拟表单html如下: <form action="up_result.jsp" method="post" enctype="multipart/form-data" name="form1" id="form1"> <label> <input type="

动态添加上传控件,并上传文件

前些天, Insus.NET有实现<MVC上传文件>http://www.cnblogs.com/insus/p/4609843.html 可以上传多个文件,但是只能手动指定上传的数量.那这篇Insus.NET改善这个问题.那就是让用户动态添加上传的控件: 在ASP.NET MVC程序中演示吧,在控制器中,创建2个操作: 依第一个标记创建一个视图,按标记1-5进行添加相对应的标签与jQuery代码: jQuery代码: $(function () { $("#ButtonAdd&qu

sqlserver 动态表名 动态字段名 执行 动态sql

动态语句基本语法: 1 :普通SQL语句可以用exec执行 Select * from tableName exec('select * from tableName') exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态 SQL declare @fname varchar(20) set @fname = 'FiledName' Select @fname from