参考程序:

Tcode ABAPdocu-->
BC - ABAP Programming-->
The ABAP Programming Language-->
Special Techniques-->
Generating Programs Dynamically.

1.仅动态生成程序代码:

  REPORT demo_special_tech_dyn_insert.
DATA: code TYPE TABLE OF rssource-line.
* type of an editor line: rssource-line
APPEND 'REPORT ZDYN1.'
TO code.
APPEND 'WRITE / ''Hello, I am dynamically created!''.'
TO code.
INSERT REPORT 'demo_special_tech_ZDYN1' FROM code.
WRITE: text-, 'demo_special_tech_ZDYN1'.

2.动态更改程序代码

REPORT demo_special_tech_dyn_read_rep .
DATA: code TYPE TABLE OF rssource-line.
* type of an editor line: rssource-line
READ REPORT 'demo_special_tech_ZSTRUC1' INTO code.
APPEND 'SKIP.' TO code.
APPEND 'WRITE / ''And I am a dynamic extension!''.' TO code.
INSERT REPORT 'demo_special_tech_ZDYN2' FROM code.
WRITE: text-, 'demo_special_tech_ZDYN2'.

3 动态生成 并 调用

REPORT demo_special_tech_dyn_start.
DATA: code TYPE TABLE OF rssource-line.
* type of an editor line: rssource-line
DATA lin TYPE i.
READ REPORT 'demo_special_tech_zdyn1' INTO code.
SUBMIT demo_special_tech_zdyn1 AND RETURN.
DESCRIBE TABLE code LINES lin.
MODIFY code INDEX lin FROM
'WRITE / ''Dynamic Program Changed!''.'.
INSERT REPORT 'demo_special_tech_zdyn1' FROM code.
SUBMIT demo_special_tech_zdyn1.

4 生成并增加include

REPORT demo_special_tech_include_1.
TYPES code_type TYPE rssource-line.
* type of an editor line: rssource-line
DATA code TYPE TABLE OF code_type. DATA lin TYPE i.
READ REPORT 'demo_special_tech_ZINCLUD1' INTO code.
DESCRIBE TABLE code LINES lin.
MODIFY code INDEX lin FROM
'WRITE / ''Changed INCLUDE program!''.'.
INSERT REPORT 'demo_special_tech_ZINCLUD1' FROM code.
INCLUDE demo_special_tech_zinclud1.

5. 调用其他程序的子程序

REPORT demo_special_tech_include_2 .
TYPES code_type() TYPE c.
DATA code TYPE TABLE OF code_type.
READ REPORT 'demo_special_tech_ZINCLUD1' INTO code.
APPEND 'WRITE / ''Extension of INCLUDE program!''.' TO code.
INSERT REPORT 'demo_special_tech_ZINCLUD1' FROM code.
PERFORM. sub1(demo_special_tech_zform1).

6. 生成动态 临时 子程序 并调用(生成的代码有错 writ 应该是 write).

REPORT demo_special_tech_subroutine_1.
DATA: code TYPE TABLE OF rssource-line,
prog() TYPE c, msg() TYPE c, lin() TYPE c,
wrd() TYPE c, off() TYPE c.
APPEND 'PROGRAM SUBPOOL.'
TO code.
APPEND 'FORM. DYN1.'
TO code.
APPEND
'WRITE / ''Hello, I am the temporary subroutine DYN1!''.' "#EC NOTEXT
TO code.
APPEND 'ENDFORM.'
TO code.
APPEND 'FORM. DYN2.'
TO code.
APPEND
'WRIT / ''Hello, I am the temporary subroutine DYN2!''.' "#EC NOTEXT
TO code.
APPEND 'ENDFORM.'
TO code.
GENERATE SUBROUTINE POOL code NAME prog
MESSAGE msg
LINE lin
WORD wrd
OFFSET off.
IF sy-subrc <> .
WRITE: / 'Error during generation in line', lin, "#EC NOTEXT
/ msg,
/ 'Word:', wrd, 'at offset', off. "#EC NOTEXT
ELSE.
WRITE: / 'The name of the subroutine pool is', prog. "#EC NOTEXT
SKIP .
PERFORM. dyn1 IN PROGRAM (prog).
SKIP .
PERFORM. dyn2 IN PROGRAM (prog).
ENDIF.
----------------------------------------
核心代码 :
GENERATE SUBROUTINE POOL code NAME prog
MESSAGE msg
LINE lin
WORD wrd
OFFSET off.
生成 子程序池,检查代码错误.
_____________________________

7. 生成动态 临时 子程序 并调用(生成的代码正确).

REPORT demo_special_tech_subroutine_2.
DATA: code TYPE TABLE OF rssource-line,
prog() TYPE c, msg() TYPE c, lin() TYPE c,
wrd() TYPE c, off() TYPE c.
APPEND 'PROGRAM SUBPOOL.'
TO code.
APPEND 'FORM. DYN1.'
TO code.
APPEND
'WRITE / ''Hello, I am the temporary subroutine DYN1!''.' "#EC NOTEXT
TO code.
APPEND 'ENDFORM.'
TO code.
APPEND 'FORM. DYN2.'
TO code.
APPEND
'WRITE / ''Hello, I am the temporary subroutine DYN2!''.' "#EC NOTEXT
TO code.
APPEND 'ENDFORM.'
TO code.
GENERATE SUBROUTINE POOL code NAME prog
MESSAGE msg
LINE lin
WORD wrd
OFFSET off.
IF sy-subrc <> .
WRITE: / 'Error during generation in line', lin, "#EC NOTEXT
/ msg,
/ 'Word:', wrd, 'at offset', off. "#EC NOTEXT
ELSE.
WRITE: / 'The name of the subroutine pool is', prog. "#EC NOTEXT
SKIP .
PERFORM. dyn1 IN PROGRAM (prog).
SKIP .
PERFORM. dyn2 IN PROGRAM (prog).
ENDIF.

动态生成ABAP程序-资料的更多相关文章

  1. ABAP动态生成经典应用之Dynamic SQL Excute 程序

    [转自http://blog.csdn.net/mysingle/article/details/678598]开发说明:在SAP的系统维护过程中,有时我们需要修改一些Table中的数据,可是很多Ta ...

  2. 使用C#动态生成Word文档/Excel文档的程序测试通过后,部署到IIS服务器上,不能正常使用的问题解决方案

    使用C#动态生成Word文档/Excel文档的程序功能调试.测试通过后,部署到服务器上,不能正常使用的问题解决方案: 原因: 可能asp.net程序或iis访问excel组件时权限不够(Ps:Syst ...

  3. 微信小程序动态生成保存二维码

    起源:最近小程序需要涉及到一些推广方面的功能,所以要写一个动态生成二维码用户进行下载分享,写完之后受益良多,特此来分享一下: 一.微信小程序动态生成保存二维码 wxml: <view class ...

  4. Delphi 如何在程序中执行动态生成的Delphi代码

    如何在程序中执行动态生成的Delphi代码 经常发现有人提这类问题,或者提问内容最后归结成这种问题 前些阵子有位高手写了一个“执行动态生成的代码”,这是真正的高手,我没那种功力,我只会投机取巧. 这里 ...

  5. 如何在程序中执行动态生成的Delphi代码

    如何在程序中执行动态生成的Delphi代码 经常发现有人提这类问题,或者提问内容最后归结成这种问题 前些阵子有位高手写了一个“执行动态生成的代码”,这是真正的高手,我没那种功力,我只会投机取巧. 这里 ...

  6. 动态生成CheckBox(Winform程序)

    在做用户权限设置功能时,需要做一个动态生成权限列表的功能.(笔记.分享) //1.清空权限控件组的默认控件 panelPermissions.Controls.Clear(); _groupBoxLi ...

  7. 使用 .NET WinForm 开发所见即所得的 IDE 开发环境,实现不写代码直接生成应用程序

    直接切入正题,这是我09年到11年左右业余时间编写的项目,最初的想法很简单,做一个能拖拖拽拽就直接生成应用程序的工具,不用写代码,把能想到的业务操作全部封装起来,通过配置的方式把这些业务操作组织起来运 ...

  8. java抓取动态生成的网页

    最近在做项目的时候有一个需求:从网页面抓取数据,要求是首先抓取整个网页的html源码(后期更新要使用到).刚开始一看这个简单,然后就稀里哗啦的敲起了代码(在这之前使用过Hadoop平台的分布式爬虫框架 ...

  9. Javascript动态生成的页面信息爬取和openpyxl包FAQ小记

    最近,笔者在使用Requests模拟浏览器发送Post请求时,发现程序返回的html与浏览器F12观察到的略有不同,经过观察返回的response.text,cookies确认有效,因为我们可以看到返 ...

随机推荐

  1. Vue vue-awesome-swiper 的坑

    1.在vertical的场景模式下,默认的高度很奇怪,非常非常的大.完全没有规律.后来使用autoHeight好了一点.但依然有问题,问题在于它会根据swiper-slide内元素的高度自动变化叠加. ...

  2. docker mongo backup 不用找啦,就在这里。

    rm -rf /tmp/mongodump && mkdir /tmp/mongodumpdocker run -it --rm --link lps-mongodb:mongo -v ...

  3. nginx中ngx_list的数据结构

    今天没事了,在查看nginx源代码中看到ngx_list的结构,发现设计为链表数组的形式,不知道为什么这样设计 struct ngx_list_part_s { void *elts;//指向数组的起 ...

  4. MySql(一):linux 安装mysql数据库——yum安装法

    mysql数据库有多种安装方式,本文只介绍在Linux服务器上最实用.最快捷的mysql server安装方法.一.Linux服务器yum安装(CentOS6.3 64位)所有在服务器上执行的命令,都 ...

  5. java-SimpleDateFormatDemo & BirthDemo

    java日期格式设置,以及案例BirthDemo package com.example; import java.text.ParseException; import java.text.Simp ...

  6. Erlang 和 Elixir的差异

    原文: http://elixir-lang.org/crash-course.html 函数调用 Elixir允许你调用函数的时候省略括号, Erlang不行. Erlang Elixir some ...

  7. Spring MVC错误处理

    以下示例显示如何在使用Spring Web MVC框架的表单中使用错误处理和验证器.首先使用Eclipse IDE来创建一个WEB工程,实现一个输入用户信息提交验证提示的功能.并按照以下步骤使用Spr ...

  8. 【转】火狐右键google搜索特别慢的解决办法

    原网页:http://www.fatalist.im/blog/459.html google将谷歌中文网站google.cn的搜索服务转向到google.com.hk(香港)后,firefox右上角 ...

  9. 1、easyUI-创建 CRUD普通dataGrid(表格)

    在实现功能之前,我们要做以下几个准备: 分以下几个步骤:开发工具,easyUI包,目录结构,创建数据库,创建相应的页面视图,后台代码编写,优化: 第一步:开发工具 我的开发工具是Hbuild,开发语言 ...

  10. Android-NDK编译:cocos2d-x

    看了下 cocos2d-x 3.0 alpha1 几个关于android的脚本 cocos2d-x\tools\project-creator\create_project.py cocos2d-x\ ...